Unable to update field using After Insert Business Rule

Vijay Kumar4
Mega Guru
(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);

VijayKumar4_0-1742797462386.png

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:

 gs.addInfoMessage('Request ID: ' + requestId);
But "
gs.addInfoMessage('req.query(): ' + req.query());" in this log Iam getting undefined and it does not going to 
while (req.next())


Could you please provide a solution?




1 ACCEPTED SOLUTION

@Vijay Kumar4 

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.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

5 REPLIES 5

Thanks, Its working now