Set Display Value on Catalog Client Script - not sys_id

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 01:49 PM
I have this client script that's running when ever a serial number is changed. What I'm looking for is to set the model name to the text field. But the scipt returns the sys_id instead of the Dispaly value.
I've seen some posts here but I'm missing the last piece to understand.
Here's my Catalog UI Script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var grSerialNumber = new GlideRecord('cmdb_serial_number');
var snSysID = g_form.getValue('serialNR');
grSerialNumber.addQuery('sys_id', snSysID);
grSerialNumber.query(myCallbackFunction);
g_form.addInfoMessage(snSysID);
function myCallbackFunction(gr) {
while (gr.next()) {
//set Display Value to model filed
g_form.setValue('model', gr.cmdb_ci);
}
}
}
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 01:54 PM
Have you considered making the Model variable a Reference? That way you can set the sys_id as per your script and it will show the user the display value.
Otherwise you need to create a Client callable script include and call that from your client script to get the display value. As I don't think get displayValue works on a glide record callback.
Just to be sure you can try it like this:
function myCallbackFunction(gr) {
while (gr.next()) {
//set Display Value to model filed
g_form.setValue('model', gr.getDisplayValue('cmdb_ci'));
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 02:04 PM
The idea of using a reference filed for the model did strike me but I was hoping that it could be done using just this client script.
But there's not really a reason why I can't use a reference, so maby I'll go with that solution instead.
Buy the way. Thanks for the quick answer!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 02:00 PM
Using a Client callable script include you can do it like this:
Catalog Client script:
Set UI Type appropriate. For example to All
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('global.customCmdbUtil');
ga.addParam('sysparm_name', 'getSerialNumber');
ga.addParam('sysparm_serialnr', g_form.getValue('serialNR'));
ga.getXMLAnswer(ajaxResponse);
function ajaxResponse(answer) {
g_form.addInfoMessage(snSysID);
g_form.setValue('model', answer);
}
}
For the Client callable script include:
var customCmdbUtil = Class.create();
customCmdbUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getSerialNumber: function () {
var grSerialNumber = new GlideRecord('cmdb_serial_number');
var snSysID = this.getParameter('sysparm_serialnr');
grSerialNumber.addQuery('sys_id', snSysID);
grSerialNumber.query();
return grSerialNumber.getDisplayValue("cmdb_ci");
},
type: 'customCmdbUtil'
});

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 02:25 PM
Wow, thanks! I'll give it a try!
But, the sys_id that I got from my initial code (in my question) returns the sys_id for the CI-record and not the sys_id for the model on the ci-record.
But there is no way to dot-walk there, because it gets undefined
function myCallbackFunction(gr) {
while (gr.next()) {
g_form.addInfoMessage('gr.cmdb_ci.model_id: ' + gr.cmdb_ci.model_id);
g_form.setValue('model', gr.cmdb_ci.model_id);
}
}
Is it possible to dotwalk with the example you provided using GlideAjax?