- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 05:35 PM
Overview:
I want to grab the element string of 'user_name' from the table "sys_user" based on what user is populated in the "Request For" field of a request template. Then take the 'user_name' element and put it in a read only field farther down the request form. I was trying to get it to happen onChange. This is the code I have so far, and I am not sure what I am doing wrong here. The 2 pieces of code below are the script include as well as the client script. The console.log() and the alert() were just for my testing purposes. Any assisstance would be helpful. Thank you.
Script Include:
var GetEmployeeID = Class.create();
GetEmployeeID.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserEmpID: function() {
var _userSysid = this.getParameter('sysparm_user_name');
var emp = "";
var user = new GlideRecord('sys_user');
user.addQuery('user_name', _userSysid);
user.query();
if (user.next()) {
emp = user.getElement('user_name');
}
return emp;
},
type: 'GetEmployeeID'
});
Client Script
function onChange (control, oldValue, isLoading, newValue, isTemplate) {
if (isLoading) {
return;
}
var ga = new GlideAjax('GetEmployeeID');
ga.addParam('sysparm_name', 'getUserEmpID');
ga.addParam('sysparm_user_name', newValue);
ga.getXML(setUserValue);
function setUserValue(response)
{
var ans = response.responseXML.documentElement.getAttribute("answer");
console.log(ans);
alert(ans);
}
}
Solved! Go to Solution.
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2022 04:10 PM
FYI, all the codes offered by Ankur and shloke04 should also work.
The differences are as below:
1. I've used .getXMLAnswer instead of getXML in Client Script. Refer to the following article by Mark for the reason.
2. I've used .get() instead of .query() in Script Include. Refer to the following blog by Ben.
https://developer.servicenow.com/blog.do?p=/post/training-grget/
3. Used .getValue() in Script Include to get 'user_name'. Refer to reply by Chuck in the following thread.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2022 12:50 AM
Maybe, it'll be easier to see the difference here. Yellow is commented out. Pink is modified or added.
Script Include:
var GetEmployeeID = Class.create();
GetEmployeeID.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserEmpID: function() {
var _userSysid = this.getParameter('sysparm_user_id'); // changed parameter name from "sysparam_user_name" to "sysparam_user_id" because sys_id is being passed instead of user name
var emp = "";
var user = new GlideRecord('sys_user');
//user.addQuery('user_name', _userSysid); // since only getting 1 record, using .get()
//user.query(); // comment out
//if (user.next()) { // comment out
if (user.get(_userSysid)) { // insert this statement to get 1 record
emp = user.getValue('user_name'); // get 'user_name' column
}
return emp;
},
type: 'GetEmployeeID '
});
Client Script:
function onChange (control, oldValue, isLoading, newValue, isTemplate) {
if (isLoading) {
return;
}
var ajax = new GlideAjax('GetEmployeeID'); // changed variable name from "ga" to "ajax". This isn't necessary.
ajax.addParam('sysparm_name', 'getUserEmpID');
ajax.addParam('sysparm_user_id', newValue); // change parameter name from 'sysparm_user_name' to 'syspam_user_id'
ajax.getXMLAnswer(function(answer) { / replaced .getXML() with .getXMLAnswer() because only getting 1 string value
if (answer.length > 0) {
g_form.setValue('u_user_name', answer); // set field "u_user_name" that I've added to the form with return value from Script Include
}
});
//ga.getXML(setUserValue); // comment out all .getXML() code
//function setUserValue(response)
//{
// var ans = response.responseXML.documentElement.getAttribute("answer");
// console.log(ans);
// alert(ans);
//}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 07:57 PM
Hi,
the variable Request For is of what type?
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 07:58 PM
If it's reference to sys_user then update as this
Script Include:
var GetEmployeeID = Class.create();
GetEmployeeID.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserEmpID: function() {
var _userSysid = this.getParameter('sysparm_user_name');
var emp = "";
var user = new GlideRecord('sys_user');
user.addQuery('sys_id', _userSysid);
user.query();
if (user.next()) {
emp = user.user_name;
}
return emp;
},
type: 'GetEmployeeID'
});
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 10:56 PM
Did you get a chance to check on above script?
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 11:42 PM
Hi
Below code is a working and tested code in my personal instance. Please use the same:
1) Create a Client Callable Script Include and use the script below:
var getUserName = Class.create();
getUserName.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUser : function(){
var request = this.getParameter('sysparm_user_name');
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id',request);
gr.query();
if(gr.next()){
return gr.user_name.toString();
}
},
type: 'getUserName'
});
Update your on Change Client script as below:
function onChange (control, oldValue, isLoading, newValue, isTemplate) {
if (isLoading) {
return;
}
if(newValue){
var ga = new GlideAjax('getUserName');
ga.addParam('sysparm_name', 'getUser');
ga.addParam('sysparm_user_name', newValue);
ga.getXML(setUserValue);
}
function setUserValue(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('Field Name',answer);
}
}
Hope this helps. Please mark the answer as correct/helpful based on impact.
Regards,
Shloke
Regards,
Shloke