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

VaranAwesomenow
Mega Sage

Yes, it is,. let me know if any help with scripting is needed.


Yes Please !!!!!


And Thank You for your scripting help - still weak in this area, getting better, but weak lol



How close was I on finding the correct criteria on the issue?



Mark


The table name to fetch the oncall member is cmn_rota_member



How to schedule a scheduled job only on weekdays?



Following would be the scheduled job



find_real_file.png



Condition script



answer = script();




function script() {


returnFlag = false;


var gdt = new GlideDateTime();


var dow = gdt.getDayOfWeekLocalTime();


if (dow < 6) {


returnFlag = true;


}


return returnFlag;


}



Run this script:



assinOnCall() ;



function assinOnCall() {


var query = 'assigned_to=NULL';


var grInc = new GlideRecord('incident');


grInc.addEncodedQuery(query);


grInc.query();


while (grInc.next()) {


var group = grInc.assignment_group;


grInc.assigned_to = getOnCall(group);


grInc.update();


}



function getOnCall(groupId) {


var returnAssignee = '';


var query = 'roster.rota.group=' + groupId +'^roster.active=true^memberISNOTEMPTY';


var grRota = new GlideRecord('cmn_rota_member');


grRota.addEncodedQuery(query);


grRota.query();


if(grRota.next()) {


returnAssignee = grRota.member + '';


}


return returnAssignee;


}


}



Assumptions made, there would be only one active ROTA per group.


Mark Lanning
Tera Guru

Anil,


In Testing the only Issue is it's not pulling the current on-call person - it is pulling a person and updating the Incident just not the correct person.


Any idea's?



Love the script this is going to help us greatly.



Thank You again


Mark