- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-29-2024 10:02 PM
HI Team,
iam trying to autopopulate email field using caller, but iam failing to achieve the results.
could you please help me checking the below code.
Client Script:
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-29-2024 10:33 PM
Hi @navya4
Here is the solution to this -
Create a new client callable script include with following function
var UserDetails = Class.create();
UserDetails.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getUserInfo: function() {
var details = {};
var userId = this.getParameter('sysparm_user_id');
var userObj = new GlideRecord('sys_user');
userObj.addQuery('sys_id', userId);
userObj.query();
if (userObj.next()) {
details.email= userObj.email_id.toString();
}
return JSON.stringify(details);
},
type: 'UserDetails'
});
Create a new catalog client script on the record producer/request form
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ajax = new GlideAjax('UserDetails');
ajax.addParam('sysparm_name', 'getUserInfo');
ajax.addParam('sysparm_user_id', g_form.getValue('employee_name')); // change variable name here
ajax.getXML(doSomething);
function doSomething(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var answers = JSON.parse(answer);
g_form.setValue('var_email_id', answers.email.toString()); // change variable name here
}
}
Please mark reply as Helpful/Correct, if applicable. Thanks!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-29-2024 10:43 PM - edited 02-29-2024 10:44 PM
Hello @navya4 I have updated your code based on correction needed, refer bold lines corrected
var ATQinfo = Class.create();
ATQinfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
populateUser: function() {
var uid = this.getParameter('sysparm_user_name');// need to pass sysparm_user_name which you have in client script
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', uid);
gr.query();
if (gr.next()) {
return gr.getValue('email'); //always use getValue method
}
},
type: 'ATQinfo'
});
----
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var getEmailAddr = new GlideAjax('ATQinfo'); // script include name
getEmailAddr.addParam('sysparm_name','populateUser'); //function/method name
//Pass the Requested for sys_id
getEmailAddr.addParam('sysparm_user_name', g_form.getValue('caller_id'));
getEmailAddr.getXMLAnswer(userInfo); // use getXMLAnswer
function userInfo(answer) {
alert(answer);
g_form.setValue('email', answer);
}
}
Harish

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-29-2024 10:33 PM
Hi @navya4
Here is the solution to this -
Create a new client callable script include with following function
var UserDetails = Class.create();
UserDetails.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getUserInfo: function() {
var details = {};
var userId = this.getParameter('sysparm_user_id');
var userObj = new GlideRecord('sys_user');
userObj.addQuery('sys_id', userId);
userObj.query();
if (userObj.next()) {
details.email= userObj.email_id.toString();
}
return JSON.stringify(details);
},
type: 'UserDetails'
});
Create a new catalog client script on the record producer/request form
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ajax = new GlideAjax('UserDetails');
ajax.addParam('sysparm_name', 'getUserInfo');
ajax.addParam('sysparm_user_id', g_form.getValue('employee_name')); // change variable name here
ajax.getXML(doSomething);
function doSomething(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var answers = JSON.parse(answer);
g_form.setValue('var_email_id', answers.email.toString()); // change variable name here
}
}
Please mark reply as Helpful/Correct, if applicable. Thanks!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-29-2024 10:43 PM - edited 02-29-2024 10:44 PM
Hello @navya4 I have updated your code based on correction needed, refer bold lines corrected
var ATQinfo = Class.create();
ATQinfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
populateUser: function() {
var uid = this.getParameter('sysparm_user_name');// need to pass sysparm_user_name which you have in client script
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', uid);
gr.query();
if (gr.next()) {
return gr.getValue('email'); //always use getValue method
}
},
type: 'ATQinfo'
});
----
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var getEmailAddr = new GlideAjax('ATQinfo'); // script include name
getEmailAddr.addParam('sysparm_name','populateUser'); //function/method name
//Pass the Requested for sys_id
getEmailAddr.addParam('sysparm_user_name', g_form.getValue('caller_id'));
getEmailAddr.getXMLAnswer(userInfo); // use getXMLAnswer
function userInfo(answer) {
alert(answer);
g_form.setValue('email', answer);
}
}
Harish
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-01-2024 11:23 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-29-2024 10:52 PM
Hi @navya4
In the script Include, you are passing wrong parameter. correct it. It will work fine.
Client Script:
ScriptInclude:
Please hit the like button if my suggestion has helped you in any way.
Please mark correct if my response has solved your query.
Thanks & Regards
Jyoti Jadhav