The CreatorCon Call for Content is officially open! Get started here.

Get User's values from sys_user table on basis of user selected.

prabhmeet
Giga Expert

Hi,

Please find below screenshots of my catalog item. Requested for is a reference field to table sys_user. When I select a user's name in requested for, the user's values on the fields on right side should be automatically populated from sys_user table.

For eg - abel tuter is selected so first name, last name etc should be populated from sys_user table. The values which are not present should remain empty.

Please help me on how to do this with the code as I am new to ServiceNow and not very good at scripting..

find_real_file.png

find_real_file.png

1 ACCEPTED SOLUTION

Omkar Mone
Mega Sage

Hi 

You need to create a onChange client script and client callable script include for this purpose. See below :-

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
	
	var id = g_form.getValue('u_reference_1');//newValue


   var ga = new GlideAjax('GetUserDetailsAjax');


   ga.addParam('sysparm_name','getInfo');


   ga.addParam('sysparm_user_id',id);


   ga.getXML(CallBack);



   function CallBack(response)
	{


   var answer = response.responseXML.documentElement.getAttribute("answer");


   var user=JSON.parse(answer);


   //g_form.setValue('req_email', user.email);


   //g_form.setValue('req_phone', user.phone);


   //g_form.setValue('address1', user.street);
alert(user.location);

   //g_form.setValue('city_state_zip', user.location);


   }

   
}

 

Client Callable Script Include :-

 

var GetUserDetailsAjax = Class.create();
GetUserDetailsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getInfo: function(){


   var obj={};
   obj.location='';
   obj.email='';
   obj.phone='';
   obj.street='';
   var id=this.getParameter('sysparm_user_id');
   var gr= new GlideRecord('sys_user');
   if(gr.get(id)){
	   
   if(gr.location!='')

   obj.location=gr.location.city.toString();
   obj.zip=gr.zip.toString();
   obj.street=gr.street.toString();
   obj.phone=gr.phone.toString();
   obj.email=gr.email.toString();

//here you will get all the required fields from sys_user that you want to show on your form.
   }


   return JSON.stringify(obj);


   },
	
    type: 'GetUserDetailsAjax'
});

 

Let me know.

 

Regards,

Omkar Mone.

www.dxsherpa.com

View solution in original post

30 REPLIES 30

Hi 

Check if first_name is present for those users.

Hi 

Have you checked this? Please share you code once.

Hi , yes I have checked, the first_name is present for those users.

here's the script - 

script include-

var GetUserDetailsAjax = Class.create();
GetUserDetailsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getInfo: function(){


var obj={};
obj.first_name='';
obj.last_name='';
obj.email='';
obj.vendor_name='';
obj.location='';
obj.department='';
obj.beeline_assignment_number='';
obj.manager='';
obj.contracter_end_date='';
obj.phone_number='';
// obj.street='';
var id=this.getParameter('sysparm_user_id');
var gr= new GlideRecord('sys_user');
if(gr.get(id)){

if(gr.location!='')
obj.first_name = gr.first_name.toString();
obj.last_name = gr.last_name.toString();
obj.email=gr.email.toString();
obj.vendor_name =gr.u_vendor_name.toString();
obj.location=gr.location.name.toString();
obj.department=gr.department.name.toString();
obj.beeline_assignment_number = gr.department.id.toString();
obj.manager=gr.manager.getDisplayValue().toString();
obj.contracter_end_date=gr.u_end_date.toString();
// obj.zip=gr.zip.toString();
//obj.street=gr.street.toString();
obj.phone_number=gr.mobile_phone.toString();


//here you will get all the required fields from sys_user that you want to show on your form.
}


return JSON.stringify(obj);


},

type: 'GetUserDetailsAjax'
});

 

Onchange client script

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

var id = g_form.getValue('requested_for');//newValue


var ga = new GlideAjax('GetUserDetailsAjax');


ga.addParam('sysparm_name','getInfo');


ga.addParam('sysparm_user_id',id);


ga.getXML(CallBack);

 

function CallBack(response)
{


var answer = response.responseXML.documentElement.getAttribute("answer");


var user=JSON.parse(answer);
g_form.setValue('first_name',user.first_name);
g_form.setValue('last_name', user.last_name);
g_form.setValue('email_address', user.email);
g_form.setValue('vendor_name', user.u_vendor_name);
g_form.setValue('location_number', user.location);
g_form.setValue('department', user.department);
g_form.setValue('current_assignment_number', user.beeline_assignment_number);
g_form.setValue('manager', user.manager);
g_form.setValue('end_date', user.contracter_end_date);
g_form.setValue('phone_number', user.phone_number);



}

Hi Omkar,

I hope you can help me with this also.

In the screenshot above in the question and shown below, on the updated fields present on the left side , I want only Requested For user's manager and User Access Admin group can enter into some of the fields (like say first 6 fields).

To the other users, fields will be visible but they cannot enter into the fields.

How can I do this? Can you help me with script for this requirement also.

Hi Omkar, any idea why the first name is not coming up for these users?