ServiceNow UI Page GlideAjax



我使用UI Page创建了一个表单,并试图在Change上自动填充一些字段。我有一个客户端脚本,它在大多数情况下都有效,但当某些字段需要点遍历才能自动填充时,就会出现问题。我读到,点遍历在作用域应用程序的客户端脚本中不起作用,需要使用GlideAjax代码。我不熟悉GlideAjax和Script Includes,有人能帮我转换代码吗?

我当前的客户端脚本如下:

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_Beneficial表到HR_Emerge_Contact表的点遍历。

如何将上面的代码转换为GlideAjax格式?

我还没有测试过这段代码,所以你可能需要调试它,但希望能让你走上正轨。然而,这需要几个步骤。

  1. 创建一个script include,用于提取数据并向ajax调用发送响应
  2. 使用GlideAjaxclient script调用此脚本include
  3. 处理AJAX响应并填充表单。
    • 这是#2中客户端脚本的一部分

几个好的网站可以看看这个

供参考的GlideAjax文档
  • 使用GlideAjax返回多个值

  • 1.Script Include-在这里,您将创建方法来提取数据并响应ajax调用。

    此脚本包含对象具有以下详细信息

    • 姓名:受益人联系人
    • Parateters:
      • sysparm_my_userid-员工的用户ID
      • sysparm_my_relativeid-相对sys_id

    确保在脚本include选项中选中"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.客户端脚本-在这里,您将使用client script从#1调用BeneficiaryContact

    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.');
    }
    }
    

    最新更新