The CreatorCon Call for Content is officially open! Get started here.

Custom Discovery Schedule with a Condition Script

Jim Coyne
Kilo Patron

The "Run" choices we have when setting up a Discovery Schedule are:

  • Daily
  • Weekly
  • Monthly
  • Periodically
  • Once
  • On Demand

 

We would have to create multiple schedules in order to run a Discovery every weekday or just weekends.   Or do we? 

It may not be obvious, but because the Discovery Schedule table is a subclass of the Scheduled Job table, we have access to the Conditional checkbox and Condition script fields.   By adding those fields to the Discovery Schedule form, we can now use a script to decide when it should run.   So for example, set the "Run" field to "Daily", check the "Conditional" field and add the following script to the "Condition" field to run a Discovery on weekends only:

(function() {
  //run on weekends only
  var day = new Date().getDay();
  return (day == 0 || day == 6);

})();

 

Skip Sundays:

(function() {
   //skip Sundays
   var day = new Date().getDay();
   return (day != 6);

})();

 

This script for Monday to Friday:

(function() {
  //run Monday to Friday
  var day = new Date().getDay();
  return (day != 0 && day != 6);

})();

 

This one for Monday, Wednesday and Fridays:

(function() {
  //run on Monday, Wednesday and Fridays
  var day = new Date().getDay();
  return (day == 1 || day == 3 || day == 5);

})();

So what happens is the Discovery Schedule will in fact "run" every day at the specified time, but if the condition fails, the job ends without actually kicking off a Discovery.

1 ACCEPTED SOLUTION

Jim Coyne
Kilo Patron

Just setting this answer as correct as the actual thread was not meant as a question and it cannot be changed because it came from the original Community site.

View solution in original post

26 REPLIES 26

You are welcome.


Jim,



I want to create a schedule to run on the first Sunday of every quarter.   Any advice is greatly appreciated.


This should do the trick - set the "Run" field to "Weekly" and "Day" to "Sunday", check the "Conditional" checkbox and use the following script in the "Condition" field:



(function(){


  //run on the first Sunday of every quarter


  var gdt = new GlideDateTime();


  var month = gdt.getMonthLocalTime();


  var day = gdt.getDayOfMonthLocalTime();



  //returns true if the month is January, April, July or October AND the day is within the first week


  return (month == 1 || month == 4 || month == 7 || month == 10) && (day <= 7);


})();


Jim,



Thank you so much.


You are welcome.   Do you mind marking the post as being "Helpful"?   That helps members see responses that are of value.   Thanks


find_real_file.png