From f057899bb2776dcb907c70ac46bb4b2ef2415f85 Mon Sep 17 00:00:00 2001 From: Soumyadeep Dutta <78016846+Soumyadeep10@users.noreply.github.com> Date: Sat, 11 Oct 2025 09:38:27 +0530 Subject: [PATCH 1/4] Create README.md --- .../README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md diff --git a/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md new file mode 100644 index 0000000000..6045354308 --- /dev/null +++ b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md @@ -0,0 +1,14 @@ +This Before Update business rule acts as a safeguard in a Change management process, +ensuring that critical changes(those marked as high impact or high risk) +are properly documented before progressing to key implementation stages. + +**What It Does**: +-The BR triggers before a change request record is updated, specifically when the state changes to either Scheduled or Implement. + +-It checks whether the change is classified as high impact or high risk. + +-If the change meets either of those criteria, it verifies that at least two attachments are present on the record. + These attachments are expected to be essential supporting documents like an Implementation Plan or Backout Procedure. + +-If the required documentation is missing, the rule blocks the state change and displays an error message to the user, + preventing the change from moving forward until compliance is met. From 118c3e39bdb495186a0afca72d8aec004bf12e3c Mon Sep 17 00:00:00 2001 From: Soumyadeep Dutta <78016846+Soumyadeep10@users.noreply.github.com> Date: Sat, 11 Oct 2025 09:40:25 +0530 Subject: [PATCH 2/4] Create attachmentcheckonhighriskimpactChange.js --- .../attachmentcheckonhighriskimpactChange.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js diff --git a/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js new file mode 100644 index 0000000000..a4b78d38e5 --- /dev/null +++ b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js @@ -0,0 +1,23 @@ +(function executeRule(current, previous /*null when async*/ ) { + + var minAttachments = 2; + + var isHighImpact = current.impact == '1'; + var isHighRisk = current.risk == '2'; + + if (isHighImpact || isHighRisk) { + + var attachment = new GlideRecord('sys_attachment'); + attachment.addQuery('table_sys_id', current.sys_id); + attachment.query(); + + var attachmentCount = attachment.getRowCount(); + + if (attachmentCount < minAttachments) { + + gs.addErrorMessage('State Change aborted: High-Impact/High-Risk Changes require at least ' + minAttachments + ' supporting documents (eg: Implementation Plan, Backout Procedure)' + 'attached before moving to the Scheduled/Implementation phase.'); + current.setAbortAction(true); + } + } + +})(current, previous); From a2f6d91f541ff883d587ec1b260947880984103e Mon Sep 17 00:00:00 2001 From: Soumyadeep Dutta <78016846+Soumyadeep10@users.noreply.github.com> Date: Sat, 11 Oct 2025 14:31:58 +0530 Subject: [PATCH 3/4] Update README.md --- .../README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md index 6045354308..f610ccd228 100644 --- a/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md +++ b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/README.md @@ -2,6 +2,10 @@ This Before Update business rule acts as a safeguard in a Change management proc ensuring that critical changes(those marked as high impact or high risk) are properly documented before progressing to key implementation stages. +**BR Type**: 'Before', 'Update' +**Table**: Change Request (change_request) +**Condition**: 'State' 'changes to' 'Scheduled' OR 'State' 'changes to' 'Implement' + **What It Does**: -The BR triggers before a change request record is updated, specifically when the state changes to either Scheduled or Implement. From 4459df229fd2a40a7bbbc60997e643d08d43b563 Mon Sep 17 00:00:00 2001 From: Soumyadeep Dutta <78016846+Soumyadeep10@users.noreply.github.com> Date: Sat, 11 Oct 2025 14:33:03 +0530 Subject: [PATCH 4/4] Update attachmentcheckonhighriskimpactChange.js --- .../attachmentcheckonhighriskimpactChange.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js index a4b78d38e5..83f8b04cdf 100644 --- a/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js +++ b/Server-Side Components/Business Rules/Attachments check High-Risk or High-Impact Change request/attachmentcheckonhighriskimpactChange.js @@ -7,11 +7,14 @@ if (isHighImpact || isHighRisk) { - var attachment = new GlideRecord('sys_attachment'); + var attachmentCount = 0; + var attachment = new GlideAggregate('sys_attachment'); attachment.addQuery('table_sys_id', current.sys_id); + attachment.addAggregate('COUNT'); attachment.query(); - - var attachmentCount = attachment.getRowCount(); + if (attachment.next()) { + attachmentCount = attachment.getAggregate('COUNT'); + } if (attachmentCount < minAttachments) {