diff --git a/Server-Side Components/Update CI Status on Change Request Closure/README.md b/Server-Side Components/Update CI Status on Change Request Closure/README.md new file mode 100644 index 0000000000..4db0d5acdc --- /dev/null +++ b/Server-Side Components/Update CI Status on Change Request Closure/README.md @@ -0,0 +1,7 @@ +Update CI Status on Change Request Closure + +1. Write a Business Rule - After Update +2. Select Change Request Table and Execute Condition as When Change State = Closed +3. Run only when Change Request is moving to closed +4. Query all CI relationships for this Change Request +5. Update all the Related CIs (cmdb_ci) linked through the task_ci table. diff --git a/Server-Side Components/Update CI Status on Change Request Closure/Script.js b/Server-Side Components/Update CI Status on Change Request Closure/Script.js new file mode 100644 index 0000000000..dbc25793c9 --- /dev/null +++ b/Server-Side Components/Update CI Status on Change Request Closure/Script.js @@ -0,0 +1,26 @@ +(function executeRule(current, previous) { + // Run only when Change is moving to Closed + if (previous.state != current.state && current.state == 'closed') { + + gs.info('Change ' + current.number + ' closed — updating related CI statuses.'); + + // Query all CI relationships for this Change + var ciRel = new GlideRecord('task_ci'); + ciRel.addQuery('task', current.sys_id); + ciRel.query(); + + while (ciRel.next()) { + if (ciRel.ci_item) { + var ci = new GlideRecord('cmdb_ci'); + if (ci.get(ciRel.ci_item)) { + + // Example: Update CI status + ci.install_status = 1; // 1 = In Service (Active) + ci.update(); + + gs.info('CI ' + ci.name + ' status updated to In Service for Change ' + current.number); + } + } + } + } +})(current, previous);