Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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