Workflow use case Often you may need to provide users with a way to specify when a task or process is due. Using the DurationCalculator script include, you can calculate the due date, using either a simple duration or relative duration. For information on schedules, which you can use as inputs to DurationCalculator methods, see Schedules. See the ServiceNow Developers site for API information. This script demonstrates how to use DurationCalculator to compute a due date. /** * Demonstrate the use of DurationCalculator to compute a due date. * * You must have a start date and a duration. Then you can compute a * due date using the constraints of a schedule. */ gs.include('DurationCalculator'); executeSample(); /** * Function to house the sample script. */function executeSample(){ // First we need a DurationCalculator object.var dc =new DurationCalculator(); // --------------- No schedule examples ------------------ // Simple computation of a due date without using a schedule. Seconds// are added to the start date continuously to get to a due date. dc.setStartDateTime("5/1/2012");if(!dc.calcDuration(2*24*3600)){// 2 days gs.log("*** Error calculating duration");return;} gs.log("calcDuration no schedule: "+ dc.getEndDateTime());// "2012-05-03 00:00:00" two days later // Start in the middle of the night (2:00 am) and compute a due date 1 hour in the future// Without a schedule this yields 3:00 am. dc.setStartDateTime("5/3/2012 02:00:00");if(!dc.calcDuration(3600)){ gs.log("*** Error calculating duration");return;} gs.log("Middle of night + 1 hour (no schedule): "+ dc.getEndDateTime());// No scheduled start date, just add 1 hour // -------------- Add a schedule to the date calculator --------------------- addSchedule(dc); // Start in the middle of the night and compute a due date 1 hour in the future.// Since we start at 2:00 am the computation adds the 1 hour from the start// of the day, 8:00am to get to 9:00am dc.setStartDateTime("5/3/2012 02:00:00");if(!dc.calcDuration(3600)){// gs.log("*** Error calculating duration");return;} gs.log("Middle of night + 1 hour (with 8-5 schedule): "+ dc.getEndDateTime());// 9:00 am // Start in the afternoon and add hours beyond quiting time. Our schedule says the work day// ends at 5:00pm, if the duration extends beyond that, we roll over to the next work day.// In this example we are adding 4 hours to 3:00pm which gives us 10:00 am the next day. dc.setStartDateTime("5/3/2012 15:00:00");if(!dc.calcDuration(4*3600)){// gs.log("*** Error calculating duration");return;} gs.log("Afternoon + 4 hour (with 8-5 schedule): "+ dc.getEndDateTime());// 10:00 am. // This is a demo of adding 2 hours repeatedly and examine the result. This// is a good way to visualize the result of a due date calculation. dc.setStartDateTime("5/3/2012 15:00:00");// for(var i=2; i<24; i+=1){if(!dc.calcDuration(i*3600)){// gs.log("*** Error calculating duration");return;} gs.log("add "+ i +" hours gives due date: "+ dc.getEndDateTime());} // Setting the timezone causes the schedule to be interpreted in the specified timezone.// Run the same code as above with different timezone. Note that the 8 to 5 workday is// offset by the two hours as specified in our timezone. dc.setTimeZone("GMT-2"); dc.setStartDateTime("5/3/2012 15:00:00");for(var i=2; i<24; i+=1){if(!dc.calcDuration(i*3600)){// gs.log("*** Error calculating duration");return;} gs.log("add "+ i +" hours gives due date (GMT-2): "+ dc.getEndDateTime());}} /** * Add a specific schedule to the DurationCalculator object. * * @param durationCalculator An instance of DurationCalculator */function addSchedule(durationCalculator){// Load the "8-5 weekdays excluding holidays" schedule into our duration calculator.var scheduleName ="8-5 weekdays excluding holidays";var grSched =new GlideRecord('cmn_schedule'); grSched.addQuery('name', scheduleName); grSched.query();if(!grSched.next()){ gs.log('*** Could not find schedule "'+ scheduleName +'"');return;} durationCalculator.setSchedule(grSched.getUniqueValue(),"GMT");} Calculating a relative durationAn example of a relative duration calculation script.Calculating a simple durationThis business rule and script example demonstrate how to calculate a simple duration.Elapsed time vs work timeTypically, setting a due date requires that you calculate the actual work time required for completion rather than the total time that elapses until the due date.How to implement a relative durationThe general steps for implementing a relative duration.Simple duration vs relative durationHow much work is required to complete a task can be expressed as a "relative duration".The relative duration table and the DurationCalculator methodsThe cmn_relative_duration table supports the definition of a due date as either a duration of time or a relative duration.

Workflow use case Often you may need to provide users with a way to specify when a task or process is due. Using the DurationCalculator script include, you can calculate the due date, using either a simple duration or relative duration. For information on schedules, which you can use as inputs to DurationCalculator methods, see Schedules. See the ServiceNow Developers site for API information. This script demonstrates how to use DurationCalculator to compute a due date. /** * Demonstrate the use of DurationCalculator to compute a due date. * * You must have a start date and a duration. Then you can compute a * due date using the constraints of a schedule. */ gs.include('DurationCalculator'); executeSample(); /** * Function to house the sample script. */function executeSample(){ // First we need a DurationCalculator object.var dc =new DurationCalculator(); // --------------- No schedule examples ------------------ // Simple computation of a due date without using a schedule. Seconds// are added to the start date continuously to get to a due date. dc.setStartDateTime("5/1/2012");if(!dc.calcDuration(2*24*3600)){// 2 days gs.log("*** Error calculating duration");return;} gs.log("calcDuration no schedule: "+ dc.getEndDateTime());// "2012-05-03 00:00:00" two days later // Start in the middle of the night (2:00 am) and compute a due date 1 hour in the future// Without a schedule this yields 3:00 am. dc.setStartDateTime("5/3/2012 02:00:00");if(!dc.calcDuration(3600)){ gs.log("*** Error calculating duration");return;} gs.log("Middle of night + 1 hour (no schedule): "+ dc.getEndDateTime());// No scheduled start date, just add 1 hour // -------------- Add a schedule to the date calculator --------------------- addSchedule(dc); // Start in the middle of the night and compute a due date 1 hour in the future.// Since we start at 2:00 am the computation adds the 1 hour from the start// of the day, 8:00am to get to 9:00am dc.setStartDateTime("5/3/2012 02:00:00");if(!dc.calcDuration(3600)){// gs.log("*** Error calculating duration");return;} gs.log("Middle of night + 1 hour (with 8-5 schedule): "+ dc.getEndDateTime());// 9:00 am // Start in the afternoon and add hours beyond quiting time. Our schedule says the work day// ends at 5:00pm, if the duration extends beyond that, we roll over to the next work day.// In this example we are adding 4 hours to 3:00pm which gives us 10:00 am the next day. dc.setStartDateTime("5/3/2012 15:00:00");if(!dc.calcDuration(4*3600)){// gs.log("*** Error calculating duration");return;} gs.log("Afternoon + 4 hour (with 8-5 schedule): "+ dc.getEndDateTime());// 10:00 am. // This is a demo of adding 2 hours repeatedly and examine the result. This// is a good way to visualize the result of a due date calculation. dc.setStartDateTime("5/3/2012 15:00:00");// for(var i=2; i<24; i+=1){if(!dc.calcDuration(i*3600)){// gs.log("*** Error calculating duration");return;} gs.log("add "+ i +" hours gives due date: "+ dc.getEndDateTime());} // Setting the timezone causes the schedule to be interpreted in the specified timezone.// Run the same code as above with different timezone. Note that the 8 to 5 workday is// offset by the two hours as specified in our timezone. dc.setTimeZone("GMT-2"); dc.setStartDateTime("5/3/2012 15:00:00");for(var i=2; i<24; i+=1){if(!dc.calcDuration(i*3600)){// gs.log("*** Error calculating duration");return;} gs.log("add "+ i +" hours gives due date (GMT-2): "+ dc.getEndDateTime());}} /** * Add a specific schedule to the DurationCalculator object. * * @param durationCalculator An instance of DurationCalculator */function addSchedule(durationCalculator){// Load the "8-5 weekdays excluding holidays" schedule into our duration calculator.var scheduleName ="8-5 weekdays excluding holidays";var grSched =new GlideRecord('cmn_schedule'); grSched.addQuery('name', scheduleName); grSched.query();if(!grSched.next()){ gs.log('*** Could not find schedule "'+ scheduleName +'"');return;} durationCalculator.setSchedule(grSched.getUniqueValue(),"GMT");} Calculating a relative durationAn example of a relative duration calculation script.Calculating a simple durationThis business rule and script example demonstrate how to calculate a simple duration.Elapsed time vs work timeTypically, setting a due date requires that you calculate the actual work time required for completion rather than the total time that elapses until the due date.How to implement a relative durationThe general steps for implementing a relative duration.Simple duration vs relative durationHow much work is required to complete a task can be expressed as a "relative duration".The relative duration table and the DurationCalculator methodsThe cmn_relative_duration table supports the definition of a due date as either a duration of time or a relative duration.