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.

Slow performance Business Rule

Leonel Sandroni
Tera Guru

Hi there!

 

I've created a BR in order to update a value from demand tablo to an enhancement table. It's a simple query and no much more...

but for some reason it runs very slow

 

the business rule is an 'after' type with a particular field change and it should modify a field in another table with the same value so:

LeonelSandroni_0-1737639216811.png

(function executeRule(current, previous /*null when async*/) {

	// it finds the related enhancement records
        var udd = new GlideRecord('rm_enhancement');
        udd.addQuery('enhancement', current.sys_id); 
        udd.query();

        // set the due date with the same value
        while (udd.next()) {
            udd.u_due_date = current.requested_by; 
            udd.update();
        }


})(current, previous);

 

I tested this BR in PDI and it works fast. 

I used the field 'enhancement' because it is the reference field from demand table to enhancement table and because I couldn't find a reference demand field from the enhancement table.

 

any suggestion?

1 ACCEPTED SOLUTION

Keep the if condition and update the below query condition 

udd.addQuery('sys_id', current.enhancement);
 
let me know if still not working. 


Thanks,
Rajashekhar Mushke
Rising star : 2022 - 2024
Community Leader -2018
Connect me on LinkedIn : Rajashekhar Mushke

View solution in original post

10 REPLIES 10

I would add a filter condition under "when to run" so your conditions are like Due date(requested by) changes AND Enhancement is not empty then update your script to something like this:

(function executeRule(current, previous /*null when async*/ ) {
    // Get the referenced record from the enhancement field
    var enhancementRecord = current.enhancement.getRefRecord();

    // Check if the referenced record exists
    if (enhancementRecord.isValidRecord()) {
        // Update fields on the referenced record
        enhancementRecord.due_date = current.requested_by;
        enhancementRecord.update();
    } else {
        gs.error('Referenced enhancement record not found for sys_id: ' + current.enhancement);
    }
})(current, previous);

 

Also, it's been a while since I looked at these but I think due_date.rm_enhancement is a Date/Time field while requested_by.dmn_demand is a Date field...so you may need to account for the type mismatch (all Date/Time values in ServiceNow are stored in UTC internally).