Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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