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

hi ankur ,

manager name and employee id is not displaying. and thats not working in my portal.

Haris5
Giga Contributor

Hi Surya,

 

Please change the UI Type on the Catalog Client script to All. That would make the client script work in the portal as well.

find_real_file.png

 

Thanks,

Haris

Hi,

did you ensure UI type - ALL for your client script?

I hope manager is reference and employee id is string type

Regards
Ankur

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

@surya

Did you mistakenly marked other response as correct?

The "Marked as Correct" answer is same as what I mentioned.

You also mentioned the script I shared worked fine 4 days ago

Please mark appropriate response as correct.

find_real_file.png

Regards
Ankur

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

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'

});