The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Getting employee ID to fill in a read only box

Eli Hurst
Kilo Contributor

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);
	}
}
1 ACCEPTED SOLUTION

Hitoshi Ozawa
Giga Sage
Giga Sage

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.

https://community.servicenow.com/community?id=community_article&sys_id=1c10a1fedbbd4890feb1a851ca961...

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.

https://community.servicenow.com/community?id=community_question&sys_id=4d0e4baddb9cdbc01dcaf3231f96...

View solution in original post

44 REPLIES 44

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);
//}
}

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

the variable Request For is of what type?

Regards
Ankur

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

@Eli Hurst 

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

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

@Eli Hurst 

Did you get a chance to check on above script?

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

shloke04
Kilo Patron

Hi @Eli Hurst 

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

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke