auto Populating the values in a form using glideajax and script include

Vijay8
Giga Contributor

Hi All,

I have a requirement to auto populate the field values (email, mobile, manager, department) when I change the user Using script include and glide ajax 

 

I tried the script below but not working fine 

 

please help

 

 

Client script onchange 

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

var userselected = g_form.getValue('u_user');

var userdetails = new GlideAjax('global.userDetailsUtil');

userdetails.addParam('sysparm_name', 'getUserDetails');

userdetails.addParam('sysparm_userselect', userselected);

userdetails.getXMLAnswer(function(response) {

var userObj = JSON.parse(response);

g_form.setValue('u_mobile', userObj.contactNo);

g_form.setValue('u_department', userObj.department);

g_form.setValue('u_email', userObj.email);

g_form.setValue('u_manager', userObj.manager);

});
}

 

Script include

 

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

getUserDetails: function() {
var uerObj = {};

var gr= GlideRecord('sys_user');
if(gr.get(this.getParameter('sysparm_userselect'))){
userObj.contactNo = gr.getValue('mobile_phone');
userObj.manager = gr.getValue('manager');
userObj.email = gr.getValue('email');
userObj.department = gr.getValue('department');

}
return JSON.stringify(uerObj);
},

type: 'userDetailsUtil'
});

 

 

1 ACCEPTED SOLUTION

Ashutosh Munot1
Kilo Patron
Kilo Patron

Hi,
Use this one:

Client script:

function onLoad() {
    //Type appropriate comment here, and begin script below
    var getEmailaddr = new GlideAjax('HelloWorld');
    getEmailaddr.addParam('sysparm_name', 'getJsonBack');
    getEmailaddr.addParam('sysparm_userID', g_user.userID);
    getEmailaddr.getXML(populateField);

    function populateField(response) {
        var obj1 = response.responseXML.documentElement.getAttribute('answer');
        var userObj= JSON.parse(obj1);
        g_form.setValue('u_mobile', userObj.contactNo);

g_form.setValue('u_department', userObj.department);

g_form.setValue('u_email', userObj.email);

g_form.setValue('u_manager', userObj.manager);		

    }
}

 

Script include:

 var usr = this.getParameter('sysparm_userID');
        var obj = {};
        var gr = new GlideRecord('sys_user');
        gr.addQuery('sys_id', usr);
        gr.query();
        if (gr.next()) {
        obj['contactNo']= gr.mobile_phone.toString();
	obj['department'] = gr.department.toString();
obj['manager'] = gr.manager.toString();
obj['email'] = gr.email.toString();
	
        }
		
var dept = JSON.stringify(obj);
return dept;


Thanks,
Ashutosh

View solution in original post

7 REPLIES 7

Ashutosh Munot1
Kilo Patron
Kilo Patron

Hi,
Use this one:

Client script:

function onLoad() {
    //Type appropriate comment here, and begin script below
    var getEmailaddr = new GlideAjax('HelloWorld');
    getEmailaddr.addParam('sysparm_name', 'getJsonBack');
    getEmailaddr.addParam('sysparm_userID', g_user.userID);
    getEmailaddr.getXML(populateField);

    function populateField(response) {
        var obj1 = response.responseXML.documentElement.getAttribute('answer');
        var userObj= JSON.parse(obj1);
        g_form.setValue('u_mobile', userObj.contactNo);

g_form.setValue('u_department', userObj.department);

g_form.setValue('u_email', userObj.email);

g_form.setValue('u_manager', userObj.manager);		

    }
}

 

Script include:

 var usr = this.getParameter('sysparm_userID');
        var obj = {};
        var gr = new GlideRecord('sys_user');
        gr.addQuery('sys_id', usr);
        gr.query();
        if (gr.next()) {
        obj['contactNo']= gr.mobile_phone.toString();
	obj['department'] = gr.department.toString();
obj['manager'] = gr.manager.toString();
obj['email'] = gr.email.toString();
	
        }
		
var dept = JSON.stringify(obj);
return dept;


Thanks,
Ashutosh

Hi Ashutosh 

Thank you for immediate reply it's working fine

 

Thank you 

The SN Nerd
Giga Sage
Giga Sage

Just to supplement some of the other answers, you may want to consider returning display values for your reference fields.

If you don't supply a third parameter for setValue(), ServiceNow will synchronously make an additional GlideAjax call to retrieve the display value. You'll see this in the browser console logs and it is very inefficient.

Examples below:

Server-side

userObj.contactNo = gr.getValue('mobile_phone');
userObj.manager = gr.getValue('manager');
userObj.manager_display = gr.manager.getDisplayValue();
userObj.email = gr.getValue('email');
userObj.department = gr.getValue('department');
userObj.department_display = gr.department.getDisplayValue();

Client-side

g_form.setValue('u_mobile', userObj.contactNo);
g_form.setValue('u_department', userObj.department, userObj.department_display);
g_form.setValue('u_email', userObj.email);
g_form.setValue('u_manager', userObj.manager,userObj.manager_display);

find_real_file.png

https://developer.servicenow.com/dev.do#!/reference/api/orlando/client/c_GlideFormAPI#r_GlideFormSet...


ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022