ServiceNow UI 页面 GlideAjax
ServiceNow UI Page GlideAjax
我使用 UI 页面创建了一个表单,并试图在 onChange 时自动填充一些字段。我有一个大部分工作的客户端脚本,但是当某些字段需要点遍历以便自动填充时,就会出现问题。我读到过点遍历在作用域应用程序的客户端脚本中不起作用,需要使用 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_Beneficiary table 到 HR_Emergency_Contact table。
如何将上述代码转换为 GlideAjax 格式?
我尚未测试此代码,因此您可能需要对其进行调试,但希望能让您走上正轨。然而,有几个步骤可以做到这一点。
- 创建一个
script include
来提取数据并发送对 ajax 调用的响应。
- 使用
GlideAjax
从 client script
调用此脚本包含。
- 处理 AJAX 响应并填充表单。
- 这是 #2
中 客户端脚本的一部分
几个不错的网站可以看看
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。客户端脚本 - 在这里您将使用 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。 Handle AJAX response - 处理来自 #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.');
}
}
我使用 UI 页面创建了一个表单,并试图在 onChange 时自动填充一些字段。我有一个大部分工作的客户端脚本,但是当某些字段需要点遍历以便自动填充时,就会出现问题。我读到过点遍历在作用域应用程序的客户端脚本中不起作用,需要使用 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_Beneficiary table 到 HR_Emergency_Contact table。
如何将上述代码转换为 GlideAjax 格式?
我尚未测试此代码,因此您可能需要对其进行调试,但希望能让您走上正轨。然而,有几个步骤可以做到这一点。
- 创建一个
script include
来提取数据并发送对 ajax 调用的响应。 - 使用
GlideAjax
从client script
调用此脚本包含。 - 处理 AJAX 响应并填充表单。
- 这是 #2 中 客户端脚本的一部分
几个不错的网站可以看看
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。客户端脚本 - 在这里您将使用 client script
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。 Handle AJAX response - 处理来自 #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.');
}
}