- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-25-2024 03:19 PM
Good evening!
I am trying to push the "User" reference field from the csm_consumer table to the called_by field within Interaction. I created a Script Includes as well as a Client Script but still no luck. Do you guys see what my problem could be? Thank you!
client script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var user = new GlideAjax('getUserInfo'); // Specify Script Include name
user.addParam('sysparm_name', 'getUser'); // Parameter is the function that we're calling
user.addParam('sysparm_user', g_form.getValue('consumer')); // Parameter is consumer's sys_id
user.getXML(callback);
// getXML sends the server a request to execute the function and parameters associated with this GlideAjax object
// Server processes the request asynchronously and returns the results via the function specified as the callback
// Callback function for returning the result from the Script Include
function callback(response) {
var sysUser = response.responseXML.documentElement.getAttribute("answer");
// Do whatever you want with the response
g_form.setValue('opened_for', sysUser);
}
}
Script includes:
var getUserInfo = Class.create();
getUserInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUser: function() {
var consumer = this.getParameter("sysparm_user");
var grUser = new GlideRecord('csm_consumer');
grUser.get(consumer);
// This is where dot-walking is done
// In this case we return the consumer's sys_id
return grUser.consumer;
},
type: 'getUserInfo'
});
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-25-2024 05:11 PM
There is not a field named 'consumer' on the csm_consumer table, so nothing is returned. It's always best to return something from a GlideAjax to aid in troubleshooting (add an alert to the client script callback function to check the response/answer), and you should always use the 'get' shortcut syntax within in 'if' statement. I think the field you want to return from the consumer table is named 'user', so your Script Include should look more like this:
var getUserInfo = Class.create();
getUserInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUser: function() {
var answer = 'false';
var consumer = this.getParameter("sysparm_user");
var grUser = new GlideRecord('csm_consumer');
if (grUser.get(consumer)) {
// This is where dot-walking is done
// In this case we return the User's sys_id
answer = grUser.getValue('user');
}
return answer;
},
type: 'getUserInfo'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-25-2024 05:11 PM
There is not a field named 'consumer' on the csm_consumer table, so nothing is returned. It's always best to return something from a GlideAjax to aid in troubleshooting (add an alert to the client script callback function to check the response/answer), and you should always use the 'get' shortcut syntax within in 'if' statement. I think the field you want to return from the consumer table is named 'user', so your Script Include should look more like this:
var getUserInfo = Class.create();
getUserInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUser: function() {
var answer = 'false';
var consumer = this.getParameter("sysparm_user");
var grUser = new GlideRecord('csm_consumer');
if (grUser.get(consumer)) {
// This is where dot-walking is done
// In this case we return the User's sys_id
answer = grUser.getValue('user');
}
return answer;
},
type: 'getUserInfo'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-26-2024 11:39 AM
This worked perfectly, thank you for the additional explanation! I realize I was confusing fields in the interaction table vs consumer table - so thank you again! This all makes much more sense (I am a newer developer!).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-26-2024 05:50 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-25-2024 07:00 PM
you can use onChange client script with getReference callback and use the below script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) {
return;
}
if(newValue == ''){
g_form.clearValue('opened_for');
}
var ref = g_form.getReference('consumer', callBackMethod);
}
function callBackMethod(ref){
if(ref.user)
g_form.setValue('opened_for', ref.user);
}
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader