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

Anil,



it's not pulling the getPrimaryUser - Records are not updating



Mark


Dear Mark,



I ran the script on my personal dev instance and I see that it is returning the assignee as you can see from below screenshot. Can you run this piece of code as a background script and check if it returns anything.



var groupId = 'sysid of the group';


var rota = new OnCallRotation() ;


gs.print(rota.getPrimaryUser(groupId));



find_real_file.png


Mark Lanning
Tera Guru

I return null


Background Script.png


Mark Lanning
Tera Guru

Yes - I have those


The Version I am using in my Personnel Instance is Kingston Patch1


I have created New Calendars with Groups and Triggers those are working to assign the primary User of the Group to a Incident.



I reran the script using one of the OOB Groups still received null


var groupId = '287ebd7da9fe198100f92cc8d1d2154e'; - This is the Network Group sysID


var rota = new OnCallRotation() ;


gs.print(rota.getPrimaryUser(groupId));


OnCallRotation.png