- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-19-2017 09:19 PM
Hi Team,
I have a reference variable (mobile_device) on the service portal and when a device is selected two fields appear (IMEI & Serial Number). It is hidden until mobile_device field is not empty. The mobile device details (u_imei and serial_number) are stored in the (u_cmdb_ci_mobile_device). I have written up a script include and called it from a catalog client script. It does not seem to work and i am not sure what the error is. I know it is something to do with the code but i am not too sure what is causing the issue. The screenshots are below.
All help is appreciated.
Thank you
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-20-2017 05:46 PM
Hi Thiraj,
Hope this helps:
Server Script:
var getDeviceCIDetails = Class.create();
getDeviceCIDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getCIDevice: function() {
var obj = {};
var json = new JSON();
var mob = this.getParameter('sysparm_mob');
var mobDets = new GlideRecord('u_cmdb_ci_mobile_device');
mobDets.addQuery('sys_id', mob);
mobDets.query();
if(mobDets.next() && gs.getUser()) {
obj.imei = mobDets.u_imei + '';
obj.serial_number = mobDets.serial_number + '';
return json.encode(obj);
}
},
type: 'getDeviceCIDetails'
}
);
Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if(newValue == oldValue) {
return;
}
var gaj = new GlideAjax('getDeviceCIDetails');
gaj.addParam('sysparm_name', 'getCIDevice');
gaj.addParam('sysparm_mob', newValue);
gaj.getXML(ajaxResponse);
function ajaxResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
//check that answer is not nil before continuing
if(answer) {
var answer_json = answer.evalJSON();
g_form.setValue('imei', answer_json.imei);
g_form.setValue('serial', answer_json.serial_number);
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-19-2017 09:39 PM
Hi Thiraj,
Line 18 to 24 of the "Populate Device Details" Catalog Client Script is not going to work because the "answer" attribute will only contain either "true" or "" as these are the only two possibilities that can be returned from the "getCIDevice" function in your Script Include.
The Script Include is not returning the 'u_cmdb_mobile_device' GlideRecord, it is only returning "true" or "", which means when you try to access the u_imei and serial_number attributes you won't be able to as these only exist on the "u_cmdb_mobile_device" GlideRecord object.
You will need to return these two attributes in your Script Include in order for them to be accessible via your Catalog Client Script.
These two pages explain how to return multiple attributes in a GlideAjax call. They may help you in achieving the outcome you're after.
http://wiki.servicenow.com/index.php?title=GlideAjax#gsc.tab=0
https://fruitionpartners.eu/blog/2015/11/17/glideajax-return-multiple-values-using-json/
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-19-2017 11:15 PM
Hi Cam,
Thank you for the useful information. But i am not quiet clear with the syntax on how to return the two values (IMEI & Serial_number). Do you think you can help me out with the syntax.
Thank you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-19-2017 11:51 PM
if(mobDets.next()){
var obj = {};
var json = new JSON();
obj.imei=mobDets.u_imei;
obj.serialNum=mobDets.serial_number;
var result = json.encode(obj);
return result;
}
in client script
function ajaxResponse(response)
{
var mobValue= response.responseXML.documentElement.getAttribute("mobValue");
mobValue= mobValue.evalJSON();
g_from.setValue('imei',mobValue.imei);
g_form.setValue('serial',mobValue.serialNum);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-20-2017 05:46 PM
Hi Thiraj,
Hope this helps:
Server Script:
var getDeviceCIDetails = Class.create();
getDeviceCIDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getCIDevice: function() {
var obj = {};
var json = new JSON();
var mob = this.getParameter('sysparm_mob');
var mobDets = new GlideRecord('u_cmdb_ci_mobile_device');
mobDets.addQuery('sys_id', mob);
mobDets.query();
if(mobDets.next() && gs.getUser()) {
obj.imei = mobDets.u_imei + '';
obj.serial_number = mobDets.serial_number + '';
return json.encode(obj);
}
},
type: 'getDeviceCIDetails'
}
);
Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if(newValue == oldValue) {
return;
}
var gaj = new GlideAjax('getDeviceCIDetails');
gaj.addParam('sysparm_name', 'getCIDevice');
gaj.addParam('sysparm_mob', newValue);
gaj.getXML(ajaxResponse);
function ajaxResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
//check that answer is not nil before continuing
if(answer) {
var answer_json = answer.evalJSON();
g_form.setValue('imei', answer_json.imei);
g_form.setValue('serial', answer_json.serial_number);
}
}
}