- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 04:49 AM
Hello community,
I have a request to auto populate an MRVS with a list of asset records based on the selected location.
Below is the script include and the catalog client script I'm having issues with:
Variables:
- name: a reference variable (alm_asset)
- serial_number: a single-line text
Script Include:
var MyAssetScriptInclude = Class.create();
MyAssetScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAssetsForLocation: function(locationID) {
var assets = [];
var grAsset = new GlideRecord('alm_asset');
grAsset.addQuery('location', locationID);
grAsset.query();
while (grAsset.next()) {
var asset = {
'name': grAsset.getDisplayValue.toString(),
'serial_number': grAsset.serial_number.toString(),
};
assets.push(asset);
}
return assets;
},
type: 'MyAssetScriptInclude'
});
And my onChange catalog client script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue === '') {
return;
}
var ga = new GlideAjax('MyAssetScriptInclude');
ga.addParam('sysparm_name', 'getAssetsForLocation');
ga.addParam('sysparm_location_id', newValue);
ga.getXMLAnswer(populateMRVS);
}
function populateMRVS(response) {
var answer = response;
var mrvs = g_form.getControl('mdf_set');
try {
var assets = JSON.parse(answer);
// Clear existing rows
g_form.clearOptions('mdf_set');
// Populate MRVS with assets
for (var i = 0; i < assets.length; i++) {
var asset = assets[i];
g_form.addRow('mdf_set');
g_form.setValue('mdf_set', 'name', asset.name, i);
g_form.setValue('mdf_set', 'serial_number', asset.serial_number, i);
}
} catch (e) {
// Handle error
console.error('Error populating MRVS:', e);
}
}
I appreciate your assistance on this.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 05:40 AM
please make these changes
var MyAssetScriptInclude = Class.create();
MyAssetScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAssetsForLocation: function() {
var locationID = this.getParameter('sysparm_location_id');
var assets = [];
var grAsset = new GlideRecord('alm_asset');
grAsset.addQuery('location', locationID);
grAsset.query();
while (grAsset.next()) {
var asset = {
'name': grAsset.getUniqueValue(),
'serial_number': grAsset.serial_number.toString()
};
assets.push(asset);
}
return JSON.stringify(assets);
},
type: 'MyAssetScriptInclude'
});
Client script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue === '') {
return;
}
var loc = g_form.getValue('room');
if(oldValue != newValue){
var ga = new GlideAjax('MyAssetScriptInclude');
ga.addParam('sysparm_name', 'getAssetsForLocation');
ga.addParam('sysparm_location_id', loc);
ga.getXMLAnswer(populateMRVS);
}
}
function populateMRVS(response) {
try{
var answer = response;
g_form.setValue('mdf_set', answer);
} catch (e) {
// Handle error
console.error('Error populating MRVS:', e);
}
}
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 05:27 AM - edited 03-20-2024 05:27 AM
Thank you Brad. Based on your feedback, the updated SI and client script is below. I still can't get it to work.
//script include
var MyAssetScriptInclude = Class.create();
MyAssetScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAssetsForLocation: function() {
var locationID = this.getParameter('sysparm_location_id');
var assets = [];
var grAsset = new GlideRecord('alm_asset');
grAsset.addQuery('location', locationID);
grAsset.query();
while (grAsset.next()) {
var asset = {
'name': grAsset.display_value.toString(),
'serial_number': grAsset.serial_number.toString()
};
assets.push(asset);
}
return assets;
},
type: 'MyAssetScriptInclude'
});
//client script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue === '') {
return;
}
var loc = g_form.getValue('room');
var ga = new GlideAjax('MyAssetScriptInclude');
ga.addParam('sysparm_name', 'getAssetsForLocation');
ga.addParam('sysparm_location_id', loc);
ga.getXMLAnswer(populateMRVS);
}
function populateMRVS(response) {
var answer = response;
var mrvs = g_form.getControl('mdf_set');
try {
var assets = JSON.parse(answer);
// Clear existing rows
g_form.clearValue('mdf_set');
// Populate MRVS with assets
for (var i = 0; i < assets.length; i++) {
var asset = assets[i];
g_form.addRow('mdf_set');
g_form.setValue('mdf_set', 'name', asset.name, i);
g_form.setValue('mdf_set', 'serial_number', asset.serial_number, i);
}
} catch (e) {
// Handle error
console.error('Error populating MRVS:', e);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 05:40 AM
please make these changes
var MyAssetScriptInclude = Class.create();
MyAssetScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAssetsForLocation: function() {
var locationID = this.getParameter('sysparm_location_id');
var assets = [];
var grAsset = new GlideRecord('alm_asset');
grAsset.addQuery('location', locationID);
grAsset.query();
while (grAsset.next()) {
var asset = {
'name': grAsset.getUniqueValue(),
'serial_number': grAsset.serial_number.toString()
};
assets.push(asset);
}
return JSON.stringify(assets);
},
type: 'MyAssetScriptInclude'
});
Client script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue === '') {
return;
}
var loc = g_form.getValue('room');
if(oldValue != newValue){
var ga = new GlideAjax('MyAssetScriptInclude');
ga.addParam('sysparm_name', 'getAssetsForLocation');
ga.addParam('sysparm_location_id', loc);
ga.getXMLAnswer(populateMRVS);
}
}
function populateMRVS(response) {
try{
var answer = response;
g_form.setValue('mdf_set', answer);
} catch (e) {
// Handle error
console.error('Error populating MRVS:', e);
}
}
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 05:51 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 06:11 AM
did you check if script include is getting called?
did you check what came in alert for that json?
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-21-2024 02:54 PM - edited 03-21-2024 02:59 PM
It worked. Thank you
I do have one more question, @Ankur Bawiskar , I'm calling the MRVS in a record producer here:
var multiModelVar = JSON.parse(producer.mdf_sets);
if (multiModelVar.length > 0) {
for (var i = 0; i < multiModelVar.length; i++) {
var ast = new GlideRecord('alm_asset');
ast.addQuery('serial_number', multiModelVar[i].serial_number);
ast.query();
while (ast.next()) {
ast.install_status = 1;
ast.comments = "TESTING THIS RECORD PRODUCER";
ast.update();
}
}
}
Is there any reason why my record producer script isn't responding?
