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