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.

Optimize businessrule for business application for incident

Swati k1
Tera Contributor

Hi All,

 

we have below businessrule when we create incident , Impacted CIs updated in related list , but there are huge calculation happen backend that is impacting servicenow slowness , kindly suggest  only populate the business application within the impacted services

 

if (!previous.cmdb_ci.nil())
removePreviousCI();

if (!current.cmdb_ci.nil()) {
addCurrentCI();
}

function removePreviousCI() {
// Delete Affected CI records for this task and previous CI
var rec = new GlideRecord('task_ci');
rec.addQuery('task', current.sys_id);
rec.addQuery('ci_item', previous.cmdb_ci);
rec.query();
while (rec.next())
rec.deleteRecord();
}

function addCurrentCI() {
//Create Affected CI record for this task and current CI
var rec = new GlideRecord('task_ci');
rec.addQuery('task', current.sys_id);
rec.addQuery('ci_item', current.cmdb_ci);
rec.query();
if (rec.next()) {
rec.u_hst_original_ci = true;
rec.update();
return;
}

rec.initialize();
rec.task = current.sys_id;
rec.ci_item = current.cmdb_ci;
rec.u_hst_original_ci = true;
rec.insert();
}

1 REPLY 1

Mark Manders
Mega Patron

Please validate before replacing your code:

if (!previous.cmdb_ci.nil()) {
    removeCI(previous.cmdb_ci);
}

if (!current.cmdb_ci.nil()) {
    addOrUpdateCI(current.cmdb_ci);
}

function removeCI(ci) {
    // Delete Affected CI records for this task and CI more efficiently
    var rec = new GlideRecord('task_ci');
    rec.addQuery('task', current.sys_id);
    rec.addQuery('ci_item', ci);
    rec.deleteMultiple(); // Use deleteMultiple() for efficiency
}

function addOrUpdateCI(ci) {
    //Create or update Affected CI record for this task and CI
    var rec = new GlideRecord('task_ci');
    rec.addQuery('task', current.sys_id);
    rec.addQuery('ci_item', ci);
    rec.query();
    
    if (!rec.next()) {
        rec.initialize();
        rec.task = current.sys_id;
        rec.ci_item = ci;
    }

    rec.u_hst_original_ci = true;
    rec.upsert(); // Use upsert() if available, otherwise decide to update or insert based on the query result
}

Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark