3

UI ページを使用してフォームを作成し、onChange でいくつかのフィールドを自動入力しようとしています。ほとんどの部分で機能するクライアント スクリプトがありますが、自動入力するために特定のフィールドをドット ウォークする必要がある場合に問題が発生します。範囲指定されたアプリケーションのクライアント スクリプトではドット ウォーキングが機能せず、代わりに GlideAjax コードを使用する必要があることを読みました。GlideAjax とスクリプト インクルードに慣れていません。コードの移行を手伝ってくれる人はいますか?

現在のクライアント スクリプトは次のようになります。

function beneficiary_1(){
  var usr = g_user.userID;
  var related = $('family_member_1').value;
  var rec = new GlideRecord('hr_beneficiary');
  rec.addQuery('employee',usr);
  rec.addQuery('sys_id',related);
  rec.query(dataReturned);
}
function dataReturned(rec){
  //autopopulate the beneficiary fields pending on the user selection
  if(rec.next()) {
  $('fm1_ssn').value = rec.ssn;
  $('fm1_address').value = rec.beneficiary_contact.address; 
  $('fm1_email').value = rec.beneficiary_contact.email;
  $('fm1_phone').value = rec.beneficiary_contact.mobile_phone;
  var dob = rec.date_of_birth;
  var arr = dob.split("-");
  var date = arr[1] + "/"+ arr[2] + "/" + arr[0] ;
  $('fm1_date_of_birth').value = date;
  }
}

fm1_address、fm1_email、および fm1_phone は、値が HR_Beneficiary テーブルから HR_Emergency_Contact テーブルへのドット ウォーキングであるため、自動入力されません。

上記のコードを GlideAjax 形式に変換するにはどうすればよいですか?

4

1 に答える 1

2

私はこのコードをテストしていないので、デバッグする必要があるかもしれませんが、うまくいけば正しい軌道に乗ることができます。ただし、これにはいくつかの手順があります。

  1. script includeデータをプルし、ajax 呼び出しに応答を送信する を作成します。
  2. このスクリプト インクルードをclient scriptusingから呼び出しGlideAjaxます。
  3. AJAX 応答を処理し、フォームに入力します。
    • これは#2 のクライアント スクリプトの一部です。

これを確認するためのいくつかの優れたWebサイト


1. スクリプト インクルード- ここでは、データを取得して ajax 呼び出しに応答するメソッドを作成します。

このスクリプト インクルード オブジェクトには次の詳細があります。

  • 名前: 受益者の連絡先
  • パラメータ:
    • sysparm_my_userid - 従業員のユーザー ID
    • sysparm_my_relativeid - 相対 sys_id

スクリプト インクルード オプションで「Client callable」にチェックを入れてください。


var BeneficiaryContact = Class.create();
BeneficiaryContact.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getContact : function() {
        // parameters
        var userID = this.getParameter('sysparm_my_userid');
        var relativeID = this.getParameter('sysparm_my_relativeid');

        // query
        var rec = new GlideRecord('hr_beneficiary');
        rec.addQuery('employee', userID);
        rec.addQuery('sys_id', relativeID);
        rec.query();

        // build object
        var obj = {};
        obj.has_value = rec.hasNext(); // set if a record was found

        // populate object
        if(rec.next()) {
            obj.ssn = rec.ssn;
            obj.date_of_birth = rec.date_of_birth.toString();
            obj.address = rec.beneficiary_contact.address.toString();
            obj.email = rec.beneficiary_contact.email.toString();
            obj.mobile_phone = rec.beneficiary_contact.mobile_phone.toString();
        }

        // encode to json
        var json = new JSON();
        var data = json.encode(obj);

        return data;
    },

    type : "BeneficiaryContact"
});

2. クライアント スクリプト- ここではBeneficiaryContact、#1 からclient script

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var usr = g_user.userID;
    var related = $('family_member_1').value;

    var ga = new GlideAjax('BeneficiaryContact'); // call the object
    ga.addParam('sysparm_name', 'getContact'); // call the function
    ga.addParam('sysparm_my_userid', usr); // pass in userID
    ga.addParam('sysparm_my_relativeid', related); // pass in relative sys_id
    ga.getXML(populateBeneficiary); 
}

3. AJAX 応答を処理する - #2 からの応答を処理する

これはクライアント スクリプトの一部です

ここではanswer.has_value、例としてチェックを入れていますが、これが機能し、デバッグが完了するまで、それを削除したい場合があります。

function populateBeneficiary(response) {      
    var answer = response.responseXML.documentElement.getAttribute("answer");          

    answer = answer.evalJSON(); // convert json in to an object   

    // check if a value was found
    if (answer.has_value) {
        var dob = answer.date_of_birth;
        var arr = dob.split("-");
        var date = arr[1] + "/"+ arr[2] + "/" + arr[0];

        $('fm1_ssn').value = answer.ssn;
        $('fm1_address').value = answer.address; 
        $('fm1_email').value = answer.email;
        $('fm1_phone').value = answer.mobile_phone;
        $('fm1_date_of_birth').value = date;
    }
    else {
        g_form.addErrorMessage('A beneficiary was not found.');
    }
}
于 2017-01-03T21:36:08.967 に答える