ServiceNow UI Page GlideAjax
Я создал форму, используя страницу пользовательского интерфейса, и я пытаюсь заполнить некоторые поля в 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 к таблице HR_Emergency_Contact.
Как я могу преобразовать вышеуказанный код в формат GlideAjax?
1 ответ
Я не тестировал этот код, поэтому вам может потребоваться его отладка, но, надеюсь, вы попадете на правильный путь. Однако для этого есть пара шагов.
- Создать
script include
которые извлекают данные и отправляют ответ на вызов ajax. - Назовите этот скрипт включенным из
client script
с помощьюGlideAjax
, - Обработайте ответ AJAX и заполните форму.
- Это часть клиентского скрипта в #2
Несколько хороших сайтов, чтобы посмотреть на это
1. Включение скрипта - здесь вы создадите свой метод для извлечения данных и ответа на вызов ajax.
Этот сценарий включения объекта имеет следующие детали
- Имя: БенефициарКонтакт
- Parateters:
- sysparm_my_userid - идентификатор пользователя сотрудника
- sysparm_my_relativeid - относительный sys_id
Обязательно отметьте опцию "Клиент может вызываться" в сценарии включения.
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.');
}
}