Convert Client script to Glide Ajax

Maxwell3
Kilo Guru

Hello all,

I am trying to convert this client script into a Glide Ajax call. This is located on this incident table and the incident form is taking a long time to load when updating the fields. I think a Glide Ajax call to a Script Include might help.

Here is the Client Script below.

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading)
return;

//make work notes mandatory as appropriate
if(newValue == oldValue)
g_form.setMandatory('work_notes', false);
else
g_form.setMandatory('work_notes', true);

//clear dependent values
g_form.setValue('assigned_to', null);
g_form.setValue('u_field3', null);
g_form.setValue('u_field2', null);
g_form.setValue('u_field1', null);

//repopulate dependent values
var group = g_form.getReference('assignment_group', setQueue);
}

function setQueue(group) {
if (group)
{
g_form.setValue('u_field1', group.u_field1);
g_form.setValue('u_field2', group.u_field2);
g_form.setValue('u_field3', group.u_field3);
}
}

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi Maxwell,

That's correct using GlideAjax is better than using getReference with callback in terms of performance

 

Script Include: it should be client callable

var checkRecords = Class.create();
checkRecords.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	checkRecordPresent: function(){
                var obj = {};
		        var group = this.getParameter('sysparm_group');	
                var groupRec = new GlideRecord('sys_user_group');
                groupRec.addQuery('sys_id', group);
                groupRec.query();
                if(groupRec.next()){
                   obj['u_field1'] = groupRec.u_field1;
                   obj['u_field2'] = groupRec.u_field2;
                   obj['u_field3'] = groupRec.u_field3;
                }		
		return JSON.stringify(obj);
	},
	
    type: 'checkRecords'
});

Client Script:

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading)
		return;

	//make work notes mandatory as appropriate
	if(newValue == oldValue)
		g_form.setMandatory('work_notes', false);
	else
		g_form.setMandatory('work_notes', true);

	//clear dependent values
	g_form.setValue('assigned_to', null);
	g_form.setValue('u_field3', null);
	g_form.setValue('u_field2', null);
	g_form.setValue('u_field1', null);

	var ga = new GlideAjax('checkRecords');
	ga.addParam('sysparm_name', "checkRecordPresent");
	ga.addParam('sysparm_group', g_form.getValue('assignment_group'));
	ga.getXMLAnswer(function(answer){
		if(answer != ''){
			var answerObj = JSON.parse(answer);
			g_form.setValue('u_field1', answerObj.u_field1);
			g_form.setValue('u_field2', answerObj.u_field2);
			g_form.setValue('u_field3', answerObj.u_field3);
		}
	});
}

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

17 REPLIES 17

Thank you Muhammad.

The field are still not getting populated.

Hi Maxwell,

If your assignment_group is reference to group table then query should be

('sys_id', group)

Did you check what is coming in the json in answer?

Also are the field names proper which you are trying to set?

var ga = new GlideAjax('checkRecords');
ga.addParam('sysparm_name', "checkRecordPresent");
ga.addParam('sysparm_group', g_form.getValue('assignment_group'));
ga.getXMLAnswer(function(answer){
if(answer != ''){

alert(answer); // if this is giving you correct json string then check fields

var answerObj = JSON.parse(answer);
g_form.setValue('u_field1', answerObj.u_field1);
g_form.setValue('u_field2', answerObj.u_field2);
g_form.setValue('u_field3', answerObj.u_field3);
}
});

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hello Ankur,

 

For the JSON(answer) I am getting a "null". In the alert pop up window.

Hello Ankur,

Correction.

I am getting the field names in my JSON answer. Below is what I get from the alert pop up window. I think the Query is just returning the field names but not the value of the fields. What are your thoughts on this?

{"u_field1":{},"u_field2":{},"u_field3":{}}

Hi Maxwell,

it means either the values for those fields are empty or the field is incorrect

Please check for the group selected the 3 fields are having values or not.

If it has value then your script should work fine.

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader