- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-16-2018 04:22 PM
My requirement is to return multiple fields from a user's manager's fields (the manager's email and username) based on field. I'm a little lost with JSON with Ajax. I can mostly understand Ajax.
I'm getting confused on the server side section based. I mostly based this on this post: GlideAjax Example Cheat Sheet
I'm not sure how it's getting its query results and how to pull those to the client side to fill in the fields.
This is my client script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var employee = g_form.getValue('u_employee');
var ga = new GlideAjax('getEmployeeFields');
ga.addParam('sysparm_name', 'getEmployeeData');
ga.addParam('syparm_emp', employee);
ga.getXML(stateCallback);
}
function stateCallback(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
if (answer) {
var returneddata = answer.evalJSON(true);
//g_form.setValue('y_employee_username', sepEmp.user_name);
//g_form.setValue('y_employee_dn', sepEmp.u_display_name);
//g_form.setValue('y_employee_email', sepEmp.email);
g_form.setValue('y_manager_username', returneddata.manager_username);
//g_form.setValue('y_manager_email', returneddata.manager_email);
}
}
This is my script include
var asu_GetLocationData = Class.create();
asu_GetLocationData.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getEmployeeData: function () {
var employee = this.getParameter('sysparm_emp');
var userTable = new GlideRecord('sys_user');
if (userTable.get(employee)) {
var json = new JSON();
var results = {
"manage_username": userTable.getValue('manager.user_name'),
"manager_email": userTable.getValue('manager.email')
};
return json.encode(results);
}
}
});
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-16-2018 09:17 PM
I was able to play around with some of the script and found a few typos. Other than the typos, I was running into an [object Object] error with my results. I used a combination of suggestions this what worked for me. I found that using getDisplayValue() fixed the [object Object] error but I'm not sure if that would be right fix. I'm curious why I couldn't go down another level if I used
userTable.getValue('manager.user_name');
If there are best practices I should be using, please feel free to correct. I'd rather learn the right way.
Server Side
var getEmployeeFields = Class.create();
getEmployeeFields.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getEmployeeData: function () {
var employee = this.getParameter('sysparm_emp');
var userTable = new GlideRecord('sys_user');
if (userTable.get(employee)) {
var results = {
'musername': userTable.getDisplayValue('manager.user_name'),
'memail': userTable.getDisplayValue('manager.email'),
'username': userTable.getValue('user_name'),
'displayname': userTable.getValue('u_display_name'),
'email': userTable.getValue('email')
};
return JSON.stringify(results);
}
},
type: 'getEmployeeFields'
});
Client Side
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var employee = g_form.getValue('u_employee');
var ga = new GlideAjax('getEmployeeFields');
ga.addParam('sysparm_name', 'getEmployeeData');
ga.addParam('sysparm_emp', employee);
ga.getXML(stateCallback);
}
function stateCallback(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
if (answer) {
var returneddata = JSON.parse(answer);
g_form.setValue('y_employee_username', returneddata.username);
g_form.setValue('y_employee_dn', returneddata.displayname);
g_form.setValue('y_employee_email', returneddata.email);
g_form.setValue('y_manager_username', returneddata.musername);
g_form.setValue('y_manager_email', returneddata.memail);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-16-2018 04:58 PM
kkim,
The sysparm_name section of your client script (line 😎 should have it's second argument match the name of the class in line 1 of your server script (in this case, it looks like you copied the name from the example, 'asu_GetLocationData').
The best practices for returning JSON objects has since changed (at least as far as I know).
Here is a pretty simple example, give that a try and let us know.
Script Include:
var UserUtils = Class.create();
UserUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getValue: function(){
var userInfo = {};
userInfo.name = 'John';
return JSON.stringify(userInfo);
},
type: 'UserUtils'
});
Client Script:
function onLoad() {
var ga = new GlideAjax('UserUtils');
ga.addParam('sysparm_name','getValue');
ga.getXMLAnswer(emitResponse);
}
function emitResponse(response){
var responseObject = JSON.parse(response);
alert(responseObject);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-16-2018 05:06 PM
Hello Kim
Can we try something like this
Script Include:
Client callable: checked
Name: GetUserDetails
Script:
var GetUserDetails = Class.create();
GetUserDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDetails: function(){
var retVal ;
var name= this.getParameter('sysparm_user_id');
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', name);
gr.query();
if(gr.next())
{
retVal = gr.manager.email+','+gr.manager.getDisplayValue();
}
return retVal;
},
type: 'GetUserDetails'
});
Client Script: OnChange
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var name = g_form.getValue('u_test_user_select'); //give your variable name on the form
var ga = new GlideAjax('GetUserDetails');
ga.addParam('sysparm_name','getDetails');
ga.addParam('sysparm_user_id',name);
ga.getXML(CallBack);
function CallBack(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
g_form.setValue('required feild1',answer[0]);
g_form.setValue('required feild2',answers[1]);
}
}
Let me know how it goes
Please mark my response as correct and helpful if it helped solved your question.
-Thanks

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-16-2018 06:35 PM
instead of evalJSON in client script, please use JSON.parse, like
in client script:
var returneddata =JSON.parse(answer);
g_form.setValue('u_manager_username', returneddata.manager_username); // I think field name should start with u_ (if it's not a variables)
in script include:
var results = {};
results.manage_username = userTable.manager.user_name;
results.manager_email = userTable.manager.email;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-16-2018 09:17 PM
I was able to play around with some of the script and found a few typos. Other than the typos, I was running into an [object Object] error with my results. I used a combination of suggestions this what worked for me. I found that using getDisplayValue() fixed the [object Object] error but I'm not sure if that would be right fix. I'm curious why I couldn't go down another level if I used
userTable.getValue('manager.user_name');
If there are best practices I should be using, please feel free to correct. I'd rather learn the right way.
Server Side
var getEmployeeFields = Class.create();
getEmployeeFields.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getEmployeeData: function () {
var employee = this.getParameter('sysparm_emp');
var userTable = new GlideRecord('sys_user');
if (userTable.get(employee)) {
var results = {
'musername': userTable.getDisplayValue('manager.user_name'),
'memail': userTable.getDisplayValue('manager.email'),
'username': userTable.getValue('user_name'),
'displayname': userTable.getValue('u_display_name'),
'email': userTable.getValue('email')
};
return JSON.stringify(results);
}
},
type: 'getEmployeeFields'
});
Client Side
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var employee = g_form.getValue('u_employee');
var ga = new GlideAjax('getEmployeeFields');
ga.addParam('sysparm_name', 'getEmployeeData');
ga.addParam('sysparm_emp', employee);
ga.getXML(stateCallback);
}
function stateCallback(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
if (answer) {
var returneddata = JSON.parse(answer);
g_form.setValue('y_employee_username', returneddata.username);
g_form.setValue('y_employee_dn', returneddata.displayname);
g_form.setValue('y_employee_email', returneddata.email);
g_form.setValue('y_manager_username', returneddata.musername);
g_form.setValue('y_manager_email', returneddata.memail);
}
}