Skip to content

Commit e67004a

Browse files
ServiceNow code snippet
Scheduled job to auto-assign unassigned incidents
1 parent 0f69f5d commit e67004a

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
(function executeAutoAssignment() {
2+
// --- CONFIGURABLE SETTINGS ---
3+
var MINUTES_DELAY = 30; // Only assign incidents older than this many minutes
4+
5+
// --- COMPUTE TIME CUTOFF ---
6+
var cutoffTime = new GlideDateTime();
7+
cutoffTime.addMinutes(-MINUTES_DELAY); // incidents created before this time are eligible
8+
9+
// --- QUERY: Find eligible unassigned incidents ---
10+
var incGr = new GlideRecord('incident');
11+
incGr.addNullQuery('assigned_to'); // incident not yet assigned
12+
incGr.addNotNullQuery('assignment_group'); // has an assignment group
13+
incGr.addQuery('sys_created_on', '<=', cutoffTime); // created at least 30 minutes ago
14+
incGr.query();
15+
16+
var totalAssigned = 0;
17+
18+
// --- LOOP THROUGH EACH ELIGIBLE INCIDENT ---
19+
while (incGr.next()) {
20+
var groupSysId = incGr.assignment_group.toString();
21+
if (!groupSysId) {
22+
gs.info('[AutoAssign] Skipped ' + incGr.number + ': No assignment group defined.');
23+
continue;
24+
}
25+
26+
// --- FETCH ACTIVE USERS IN THAT ASSIGNMENT GROUP ---
27+
var members = getActiveGroupMembers(groupSysId);
28+
29+
if (members.length === 0) {
30+
gs.info('[AutoAssign] Skipped ' + incGr.number + ': No active users found in group ' + incGr.assignment_group.name);
31+
continue;
32+
}
33+
34+
// --- PICK A RANDOM USER ---
35+
var assignedUser = getRandomElement(members);
36+
37+
// --- ASSIGN AND UPDATE ---
38+
incGr.assigned_to = assignedUser;
39+
incGr.update();
40+
41+
gs.info('[AutoAssign] Incident ' + incGr.number + ' assigned to user: ' + assignedUser);
42+
totalAssigned++;
43+
}
44+
45+
gs.info('[AutoAssign] Total incidents auto-assigned: ' + totalAssigned);
46+
47+
// -------------------------------------------------------------------
48+
// --- HELPER FUNCTIONS ---
49+
// -------------------------------------------------------------------
50+
51+
/**
52+
* Fetches all active users in a given assignment group.
53+
* @param {String} groupSysId - sys_id of assignment group
54+
* @returns {Array} - Array of user sys_ids
55+
*/
56+
function getActiveGroupMembers(groupSysId) {
57+
var users = [];
58+
var grMember = new GlideRecord('sys_user_grmember');
59+
grMember.addQuery('group', groupSysId);
60+
grMember.addJoinQuery('sys_user', 'user', 'sys_id');
61+
grMember.addQuery('user.active', true);
62+
grMember.query();
63+
64+
while (grMember.next()) {
65+
users.push(grMember.user.toString());
66+
}
67+
return users;
68+
}
69+
70+
/**
71+
* Returns a random element from an array.
72+
* @param {Array} arr
73+
* @returns {*} Random element
74+
*/
75+
function getRandomElement(arr) {
76+
if (!arr || arr.length === 0) return null;
77+
var index = Math.floor(Math.random() * arr.length);
78+
return arr[index];
79+
}
80+
81+
})();
82+

0 commit comments

Comments
 (0)