Assign the Incident between 5 members in one groups in round manner, Auto assignment of incident? Is it possible ?

SNOW44
Mega Guru

Hello All, 

I have a recruitment like Auto- assign Incident between 5 members of one groups and rotate format. When ever a new incident created it auto assign as below

eg:

* Case 1 - assigned to User 1

* Case 2 - assigned to User 2

* Case 3 - assigned to User 3

* Case 4- assigned to User 4

* Case 5- assign to User 5

Repeat again from User 1

it will be like rotate format, can anyone help me on this 

Thanks in Advance

1 ACCEPTED SOLUTION

Ian Mildon
Tera Guru

Yes it is entirely possible to do that, I have a business rule that is doing "round robin" assignment of Incidents to our service desk techs; based on the time the Incident is submitted, and who has the least workload.

And I've broken this out a couple of times today on here now:

function executeRule(current, previous /*null when async*/ ) {

    //assign to the group check
    if (current.active == true) { //removed un-needed assignment group value
        var schedRec = new GlideRecord('cmn_schedule');
        schedRec.get('name', '8-5 weekdays excluding holidays'); //schedule name
		var sched = new GlideSchedule(schedRec.sys_id);
		
        if (sched.isInSchedule(new GlideDateTime()) && current.assigned_to == '') { //check schdule and assign
            var grMemRec = new GlideRecord('sys_user_grmember');
            grMemRec.addQuery('group', current.assignment_group);
            grMemRec.addQuery('user.u_primary_group', 'ca3475badb05b240ec5c3c00ad9619b2'); //only include if primary group is also ISD Service Desk
            grMemRec.addQuery('user.u_auto_assign', 'true'); //checkbox on profile
            grMemRec.orderBy('u_last_incident_assigned');
            grMemRec.query();
            if (grMemRec.next()) {
                current.assigned_to = grMemRec.user.getDisplayValue();
                grMemRec.u_last_incident_assigned = gs.nowDateTime();
                grMemRec.setWorkflow(false);
                grMemRec.update();
            }
        }
    }

})(current, previous);

There was a "workbook" from a previous Knowledge conference that gave the full step by step process of building this out. I do have an old copy somewhere but if you search for "round robin assignment" or similar you may track down a copy.

View solution in original post

7 REPLIES 7

Vishal Savajia1
Kilo Sage

Hi Ravi, 

 

A) I am able to implement same requirement in my developer Instance.

 

B Create one Integer column in sys_user_grmember.

C) Create One Integer Column in Incident Table

D) you can use Client Script mentioned here or you can create your own version of Script

find_real_file.png

 

 

 

 

 

 

find_real_file.png

 

 

var assignmentGroup = g_form.getValue("assignment_group");

if (assignmentGroup == '9083bc252fee6010b220bea62799b658') {
alert(true);
var rec = new GlideRecord('incident');
rec.addQuery('assignment_group', '9083bc252fee6010b220bea62799b658');
rec.orderByDesc('sys_updated_on');
rec.setLimit(1);
rec.query();
while(rec.next()) {
var inputvalue = rec.u_incuservalue;
alert(inputvalue);
}

var incvalue = rec.u_incuservalue;
alert("MY");
alert(incvalue);



if (incvalue == 1)
{
alert("I am eqaul to 1 ");

var grMemRec = new GlideRecord('sys_user_grmember');
grMemRec.addQuery('group', '9083bc252fee6010b220bea62799b658');
//alert(myvalue);
grMemRec.addQuery('u_user_value', 2);
grMemRec.query();
while(grMemRec.next()) {
g_form.setValue("assigned_to", grMemRec.user);
g_form.setValue("u_incuservalue", 2);

}
}

if (incvalue == 2)
{
alert("I am eqaul to 2 ");


var grMemRec2 = new GlideRecord('sys_user_grmember');
grMemRec2.addQuery('group', '9083bc252fee6010b220bea62799b658');
//alert(myvalue);
grMemRec2.addQuery('u_user_value', 3);
grMemRec2.query();
while(grMemRec2.next()) {
g_form.setValue("assigned_to", grMemRec2.user);
g_form.setValue("u_incuservalue", 3);

}
}

if (incvalue == 3)
{
alert("I am eqaul to 3 ");


var grMemRec3 = new GlideRecord('sys_user_grmember');
grMemRec3.addQuery('group', '9083bc252fee6010b220bea62799b658');
//alert(myvalue);
grMemRec3.addQuery('u_user_value', 4);
grMemRec3.query();
while(grMemRec3.next()) {
g_form.setValue("assigned_to", grMemRec3.user);
g_form.setValue("u_incuservalue", 4);

}
}


if (incvalue == 4)
{
alert("I am eqaul to 4 ");


var grMemRec4 = new GlideRecord('sys_user_grmember');
grMemRec4.addQuery('group', '9083bc252fee6010b220bea62799b658');
//alert(myvalue);
grMemRec4.addQuery('u_user_value', 5);
grMemRec4.query();
while(grMemRec4.next()) {
g_form.setValue("assigned_to", grMemRec4.user);
g_form.setValue("u_incuservalue", 5);

}
}

if (incvalue == 5)
{
alert("I am Equal to 5 ");

var grMemRec1 = new GlideRecord('sys_user_grmember');
grMemRec1.addQuery('group', '9083bc252fee6010b220bea62799b658');
alert(inputvalue);
grMemRec1.addQuery('u_user_value', 1);
grMemRec1.query();
while(grMemRec1.next()) {
g_form.setValue("assigned_to", grMemRec1.user);
g_form.setValue("u_incuservalue", 1);
}
}

else
alert(false);
}
}

Hi Vishal, 

Thanks for your response.

I have one doubt, if new user is added in the group then code need to update like below

grMemRec1.addQuery('u_user_value', 6);

is it?

Yes Please. 

 

A) You can do more customization in Script