Skip to content

Commit 79a0a57

Browse files
authored
Round Robin Method for Incident Assignment Logic (#1851)
* Round Robin Method for Incident Assignment Logic
1 parent 6c8fec9 commit 79a0a57

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
UseCase -
2+
3+
4+
5+
When a new Incident is created, the system should automatically assign it to the next available member of the assignment group — in a Round Robin fashion (i.e., distributing incidents evenly among all group members).
6+
7+
It will also work for New addition of new user. and distribute the incident equally to all the users.
8+
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
(function executeRule(current, previous /*null when async*/) {
2+
3+
var agg = new GlideAggregate('incident');
4+
agg.addQuery('assignment_group', current.assignment_group);
5+
agg.addAggregate('count');
6+
agg.query();
7+
8+
var ga = new GlideAggregate('sys_user_grmember');
9+
ga.addQuery('group', current.assignment_group);
10+
ga.addAggregate('count');
11+
ga.query();
12+
13+
if (agg.next() && ga.next()) {
14+
if (Number(agg.getAggregate('count')) <= Number(ga.getAggregate('count')) {
15+
16+
var grmem = new GlideRecord('sys_user_grmember');
17+
grmem.addQuery('group', current.assignment_group);
18+
grmem.query();
19+
20+
while (grmem.next()) {
21+
22+
var inc = new GlideRecord('incident');
23+
inc.addQuery('assignment_group', grmem.group);
24+
inc.addQuery('assigned_to', grmem.user);
25+
inc.query();
26+
27+
if (!inc.hasNext()) {
28+
current.assigned_to = grmem.user;
29+
current.update();
30+
return;
31+
}
32+
}
33+
34+
} else {
35+
var min_assignement_group_count, rec_sys_id = null;
36+
var count = new GlideAggregate('incident');
37+
count.addQuery('assignment_group', current.assignment_group);
38+
count.groupBy('assigned_to');
39+
count.addNotNullQuery('assigned_to');
40+
count.addAggregate('count');
41+
count.query();
42+
43+
if (count.next()) {
44+
min_assignement_group_count = Number(count.getAggregate('count'));
45+
rec_sys_id = count.getValue('assigned_to');
46+
}
47+
48+
count.query();
49+
50+
while (count.next()) {
51+
var countfinal = Number(count.getAggregate('count'));
52+
if (countfinal < min_assignement_group_count) {
53+
min_assignement_group_count = countfinal;
54+
rec_sys_id = count.getValue('assigned_to');
55+
}
56+
}
57+
58+
if (rec_sys_id == null) {
59+
var gr_inc = new GlideRecord('sys_user_grmember');
60+
gr_inc.addQuery('group', current.assignment_group);
61+
gr_inc.query();
62+
if (gr_inc.next()) {
63+
rec_sys_id = gr_inc.user;
64+
}
65+
}
66+
67+
current.assigned_to = rec_sys_id;
68+
current.update();
69+
}
70+
71+
}
72+
73+
})(current, previous);

0 commit comments

Comments
 (0)