Skip to content

Commit 1f4b319

Browse files
authored
Auto Add Tag to VTB - Pull Request 2 (#2338)
* Add README for Auto Tag VTB Business Rule This snippet allows users to create a business rule for updating VTB record tags based on their state or priority, with an example using Agile Story records. * Add auto-tagging logic for VTB based on record states
1 parent b1b1b19 commit 1f4b319

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
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.
2+
This extends on a ServiceNow functionality: https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB1117228
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
(function executeRule(current, previous /*null when async*/) {
2+
3+
// Retrieve the SysIDs from system properties - holding in system properties to overcome not hardcoding the SysID
4+
var highPriorityLabelSysId = gs.getProperty('label.high_priority');
5+
var blockedLabelSysId = gs.getProperty('label.blocked');
6+
var readyForQALabelSysId = gs.getProperty('label.ready_for_qa');
7+
var qaCompletedLabelSysId = gs.getProperty('label.qa_completed');
8+
var readyForDeploymentLabelSysId = gs.getProperty('label.ready_for_deployment');
9+
10+
// Query the 'vtb_card' table for related task records
11+
var gr = new GlideRecord('vtb_card');
12+
gr.addQuery('task', current.sys_id);
13+
gr.query();
14+
15+
// Loop through all matching vtb_card records
16+
while (gr.next()) {
17+
18+
// Handle High Priority label
19+
var highPriorityTag = new GlideRecord('label_entry');
20+
highPriorityTag.addQuery('table', 'vtb_card');
21+
highPriorityTag.addQuery('table_key', gr.sys_id);
22+
highPriorityTag.addQuery('label', highPriorityLabelSysId);
23+
highPriorityTag.query();
24+
if (current.priority == 1 && !highPriorityTag.next()) { // Add label if not already present
25+
highPriorityTag = new GlideRecord('label_entry');
26+
highPriorityTag.label = highPriorityLabelSysId; // High Priority Label SysID
27+
highPriorityTag.table = 'vtb_card';
28+
highPriorityTag.read = 'yes';
29+
highPriorityTag.title = "High Priority Tag for " + gr.task.number;
30+
highPriorityTag.table_key = gr.sys_id;
31+
highPriorityTag.insert();
32+
} else if (current.priority != 1 && highPriorityTag.next()) { // Remove label if priority is not high
33+
highPriorityTag.deleteRecord();
34+
}
35+
36+
// Handle Blocked label
37+
var blockedTag = new GlideRecord('label_entry');
38+
blockedTag.addQuery('table', 'vtb_card');
39+
blockedTag.addQuery('table_key', gr.sys_id);
40+
blockedTag.addQuery('label', blockedLabelSysId);
41+
blockedTag.query();
42+
if (current.blocked == true && !blockedTag.next()) { // Add label if not already present
43+
blockedTag = new GlideRecord('label_entry');
44+
blockedTag.label = blockedLabelSysId; // Blocked Label SysID
45+
blockedTag.table = 'vtb_card';
46+
blockedTag.read = 'yes';
47+
blockedTag.title = "Blocked Tag for " + gr.task.number;
48+
blockedTag.table_key = gr.sys_id;
49+
blockedTag.insert();
50+
} else if (current.blocked == false && blockedTag.next()) { // Remove label if blocked is false
51+
blockedTag.deleteRecord();
52+
}
53+
54+
// Handle Ready for QA label
55+
var readyForQATag = new GlideRecord('label_entry');
56+
readyForQATag.addQuery('table', 'vtb_card');
57+
readyForQATag.addQuery('table_key', gr.sys_id);
58+
readyForQATag.addQuery('label', readyForQALabelSysId);
59+
readyForQATag.query();
60+
if (current.u_implementation_stage == 'QA Required' && !readyForQATag.next()) { // Add label if not already present
61+
readyForQATag = new GlideRecord('label_entry');
62+
readyForQATag.label = readyForQALabelSysId; // Ready for QA Label SysID
63+
readyForQATag.table = 'vtb_card';
64+
readyForQATag.read = 'yes';
65+
readyForQATag.title = "Ready for QA Tag for " + gr.task.number;
66+
readyForQATag.table_key = gr.sys_id;
67+
readyForQATag.insert();
68+
} else if (current.u_implementation_stage != 'QA Required' && readyForQATag.next()) { // Remove label if stage is no longer QA Required
69+
readyForQATag.deleteRecord();
70+
}
71+
72+
// Handle QA Completed label
73+
var qaCompletedTag = new GlideRecord('label_entry');
74+
qaCompletedTag.addQuery('table', 'vtb_card');
75+
qaCompletedTag.addQuery('table_key', gr.sys_id);
76+
qaCompletedTag.addQuery('label', qaCompletedLabelSysId);
77+
qaCompletedTag.query();
78+
if (current.u_implementation_stage == 'QA Completed' && !qaCompletedTag.next()) { // Add label if not already present
79+
qaCompletedTag = new GlideRecord('label_entry');
80+
qaCompletedTag.label = qaCompletedLabelSysId; // QA Completed Label SysID
81+
qaCompletedTag.table = 'vtb_card';
82+
qaCompletedTag.read = 'yes';
83+
qaCompletedTag.title = "QA Completed Tag for " + gr.task.number;
84+
qaCompletedTag.table_key = gr.sys_id;
85+
qaCompletedTag.insert();
86+
} else if (current.u_implementation_stage != 'QA Completed' && qaCompletedTag.next()) { // Remove label if stage is no longer QA Completed
87+
qaCompletedTag.deleteRecord();
88+
}
89+
90+
// Handle Ready for Deployment label
91+
var readyForDeploymentTag = new GlideRecord('label_entry');
92+
readyForDeploymentTag.addQuery('table', 'vtb_card');
93+
readyForDeploymentTag.addQuery('table_key', gr.sys_id);
94+
readyForDeploymentTag.addQuery('label', readyForDeploymentLabelSysId);
95+
readyForDeploymentTag.query();
96+
if (current.u_implementation_stage == 'Ready for Deployment' && !readyForDeploymentTag.next()) { // Add label if not already present
97+
readyForDeploymentTag = new GlideRecord('label_entry');
98+
readyForDeploymentTag.label = readyForDeploymentLabelSysId; // Ready for Deployment Label SysID
99+
readyForDeploymentTag.table = 'vtb_card';
100+
readyForDeploymentTag.read = 'yes';
101+
readyForDeploymentTag.title = "Ready for Deployment Tag for " + gr.task.number;
102+
readyForDeploymentTag.table_key = gr.sys_id;
103+
readyForDeploymentTag.insert();
104+
} else if (current.u_implementation_stage != 'Ready for Deployment' && readyForDeploymentTag.next()) { // Remove label if stage is no longer Ready for Deployment
105+
readyForDeploymentTag.deleteRecord();
106+
}
107+
108+
}
109+
110+
})(current, previous);

0 commit comments

Comments
 (0)