We have an catalog item, when on change of value there should be a barcode image populated, this is working perfectly for admins, when logged as ITIL user, on change of value the barcode image is not populated.
var GetRITMDetailsOnSubmitCatalogTask = Class.create();
GetRITMDetailsOnSubmitCatalogTask.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDetails: function() {
var ritmSysId = this.getParameter('sys_id');
var barcodeimg = this.getParameter('sys_barCodeImage');
var aID = this.getParameter('sys_assetID');
var sNumber = this.getParameter('sys_serialNumber');
var inStock = this.getParameter('sys_instock');
// gs.addInfoMessage('ritmSysId: ' + barcodeimg);
// gs.addInfoMessage('ritmSysId: ' + ritmSysId);
// gs.addInfoMessage('aID: ' + aID);
// gs.addInfoMessage('sNumber: ' + sNumber);
var values = {};
if (ritmSysId) {
var ritm = new GlideRecord('sc_req_item');
if (ritm.get(ritmSysId)) {
// gs.addInfoMessage('Fetching RITM variables...');
values.requester_name = ritm.variables.requester_name; // Requester Name
values.requested_for = ritm.variables.requested_for; //Requested for
values.asset_type = ritm.variables.asset_type.getDisplayValue(); //Asset Type
values.requested_model = ritm.variables.requested_model.getDisplayValue(); //Requested Model
values.storage_size = ritm.variables.storage_size.getDisplayValue(); //Storage Size
values.required_location = ritm.variables.required_location; //Required Location
// values.application_said = ritm.variables.application_said; // Application SAID
// values.application_name = ritm.variables.application_name.getDisplayValue(); // Application Name
values.u_cmdb_ci_assetnum = aID;
values.serial_number = sNumber;
// values.u_qs_cmdb_ci_application_id = ritm.variables.application_name.getDisplayValue();
values.sys_created_by = ritm.variables.requester_name.getDisplayValue();
values.sys_id = ritmSysId;
values.u_asset_status = inStock;
values.u_barcode = barcodeimg;
values.asset_tag = aID + sNumber;
// gs.info('RITM Variables: ' + JSON.stringify(values));
// Check if the record already exists in cmdb_ci_peripheral using ritmSysId
var cmdbRecord = new GlideRecord('cmdb_ci_peripheral');
cmdbRecord.addQuery('u_ritm_id', ritmSysId); // Using RITM sys_id as the unique identifier
cmdbRecord.query();
if (cmdbRecord.next()) {
// gs.addInfoMessage('Existing record found. Updating...');
// cmdbRecord.sys_created_by = values.sys_created_by;
// cmdbRecord.u_asset_status = values.u_asset_status;
// cmdbRecord.u_ritm_id = values.sys_id; // Storing RITM sys_id for future updates
// cmdbRecord.u_requested_for = values.requested_for; // Requested for
// cmdbRecord.update();
// gs.addInfoMessage('Record updated in cmdb_ci_peripheral with Name: ' + JSON.stringify(values));
return;
} else {
// gs.addInfoMessage('No existing record found. Inserting new record...');
cmdbRecord.initialize();
cmdbRecord.u_ritm_id = values.sys_id; // Storing RITM sys_id for future updates
// cmdbRecord.name = values.requester_name; // Requester Name
cmdbRecord.name = values.asset_tag; // Requester Name
cmdbRecord.u_requested_for = values.requested_for; // Requested for
cmdbRecord.u_asset_type = values.asset_type; // Asset Type
cmdbRecord.model_number = values.requested_model; //Requested Model
cmdbRecord.u_storage_size = values.storage_size; //Storage Size
cmdbRecord.location = values.required_location; //Required Location
cmdbRecord.serial_number = values.serial_number; //Serial Number
cmdbRecord.u_cmdb_ci_assetnum = values.u_cmdb_ci_assetnum; //Asset Number
// cmdbRecord.u_qs_cmdb_ci_application_id = values.application_said; // Application SAID
// cmdbRecord.u_application_name = values.application_name; // Application Name
// cmdbRecord.sys_created_by = values.sys_created_by;
cmdbRecord.sys_created_by = "USB Integration";
cmdbRecord.u_asset_status = values.u_asset_status; // Asset Status
cmdbRecord.u_barcode = values.u_barcode;
cmdbRecord.asset_tag = values.asset_tag;
cmdbRecord.u_requestor_name = values.requester_name;
cmdbRecord.insert();
// gs.addInfoMessage('New record inserted into cmdb_ci_peripheral with Name: ' + JSON.stringify(cmdbRecord));
}
}
}
// gs.info('Returning values: ' + JSON.stringify(values)); // Debugging log
return JSON.stringify(values); // Ensure this returns a string
},
checkExistingRecord: function() {
var ritmSysId = this.getParameter('sys_id');
var result = {
found: false
};
if (ritmSysId) {
var cmdbRecord = new GlideRecord('cmdb_ci_peripheral');
cmdbRecord.addQuery('u_ritm_id', ritmSysId);
cmdbRecord.query();
if (cmdbRecord.next()) {
result.found = true;
result.sys_id = cmdbRecord.getUniqueValue();
result.assetID = cmdbRecord.u_cmdb_ci_assetnum;
result.serialNumber = cmdbRecord.serial_number;
result.message = 'Existing record found';
}
}
return JSON.stringify(result);
},
updateAssetState: function() {
var ritmSysId = this.getParameter('sys_id'); // Get RITM sys_id from client script
var aInUse = this.getParameter('sys_inuse'); // Get the asset state to update
var assignTo = this.getParameter('sys_assigned_to'); // Get the asset state to update
// gs.info('Existing record found for u_ritm_id: ' + ritmSysId);
var result = {
found: false
};
if (ritmSysId) {
var cmdbRecord = new GlideRecord('cmdb_ci_peripheral');
cmdbRecord.addQuery('u_ritm_id', ritmSysId);
cmdbRecord.query();
// gs.info('cmdbRecord record found for u_ritm_id: ' + ritmSysId);
if (cmdbRecord.next()) {
var cmdbSysId = cmdbRecord.getUniqueValue(); // Get the existing record's sys_id
// gs.addInfoMessage('Existing record found for u_ritm_id: ' + ritmSysId + ' | cmdb_sys_id: ' + cmdbSysId);
// Update u_asset_status to "In Use"
cmdbRecord.setValue('u_asset_status', aInUse);
cmdbRecord.setValue('assigned_to', assignTo);
cmdbRecord.update();
// gs.addInfoMessage('Updated u_asset_status to: ' + aInUse);
result.found = true;
result.sys_id = cmdbSysId;
result.message = 'Existing record updated successfully.';
} else {
// gs.addInfoMessage('No existing record found for u_ritm_id: ' + ritmSysId);
result.message = 'No existing record found.';
}
}
return JSON.stringify(result);
},
checkRITM: function() {
var ritmId = this.getParameter('sysparm_ritm_id');
var gr = new GlideRecord('cmdb_ci_peripheral');
gr.addQuery('u_ritm_id', ritmId);
gr.query();
if (gr.next()) {
var result = {
sys_id: gr.getUniqueValue(),
asset_number: gr.getValue('u_cmdb_ci_assetnum'),
serial_number: gr.getValue('serial_number')
};
return JSON.stringify(result); // Convert to JSON string for response
}
return JSON.stringify({
sys_id: '',
asset_number: '',
serial_number: ''
}); // Return empty values if no match
},
getNextBarcode: function() {
var prefix = 'u';
var highestSerial = -1;
var gr = new GlideRecord('cmdb_ci_peripheral');
gr.addQuery('asset_tag', 'STARTSWITH', prefix);
gr.query();
while (gr.next()) {
var assetTag = gr.getValue('asset_tag'); // e.g., 'u000', 'u001'
var serialPart = assetTag.substring(1); // remove prefix => '000'
var serialNumber = parseInt(serialPart, 10);
if (!isNaN(serialNumber) && serialNumber > highestSerial) {
highestSerial = serialNumber;
}
}
var nextSerial = (highestSerial + 1).toString().padStart(4, '0'); // '0000', '0001', etc.
var result = {
asset_id: prefix,
serial_number: nextSerial
};
return JSON.stringify(result);
},
getExistingUSBDetails: function() {
var ritmSysId = this.getParameter('sys_id');
var usbInUse = this.getParameter('sys_inuse');
var values = {};
if (!ritmSysId) {
gs.error('RITM Sys ID is missing');
return JSON.stringify({
error: 'RITM Sys ID missing'
});
}
var ritm = new GlideRecord('sc_req_item');
if (!ritm.get(ritmSysId)) {
gs.error('Invalid RITM Sys ID: ' + ritmSysId);
return JSON.stringify({
error: 'Invalid RITM'
});
}
// Fetch RITM Variables
values.please_select_asset_tag = ritm.variables.please_select_asset_tag.getDisplayValue() + '';
values.requested_for = ritm.variables.requested_for + '';
values.requester_name = ritm.variables.requester_name + '';
values.required_location = ritm.variables.required_location + '';
// values.application_said = ritm.variables.application_said + '';
// values.application_name = ritm.variables.application_name + '';
values.u_asset_status = usbInUse;
// Logging for debug
// gs.info('Fetched Variables from RITM: ' + JSON.stringify(values));
// Update cmdb_ci_peripheral based on correlation ID (asset tag)
var cmdbRecord = new GlideRecord('cmdb_ci_peripheral');
cmdbRecord.addQuery('asset_tag', values.please_select_asset_tag);
cmdbRecord.query();
if (cmdbRecord.next()) {
cmdbRecord.assigned_to = values.requested_for;
cmdbRecord.location = values.required_location;
// cmdbRecord.u_qs_cmdb_ci_application_id = values.application_said;
// cmdbRecord.u_application_name = values.application_name;
cmdbRecord.u_requested_for = values.requested_for;
cmdbRecord.u_asset_status = values.u_asset_status;
cmdbRecord.u_requestor_name = values.requester_name;
cmdbRecord.update();
values.sys_id = cmdbRecord.getUniqueValue();
// gs.info('Updated cmdb_ci_peripheral: ' + cmdbRecord.sys_id);
} else {
gs.warn('No cmdb_ci_peripheral record found with correlation ID: ' + values.please_select_asset_tag);
}
return JSON.stringify(values);
},
getExistingUSBSysID: function() {
var ritmSysId = this.getParameter('sys_id');
if (!ritmSysId) {
gs.error('RITM Sys ID is missing');
return JSON.stringify({
error: 'RITM Sys ID missing'
});
}
var ritm = new GlideRecord('sc_req_item');
if (!ritm.get(ritmSysId)) {
gs.error('Invalid RITM Sys ID: ' + ritmSysId);
return JSON.stringify({
error: 'Invalid RITM'
});
}
var assetTag = ritm.variables.please_select_asset_tag.getDisplayValue() + '';
var cmdbRecord = new GlideRecord('cmdb_ci_peripheral');
cmdbRecord.addQuery('asset_tag', assetTag);
cmdbRecord.query();
if (cmdbRecord.next()) {
return JSON.stringify({
sys_id: cmdbRecord.getUniqueValue()
});
} else {
return JSON.stringify({
error: 'No matching record found for asset_tag: ' + assetTag
});
}
},
getPeripheralName: function() {
var sysId = this.getParameter('sysparm_sys_id');
if (!sysId) return '';
var gr = new GlideRecord('cmdb_ci_peripheral');
if (gr.get(sysId)) {
return gr.getDisplayValue(); // or gr.getValue('name') if you want the raw name
}
return '';
},
type: 'GetRITMDetailsOnSubmitCatalogTask'
});
Catalog client script:
Name: Fetch Barcode Image
Type: On Change
Script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('GetRITMDetailsOnSubmitCatalogTask');
ga.addParam('sysparm_name', 'getPeripheralName');
ga.addParam('sysparm_sys_id', newValue); // sys_id from the reference field
ga.getXMLAnswer(function(response) {
var name = response;
if (name) {
var gr = new GlideRecord('cmdb_ci_peripheral');
gr.addQuery('asset_tag', name);
gr.query(function(gr) { // Asynchronous callback function
if (gr.next()) {
var barcodeBase64 = gr.getValue('u_barcode');
// alert('barcodeBase64: ' + barcodeBase64);
if (barcodeBase64) {
// var barcodeImg = '<img src="' + barcodeBase64 + '" width="380" height="100" id="barcodeImage"/>';
var barcodeImg = '<img src="' + barcodeBase64 + '" id="barcodeImage"/>';
g_form.setValue('barcode_image', barcodeImg);
g_form.setVisible('barcode_image', true);
} else {
g_form.setValue('barcode_image', '<span style="color:red; font-size: 16px;">No barcode data available.</span>');
g_form.setVisible('barcode_image', true);
}
} else {
g_form.setValue('barcode_image', '<span style="color:red; font-size: 16px;">No barcode data available.</span>');
g_form.setVisible('barcode_image', true);
}
});
}
});
}
--------
Non Admins view:

Admin view:
