- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-23-2025 11:28 PM - edited 03-23-2025 11:29 PM
(function executeRule(current, previous /*null when async*/ ) {
var cardOrderSysId = '00078ubc95uc10sf7bd4bcbed';
gs.addInfoMessage('Catalog Item: ' + current.cat_item.toString());
if (current.cat_item.toString() !== cardOrderSysId) {
return;
}
var tinNumber = current.variables.u_tin;
var memberNumber = current.variables.u_member_number;
if (!tinNumber && !memberNumber) {
return;
}
var existingReqItem = new GlideRecord('sc_req_item');
existingReqItem.addQuery('cat_item', cardOrderSysId);
existingReqItem.addQuery('sys_id', '!=', current.sys_id);
if (tinNumber) {
existingReqItem.addQuery('u_tin', tinNumber);
}
if (memberNumber) {
existingReqItem.addQuery('u_member_number', memberNumber);
}
existingReqItem.query();
if (existingReqItem.next()) {
gs.addInfoMessage('Duplicate Request Found: ' + existingReqItem.request.number);
var requestId = current.getValue('request');
gs.addInfoMessage('Request ID: ' + requestId);
var req = new GlideRecord('sc_request');
req.addQuery('sys_id', requestId);
req.query();
gs.addInfoMessage('req.query(): ' + req.query());
while (req.next())
{
gs.addInfoMessage('Request Record Found: ' + req.number);
req.u_isduplicate = true;
req.u_reference_ticket_number = existingReqItem.request.number;
req.special_instructions = 'Duplicate detected';
req.update();
}
}
})(current, previous);
Above is my After Insert Business Rule, designed to update a checkbox and a text field. The script checks if a new request contains a Member Number or TIN that already exists in a previous request. If a match is found, the existing request number is fetched, updated in the new request, and a flag is set. I have added logs to debug the issue, and the values and sys_ids are retrieved correctly, but the fields are not updating. I have also tried the before insert.
Iam getting the currect sysid in:
But "gs.addInfoMessage('req.query(): ' + req.query());" in this log Iam getting undefined and it does not going to
Could you please provide a solution?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-24-2025 01:26 AM
so it means it's not able to query sc_Request table with that sysId
Did you check that sysId is correct REQ sysId?
Any query business rule on sc_request is blocking?
Why are you querying sc_request? you can simply get the GlideRecord object using this line
var req = current.request.getRefRecord();
update as this and check
(function executeRule(current, previous /*null when async*/ ) {
var cardOrderSysId = '00078ubc95uc10sf7bd4bcbed';
gs.addInfoMessage('Catalog Item: ' + current.cat_item.toString());
if (current.cat_item.toString() !== cardOrderSysId) {
return;
}
var tinNumber = current.variables.u_tin;
var memberNumber = current.variables.u_member_number;
if (!tinNumber && !memberNumber) {
return;
}
var existingReqItem = new GlideRecord('sc_req_item');
existingReqItem.addQuery('cat_item', cardOrderSysId);
existingReqItem.addQuery('sys_id', '!=', current.sys_id);
if (tinNumber) {
existingReqItem.addQuery('u_tin', tinNumber);
}
if (memberNumber) {
existingReqItem.addQuery('u_member_number', memberNumber);
}
existingReqItem.query();
if (existingReqItem.next()) {
gs.addInfoMessage('Duplicate Request Found: ' + existingReqItem.request.number);
var requestId = current.getValue('request');
gs.addInfoMessage('Request ID: ' + requestId);
var req = current.request.getRefRecord();
gs.addInfoMessage('Request Record Found: ' + req.number);
req.u_isduplicate = true;
req.u_reference_ticket_number = existingReqItem.request.number;
req.special_instructions = 'Duplicate detected';
req.update();
} else {
gs.addInfoMessage('No matching request record found.');
}
}
})(current, previous);
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-23-2025 11:32 PM - edited 03-23-2025 11:34 PM
Try below updated script:
(function executeRule(current, previous /*null when async*/) {
var cardOrderSysId = '00078ubc95uc10sf7bd4bcbed';
// Log the catalog item to verify
gs.addInfoMessage('Catalog Item: ' + current.cat_item.toString());
// If the catalog item does not match the cardOrderSysId, exit the rule
if (current.cat_item.toString() !== cardOrderSysId) {
return;
}
var tinNumber = current.variables.u_tin;
var memberNumber = current.variables.u_member_number;
// If neither TIN nor Member Number is present, exit the rule
if (!tinNumber && !memberNumber) {
return;
}
// Query the sc_req_item table to find existing items with the same catalog item, TIN, or Member Number
var existingReqItem = new GlideRecord('sc_req_item');
existingReqItem.addQuery('cat_item', cardOrderSysId);
existingReqItem.addQuery('sys_id', '!=', current.sys_id); // Avoid matching the current request item
if (tinNumber) {
existingReqItem.addQuery('u_tin', tinNumber);
}
if (memberNumber) {
existingReqItem.addQuery('u_member_number', memberNumber);
}
existingReqItem.query();
// If an existing request item is found, process it
if (existingReqItem.next()) {
gs.addInfoMessage('Duplicate Request Found: ' + existingReqItem.request.number);
// Get the request ID from the current record
var requestId = current.getValue('request');
gs.addInfoMessage('Request ID: ' + requestId);
// Ensure the requestId is not empty or invalid
if (!requestId) {
gs.error('Request ID is empty or invalid.');
return;
}
// Query the sc_request table to find the request record based on sys_id
var req = new GlideRecord('sc_request');
req.addQuery('sys_id', requestId); // Make sure this matches the correct sys_id of the request
req.query();
// Check if a record is returned from the query
if (req.next()) {
gs.addInfoMessage('Request Record Found: ' + req.number);
// Update the request record with the duplicate information
req.u_isduplicate = true;
req.u_reference_ticket_number = existingReqItem.request.number;
req.special_instructions = 'Duplicate detected';
// Save the updated record
req.update();
gs.addInfoMessage('Request Record Updated: ' + req.number);
} else {
gs.addInfoMessage('No matching request found for sys_id: ' + requestId);
}
}
})(current, previous);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-23-2025 11:35 PM
try this and share what came in logs?
I assume field "u_member_number" on RITM table and variable "u_member_number" are of same type?
are you sure variable name "u_member_number" is correct? what's the type of variable? share screenshots
If it's not a variable then update this line, I haven't updated that in my below script.
(function executeRule(current, previous /*null when async*/) {
var cardOrderSysId = '00078ubc95uc10sf7bd4bcbed';
gs.addInfoMessage('Catalog Item: ' + current.cat_item.toString());
if (current.cat_item.toString() !== cardOrderSysId) {
return;
}
var tinNumber = current.variables.u_tin;
var memberNumber = current.variables.u_member_number;
if (!tinNumber && !memberNumber) {
return;
}
var existingReqItem = new GlideRecord('sc_req_item');
existingReqItem.addQuery('cat_item', cardOrderSysId);
existingReqItem.addQuery('sys_id', '!=', current.sys_id);
if (tinNumber) {
existingReqItem.addQuery('u_tin', tinNumber);
}
if (memberNumber) {
existingReqItem.addQuery('u_member_number', memberNumber);
}
existingReqItem.query();
if (existingReqItem.next()) {
gs.addInfoMessage('Duplicate Request Found: ' + existingReqItem.request.number);
var requestId = current.getValue('request');
gs.addInfoMessage('Request ID: ' + requestId);
var req = new GlideRecord('sc_request');
req.addQuery('sys_id', requestId);
req.query();
if (req.next()) {
gs.addInfoMessage('Request Record Found: ' + req.number);
req.u_isduplicate = true;
req.u_reference_ticket_number = existingReqItem.request.number;
req.special_instructions = 'Duplicate detected';
req.update();
} else {
gs.addInfoMessage('No matching request record found.');
}
}
})(current, previous);
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-24-2025 12:00 AM - edited 03-24-2025 01:03 AM
Please check the log values.
u_member_number and u_tin tin are in RITM table and that those are encrypted fields:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-24-2025 01:26 AM
so it means it's not able to query sc_Request table with that sysId
Did you check that sysId is correct REQ sysId?
Any query business rule on sc_request is blocking?
Why are you querying sc_request? you can simply get the GlideRecord object using this line
var req = current.request.getRefRecord();
update as this and check
(function executeRule(current, previous /*null when async*/ ) {
var cardOrderSysId = '00078ubc95uc10sf7bd4bcbed';
gs.addInfoMessage('Catalog Item: ' + current.cat_item.toString());
if (current.cat_item.toString() !== cardOrderSysId) {
return;
}
var tinNumber = current.variables.u_tin;
var memberNumber = current.variables.u_member_number;
if (!tinNumber && !memberNumber) {
return;
}
var existingReqItem = new GlideRecord('sc_req_item');
existingReqItem.addQuery('cat_item', cardOrderSysId);
existingReqItem.addQuery('sys_id', '!=', current.sys_id);
if (tinNumber) {
existingReqItem.addQuery('u_tin', tinNumber);
}
if (memberNumber) {
existingReqItem.addQuery('u_member_number', memberNumber);
}
existingReqItem.query();
if (existingReqItem.next()) {
gs.addInfoMessage('Duplicate Request Found: ' + existingReqItem.request.number);
var requestId = current.getValue('request');
gs.addInfoMessage('Request ID: ' + requestId);
var req = current.request.getRefRecord();
gs.addInfoMessage('Request Record Found: ' + req.number);
req.u_isduplicate = true;
req.u_reference_ticket_number = existingReqItem.request.number;
req.special_instructions = 'Duplicate detected';
req.update();
} else {
gs.addInfoMessage('No matching request record found.');
}
}
})(current, previous);
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