I want to get the ritm varaibles and then from the varaibles i need to get the referenced varaibles
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-06-2025 01:10 AM
Script include:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-06-2025 01:54 AM
update as this, ensure to pass RITM numbers in header as comma separated values like below
ritm: RITM0001234,RITM0001256,RITM0001278
Scripted REST API
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var ritmNumbers = request.getHeader('ritm');
var responseObj = {};
if (!ritmNumbers) {
response.setStatus(417);
return {
error: "Missing 'ritm' header. Please supply comma-separated RITM numbers."
};
}
// Using your Script Include for splitting, or just simple split+trim here
var ritmNumArray = ritmNumbers.split(',').map(function(item) {
return item.trim();
});
// Create GlideRecord outside loop
var ritmGR = new GlideRecord('sc_req_item');
// Loop through each RITM number
ritmNumArray.forEach(function(ritmNumber) {
// Always initialize/reset before get() to avoid data carry-over
ritmGR.initialize();
if (!ritmGR.get('number', ritmNumber)) {
response.setStatus(417);
response.setHeader(ritmNumber, 'Unable to find RITM: ' + ritmNumber);
return; // skip to next RITM
}
var resultObj = {
number: ritmNumber
};
var variables = ritmGR.variables;
var catItemSysId = ritmGR.getValue('cat_item');
// Iterate over all variables on the RITM
for (var varName in variables) {
try {
var varValue = variables[varName];
if (!varValue || !varValue.getValue()) continue; // skip empty/null
var displayValue = varValue.getDisplayValue();
var internalValue = varValue.getValue();
if (!internalValue) continue;
// Determine if variable is a reference type and get referenced table
var itemVarGR = new GlideRecord('item_option_new');
itemVarGR.addQuery('name', varName);
itemVarGR.addQuery('cat_item', catItemSysId);
itemVarGR.query();
var isReference = false;
var refTable = "";
if (itemVarGR.next()) {
var type = itemVarGR.getValue('type');
refTable = itemVarGR.getValue('reference');
isReference = (type === 'reference');
}
if (isReference && refTable && internalValue) {
// Fetch referenced record fields
var refGR = new GlideRecord(refTable);
if (refGR.get(internalValue)) {
var refFields = {};
var fields = refGR.getFields();
var iterator = fields.iterator();
while (iterator.hasNext()) {
var field = iterator.next().getName();
if (field !== 'sys_id') {
refFields[field] = refGR.getDisplayValue(field);
}
}
resultObj[varName] = refFields;
} else {
// Reference record not found, fallback to display value
resultObj[varName] = displayValue;
}
} else {
// Not a reference type, just assign the display value
resultObj[varName] = displayValue;
}
} catch (e) {
gs.error('Error processing variable [' + varName + '] in ' + ritmNumber + ': ' + e.message);
}
}
responseObj[ritmNumber] = resultObj;
});
return {
result: responseObj
};
})(request, response);
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
2 weeks ago
Hope you are doing good.
Did my reply answer your question?
💡 If my response helped, please mark it as correct ✅ and close the thread 🔒— this helps future readers find the solution faster! 🙏
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-07-2025 03:34 AM
Iam getting the variables but not the referenced record fields.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-07-2025 03:36 AM
For multiple RTM case.
