Update Incidents where the Assigned to is empty due to no On-Call person was Scheduled for the Assignment Group

Mark Lanning
Tera Guru

Issue -

Due to the On-Call Calendar Schedule being setup for 8 to 4:30 with someone scheduled to assign a person to an Incident

The only option for the On-Call Rota is when an incident is create outside a schedule with no Assigned To is to update the Assignment Group and leave the Assigned to empty.

The On-Call Rota will not rerun again the next business day to find those incidents that came in after hours

So we are looking to create a Scheduled Job to run at 8:00 am to find any Active Incidents with the Assigned to is empty then update the Assigned to with the Current On-Call Person for that Assignment Group

Would have to Query the Incident and the cmn_rota Tables

From the Incident table would have to guery any active is true and assigned_to is empty incidents - Would think we want to return Number and Assignment Group

From the Rota cmn_rota table would need to query the matching assignment group then return the current on-call rota member

Would then need to have the current on-call rota member placed in the incident assigned to field

This in turn would update Incidents where the Assigned to was empty with the current On-Call person for that Assignment Group on the next business day.

And to add even more twist - Can it be scheduled to only occur Monday thru Friday would want to exclude weekends

Is this something that can be done?

Mark

1 ACCEPTED SOLUTION

Anil,


You are awesome!


Thank You again for your Help.



Final Script that work great.



assinOnCall() ;



function assinOnCall() {


var query = 'assignment_groupISNOTEMPTY^assigned_toISEMPTY';


var grInc = new GlideRecord('incident');


grInc.addEncodedQuery(query);


grInc.query();


while (grInc.next()) {


var group = grInc.assignment_group.sys_id + '';


var assigned_to = getOnCall(group) + '';


if(assigned_to != '') {


grInc.assigned_to = assigned_to;


grInc.update();


}


}


}



function getOnCall(groupId) {


var returnAssignee = '';


var rota = new OnCallRotation() ;


var hasRota = rota.who(groupId) + '';


if(hasRota == 'true') {


returnAssignee = rota.getPrimaryUser();


}


return returnAssignee;


}


View solution in original post

23 REPLIES 23

Mark Lanning
Tera Guru

Sound Good - I created me a Slack Account - I'm CST so I will meet you around 2:00 CST


Thank you again for going well beyond on help me with this.


Dear Mark,



The correct script we used.



assinOnCall() ;




function assinOnCall() {


var query = 'assignment_groupISNOTEMPTY^assigned_toISEMPTY';


var grInc = new GlideRecord('incident');


grInc.addEncodedQuery(query);


grInc.query();


while (grInc.next()) {


var group = grInc.assignment_group.sys_id + '';


var assigned_to = getOnCall(group) + '';


if(assigned_to != '') {


grInc.assigned_to = assigned_to;


grInc.update();


}


}


}




function getOnCall(groupId) {


var returnAssignee = '';


var rota = new OnCallRotation() ;


var hasRota = rota.who(groupId) + '';


if(hasRota == 'true') {


returnAssignee = rota.getPrimaryUser();


}


return returnAssignee;


}


Anil,


You are awesome!


Thank You again for your Help.



Final Script that work great.



assinOnCall() ;



function assinOnCall() {


var query = 'assignment_groupISNOTEMPTY^assigned_toISEMPTY';


var grInc = new GlideRecord('incident');


grInc.addEncodedQuery(query);


grInc.query();


while (grInc.next()) {


var group = grInc.assignment_group.sys_id + '';


var assigned_to = getOnCall(group) + '';


if(assigned_to != '') {


grInc.assigned_to = assigned_to;


grInc.update();


}


}


}



function getOnCall(groupId) {


var returnAssignee = '';


var rota = new OnCallRotation() ;


var hasRota = rota.who(groupId) + '';


if(hasRota == 'true') {


returnAssignee = rota.getPrimaryUser();


}


return returnAssignee;


}