From b0a525bd6070be74ca921758f431c4572885384e Mon Sep 17 00:00:00 2001 From: hanna-g-sn Date: Mon, 20 Oct 2025 13:46:29 +0100 Subject: [PATCH 1/4] Add README for onChange Clear Values script --- .../README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/README.md diff --git a/Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/README.md b/Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/README.md new file mode 100644 index 0000000000..c087dfbeee --- /dev/null +++ b/Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/README.md @@ -0,0 +1 @@ +The purpose of this script is to help clear values on change of value in a Multi Row Variable Set. From b33b5983cf65fa0155ea25d16aceaa3944147658 Mon Sep 17 00:00:00 2001 From: hanna-g-sn Date: Mon, 20 Oct 2025 13:48:20 +0100 Subject: [PATCH 2/4] Add onChange function to clear MRVS values --- .../client_script.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/client_script.js diff --git a/Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/client_script.js b/Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/client_script.js new file mode 100644 index 0000000000..db3df1faef --- /dev/null +++ b/Client-Side Components/Client Scripts/onChange Clear Values - Multi Row Variable Sets - MRVS/client_script.js @@ -0,0 +1,6 @@ +function onChange(control, oldValue, newValue, isLoading) { + if (isLoading || newValue == '') { + return; + } + g_form.clearValue('IO:0dde0d561b803d101ea411f2b24bcbc2'); //pass in the sys_id of your MRVS/multi row variable set +} From d30f45af51d50d237bed7fb5a202ea7d503d7f24 Mon Sep 17 00:00:00 2001 From: hanna-g-sn Date: Mon, 20 Oct 2025 14:05:37 +0100 Subject: [PATCH 3/4] Implement auto-tagging for VTB cards based on states This script automatically tags VTB cards based on their record states, including priority, blocked status, QA stages, and deployment readiness. It retrieves SysIDs from system properties and updates label entries accordingly. --- .../code_snippet.js | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/code_snippet.js diff --git a/Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/code_snippet.js b/Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/code_snippet.js new file mode 100644 index 0000000000..1f410188de --- /dev/null +++ b/Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/code_snippet.js @@ -0,0 +1,110 @@ +(function executeRule(current, previous /*null when async*/) { + + // Retrieve the SysIDs from system properties - holding in system properties to overcome not hardcoding the SysID + var highPriorityLabelSysId = gs.getProperty('label.high_priority'); + var blockedLabelSysId = gs.getProperty('label.blocked'); + var readyForQALabelSysId = gs.getProperty('label.ready_for_qa'); + var qaCompletedLabelSysId = gs.getProperty('label.qa_completed'); + var readyForDeploymentLabelSysId = gs.getProperty('label.ready_for_deployment'); + + // Query the 'vtb_card' table for related task records + var gr = new GlideRecord('vtb_card'); + gr.addQuery('task', current.sys_id); + gr.query(); + + // Loop through all matching vtb_card records + while (gr.next()) { + + // Handle High Priority label + var highPriorityTag = new GlideRecord('label_entry'); + highPriorityTag.addQuery('table', 'vtb_card'); + highPriorityTag.addQuery('table_key', gr.sys_id); + highPriorityTag.addQuery('label', highPriorityLabelSysId); + highPriorityTag.query(); + if (current.priority == 1 && !highPriorityTag.next()) { // Add label if not already present + highPriorityTag = new GlideRecord('label_entry'); + highPriorityTag.label = highPriorityLabelSysId; // High Priority Label SysID + highPriorityTag.table = 'vtb_card'; + highPriorityTag.read = 'yes'; + highPriorityTag.title = "High Priority Tag for " + gr.task.number; + highPriorityTag.table_key = gr.sys_id; + highPriorityTag.insert(); + } else if (current.priority != 1 && highPriorityTag.next()) { // Remove label if priority is not high + highPriorityTag.deleteRecord(); + } + + // Handle Blocked label + var blockedTag = new GlideRecord('label_entry'); + blockedTag.addQuery('table', 'vtb_card'); + blockedTag.addQuery('table_key', gr.sys_id); + blockedTag.addQuery('label', blockedLabelSysId); + blockedTag.query(); + if (current.blocked == true && !blockedTag.next()) { // Add label if not already present + blockedTag = new GlideRecord('label_entry'); + blockedTag.label = blockedLabelSysId; // Blocked Label SysID + blockedTag.table = 'vtb_card'; + blockedTag.read = 'yes'; + blockedTag.title = "Blocked Tag for " + gr.task.number; + blockedTag.table_key = gr.sys_id; + blockedTag.insert(); + } else if (current.blocked == false && blockedTag.next()) { // Remove label if blocked is false + blockedTag.deleteRecord(); + } + + // Handle Ready for QA label + var readyForQATag = new GlideRecord('label_entry'); + readyForQATag.addQuery('table', 'vtb_card'); + readyForQATag.addQuery('table_key', gr.sys_id); + readyForQATag.addQuery('label', readyForQALabelSysId); + readyForQATag.query(); + if (current.u_implementation_stage == 'QA Required' && !readyForQATag.next()) { // Add label if not already present + readyForQATag = new GlideRecord('label_entry'); + readyForQATag.label = readyForQALabelSysId; // Ready for QA Label SysID + readyForQATag.table = 'vtb_card'; + readyForQATag.read = 'yes'; + readyForQATag.title = "Ready for QA Tag for " + gr.task.number; + readyForQATag.table_key = gr.sys_id; + readyForQATag.insert(); + } else if (current.u_implementation_stage != 'QA Required' && readyForQATag.next()) { // Remove label if stage is no longer QA Required + readyForQATag.deleteRecord(); + } + + // Handle QA Completed label + var qaCompletedTag = new GlideRecord('label_entry'); + qaCompletedTag.addQuery('table', 'vtb_card'); + qaCompletedTag.addQuery('table_key', gr.sys_id); + qaCompletedTag.addQuery('label', qaCompletedLabelSysId); + qaCompletedTag.query(); + if (current.u_implementation_stage == 'QA Completed' && !qaCompletedTag.next()) { // Add label if not already present + qaCompletedTag = new GlideRecord('label_entry'); + qaCompletedTag.label = qaCompletedLabelSysId; // QA Completed Label SysID + qaCompletedTag.table = 'vtb_card'; + qaCompletedTag.read = 'yes'; + qaCompletedTag.title = "QA Completed Tag for " + gr.task.number; + qaCompletedTag.table_key = gr.sys_id; + qaCompletedTag.insert(); + } else if (current.u_implementation_stage != 'QA Completed' && qaCompletedTag.next()) { // Remove label if stage is no longer QA Completed + qaCompletedTag.deleteRecord(); + } + + // Handle Ready for Deployment label + var readyForDeploymentTag = new GlideRecord('label_entry'); + readyForDeploymentTag.addQuery('table', 'vtb_card'); + readyForDeploymentTag.addQuery('table_key', gr.sys_id); + readyForDeploymentTag.addQuery('label', readyForDeploymentLabelSysId); + readyForDeploymentTag.query(); + if (current.u_implementation_stage == 'Ready for Deployment' && !readyForDeploymentTag.next()) { // Add label if not already present + readyForDeploymentTag = new GlideRecord('label_entry'); + readyForDeploymentTag.label = readyForDeploymentLabelSysId; // Ready for Deployment Label SysID + readyForDeploymentTag.table = 'vtb_card'; + readyForDeploymentTag.read = 'yes'; + readyForDeploymentTag.title = "Ready for Deployment Tag for " + gr.task.number; + readyForDeploymentTag.table_key = gr.sys_id; + readyForDeploymentTag.insert(); + } else if (current.u_implementation_stage != 'Ready for Deployment' && readyForDeploymentTag.next()) { // Remove label if stage is no longer Ready for Deployment + readyForDeploymentTag.deleteRecord(); + } + + } + +})(current, previous); From 7e3302d03b0bb55901e58f2b4ec573d241655545 Mon Sep 17 00:00:00 2001 From: hanna-g-sn Date: Mon, 20 Oct 2025 14:06:09 +0100 Subject: [PATCH 4/4] Add README for Auto Tag VTB Card business rule This code snippet allows users to create a business rule to update the tag/label on a vtb record based on the state/priority of the record. The example included uses Agile Story records as the example. This extends on a ServiceNow functionality. --- .../Auto Tag VTB Card Based on Record States/README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/README.md diff --git a/Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/README.md b/Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/README.md new file mode 100644 index 0000000000..0779877ccf --- /dev/null +++ b/Server-Side Components/Business Rules/Auto Tag VTB Card Based on Record States/README.md @@ -0,0 +1,2 @@ +This code snippet allows users to create a business rule to update the tag/label on a vtb record based on the state/priority of the record. The example included uses Agile Story records as the example. +This extends on a ServiceNow functionality: https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB1117228