Auto Populate requested for a catalog item in service-now..

surya65
Tera Contributor

Please help me with the script includes and onchange client script to Populate requested for details while raising a request through catalog item.

Below are the variables from catalog item: need to auto populate   using user  table.

requested for--> reference field    (user table)

'employee id --> reference  field  (auto populate based on requested for user)

manager name------>reference field  (auto populate based on requested for user)

title------->reference field   (auto populate based on requested for user)

cost center---------->reference field  (auto populate based on requested for user)

application-------->reference field    (auto populate based on requested for user)

plz correct if any wrong in my code:

function onChange(control, oldValue, newValue, isLoading) {

                if (isLoading || newValue == '') {

                                return;

                }

 

                var ga = new GlideAjax('CheckRecords');

                ga.addParam('sysparm_name', "checkRecordPresent");

                ga.addParam('sysparm_userID', g_form.getValue('requested_for'));

                ga.getXMLAnswer(function(answer){

                                if(answer != 'not found'){

                                                var parser = JSON.parse(answer);

                               

                                                g_form.setValue('email', parser.email);

                                                g_form.setValue('employee_id', parser.employee);

                                                g_form.setValue('manager_name', parser.manager);

                                                g_form.setValue('title', parser.title);

                                                g_form.setValue('cost_center', parser.costcenter);

                                                g_form.setValue('application', parser.application);

                                               

                                               

                                               

                                               

                                               

                                               

                                }

                });

SCRIPT INCLUDE CODE:

var CheckRecords = Class.create();

CheckRecords.prototype = Object.extendsObject(AbstractAjaxProcessor, {

 

                checkRecordPresent: function(){

                                var obj = {};

                                var id = this.getParameter('sysparm_userID');           

                                var gr = new GlideRecord('sys_user');

                                gr.addQuery('sys_id', id);

                                gr.query();

                                if(gr.next()){

                                                obj['email'] = gr.getValue('email');

                                                obj['employee_id'] = gr.getValue('employee');

                                                obj['manager_name'] = gr.getValue('manager');

                                                obj['title'] = gr.getValue('title');

                                                obj['cost_center'] = gr.getValue('costcenter');

                                                obj['application'] =gr.getValue('application');

                                               

                                }

                                return JSON.stringify(obj);

                },

                type: 'CheckRecords'

});

                                              

                                                

 

1 ACCEPTED SOLUTION

Haris5
Giga Contributor

Hi, since you are using a Catalog Item, you can do this via an onChange Catalog Client script as below

onChange Catalog Client Script

Variable = Requested for

 

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
  return;

}
var ga = new GlideAjax('CheckRecords');
ga.addParam('sysparm_name', 'checkRecordPresent');
ga.addParam('sysparm_userID, newValue);
ga.getXML(updateValues);

function updateValues(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
var parsedAnswer = JSON.parse(answer);
g_form.setValue('email', parsedAnswer.email);
g_form.setValue('employee_id', parsedAnswer.employee);
g_form.setValue('manager_name', parsedAnswer.manager);
g_form.setValue('title', parsedAnswer.title);
g_form.setValue('cost_center', parsedAnswer.costcenter);
g_form.setValue('application', parsedAnswer.application);
}
}

 

Script Include

 

var CheckRecords = Class.create();
CheckRecords.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkRecordPresent: function(){
var obj = {
'email': '',
'employee_id': '',
'manager_name': '',
'title': '',
'cost_center': '',
'application': ''
};
var id = this.getParameter('sysparm_userID');           
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', id);
gr.setLimit(1);
gr.query();
if(gr.next()){
obj['email'] = gr.email;
obj['employee_id'] = gr.employee_number;
obj['manager_name'] = gr.manager;
obj['title'] = gr.title;
obj['cost_center'] = gr.cost_center;
obj['application'] = gr.application;
 }
return JSON.stringify(obj);
},
 type: 'CheckRecords'

});

View solution in original post

14 REPLIES 14

AnirudhKumar
Mega Sage
Mega Sage

Your glideajax code is incorrect.

Check the below code:

var ga = new GlideAjax('HelloWorld');
ga.addParam('sysparm_name', 'helloWorld');
ga.addParam('sysparm_user_name', "Bob");
ga.getXML(HelloWorldParse);
 
function HelloWorldParse(response) {
  var answer = response.responseXML.documentElement.getAttribute("answer");
  alert(answer); }

hi kumar plz correct ware it goes wrong:

function onChange(control, oldValue, newValue, isLoading) {

                if (isLoading || newValue == '') {

                                return;

                }

 

                var ga = new GlideAjax('CheckRecords');

                ga.addParam('sysparm_name', "checkRecordPresent");

                ga.addParam('sysparm_userID', g_form.getValue('requested_for'));

                ga.getXMLAnswer(function(answer){

                                if(answer != 'not found'){

                                                var parser = JSON.parse(answer);

                               

                                                g_form.setValue('email', parser.email);

                                                g_form.setValue('employee_id', parser.employee);

                                                g_form.setValue('manager_name', parser.manager);

                                                g_form.setValue('title', parser.title);

                                                g_form.setValue('cost_center', parser.costcenter);

                                                g_form.setValue('application', parser.application);

                                               

                                               

                                               

                                               

                                               

                                               

                                }

                });

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

Changes

1) field name on user table is cost_center and not costcenter

2) field name on user table is employee_number and not employee

3) Also OOB there is no application field on user table. so is it a custom field then u_application

Here is the updated script

I assume your manager variable is reference type and not string

If it's string then use this

obj['manager_name'] = gr.getDisplayValue('manager');

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

	checkRecordPresent: function(){

		var obj = {};
		var id = this.getParameter('sysparm_userID');           
		var gr = new GlideRecord('sys_user');
		gr.addQuery('sys_id', id);
		gr.query();
		if(gr.next()){
			obj['email'] = gr.getValue('email');
			obj['employee_id'] = gr.getValue('employee_number');
			obj['manager_name'] = gr.getValue('manager');
			obj['title'] = gr.getValue('title');
			obj['cost_center'] = gr.getValue('cost_center');
			obj['application'] =gr.getValue('u_application');
		}
		return JSON.stringify(obj);
	},

	type: 'CheckRecords'

});

Client Script:

function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading || newValue == '') {
		return;
	}

	if(oldValue != newValue){
		var ga = new GlideAjax('CheckRecords');
		ga.addParam('sysparm_name', "checkRecordPresent");
		ga.addParam('sysparm_userID', g_form.getValue('requested_for'));
		ga.getXMLAnswer(function(answer){
			var parser = JSON.parse(answer);
			g_form.setValue('email', parser.email);
			g_form.setValue('employee_id', parser.employee);
			g_form.setValue('manager_name', parser.manager);
			g_form.setValue('title', parser.title);
			g_form.setValue('cost_center', parser.costcenter);
			g_form.setValue('application', parser.application);
		});
	}
}

Regards
Ankur

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

Hi ankur,

when i use  type is string field  then its working, if i take type is reference its not working, below are the fields:

email ---> reference.

manager---->reference.

title ------->reference.

empoyee id---> reference.