Optimize businessrule for business application for incident
						
					
					
				
			
		
	
			
	
	
	
	
	
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-29-2024 10:29 PM
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();
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-29-2024 11:26 PM
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
