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.

SLA start condition based on time

Lucien1
Giga Expert

Hi all,

I have a requirement to measure a vendors SLAs and have come into a bit of a problem. the criteria is as follows

1. They have 2 sets of SLA hours: Core hours are 07:00 - 19:00 and have a 30 minute response SLA. 19:00 - 07:00 and have a 45 minute response SLA

2. They always the team that create the incidents so I need to build this on the basis on when we assign them the incidents.

When I assign them an incident, both SLAs attach but only 1 clock runs.

What I am trying to achieve is that the SLAs only get attached to the incident if the incident is assigned to them during the set hours. 07:00 - 19:00 OR 19:00 - 07:00

Has anyone done this? If so, how did you get this working and can you share it.

Thanks all for your help.

1 ACCEPTED SOLUTION

I tried this and it worked:



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


      var schedRec = new GlideRecord('cmn_schedule');


      schedRec.get('name', '8-5 Weekdays');


      gs.addInfoMessage('Checking against schedule: ' + schedRec.sys_id);


      var sched = new GlideSchedule(schedRec.sys_id);


     


      if(sched.isInSchedule(new GlideDateTime())){


              gs.addInfoMessage('in schedule');


              current.u_business_hours = 'true';


      }else{


              gs.addInfoMessage('not in schedule');


      }


     


})(current, previous);


View solution in original post

5 REPLIES 5

Michael Fry1
Kilo Patron

Here's a thread with similar request: SLA Triggered based on off working Hour and working hour


Hi Michael,



Thanks for the thread, I have gone through it and have tried to implement it, I have had to modify it slightly (as we do) but it doesn't seam to run as what I was expecting.



function onBefore(current, previous) {


  //This function will be automatically called when this rule is processed.


  var schedRec = new GlideRecord('cmn_schedule');


  schedRec.get('name', "WP VSLA");


  gs.addInfoMessage('line 5 script run');


  var sched = new GlideSchedule(schedRec.sys_id);


  if(!sched.isInSchedule(new GlideDateTime())){


  current.u_business_hours = 'true';


  gs.addInfoMessage('line 9 script run');


  }


}



When I run the script to see if it flags field it fails and I am just not seeing where I am going wrong.



Can you let me know your thoughts.



Thanks for your help so far.



Lucien


I tried this and it worked:



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


      var schedRec = new GlideRecord('cmn_schedule');


      schedRec.get('name', '8-5 Weekdays');


      gs.addInfoMessage('Checking against schedule: ' + schedRec.sys_id);


      var sched = new GlideSchedule(schedRec.sys_id);


     


      if(sched.isInSchedule(new GlideDateTime())){


              gs.addInfoMessage('in schedule');


              current.u_business_hours = 'true';


      }else{


              gs.addInfoMessage('not in schedule');


      }


     


})(current, previous);


Hi Michael,



Thank you for your help with this, it worked well and does everything I needed.



Kind regards,



Lucien