Durée simple par rapport à la durée relative
La quantité de travail nécessaire pour accomplir une tâche peut être exprimée en « durée relative ».
La durée relative détermine la date et l’heure d’échéance prévues par rapport à l’heure de début. Des exemples de durées relatives incluent « Jour ouvrable suivant à 16h » ou « 2 jours ouvrables à 10h30 ».
Pour calculer une durée relative, le calendrier et le fuseau horaire doivent être pris en compte pour déterminer ce que signifie « jour ouvrable suivant », car c’est le calendrier qui définit quels jours sont des jours ouvrables valides et le fuseau horaire affectera également le résultat. À titre d’exemple, considérez « Jour ouvrable suivant à 16 heures » :
- Si c’est le lundi à 12h : Jour ouvrable suivant à 16h => mardi à 16h
- Si c’est le vendredi à 14h : Jour ouvrable suivant à 16h => le lundi suivant à 16h
Remarque :
Le jour ouvrable suivant est souvent défini par un jour et une heure de début. Par exemple, « le jour ouvrable suivant à 16h si avant 14h » indique que si l’heure actuelle est après 14h un jour ouvrable, alors « Jour ouvrable suivant » signifie en réalité 2 jours ouvrables puisque le jour ne compte pas.
Calcul d’une durée simple
Cette règle métier et cet exemple de script montrent comment calculer une durée simple.
var dur =new DurationCalculator();
dur.setSchedule(current.schedule);
dur.setStartDateTime("");
if(current.duration_type==""){
dur.calcDuration(current.duration.getGlideObject().getNumericValue()/1000);}else{
dur.calcRelativeDuration(current.duration_type);}
current.end_date_time= dur.getEndDateTime();
current.work_seconds= dur.getSeconds();Ce script montre comment utiliser DurationCalculator pour calculer une durée simple.
/**
* Sample script demonstrating use of DurationCalculator to compute simple durations
*
*/
gs.include('DurationCalculator');
executeSample();
/**
* Function to house the sample script.
*/
function executeSample(){
// First we need a DurationCalculator object.
var dc =new DurationCalculator();
// Compute a simple duration without any schedule. The arguments
// can also be of type GlideDateTime, such as fields from a GlideRecord.
var dur = dc.calcScheduleDuration("5/1/2012","5/2/2012");
gs.log("calcScheduleDuration no schedule: "+ dur);
// 86400 seconds (24 hours)
// The above sample is useful in limited cases. We almost always want to
// use some schedule in a duration computation, let's load a schedule.
addSchedule(dc);
// Compute a duration using the schedule. The schedule
// specifies a nine hour work day. The output of this is 32400 seconds, or
// a nine hour span.
dur = dc.calcScheduleDuration("5/23/2012 12:00","5/24/2012 12:00");
gs.log("calcScheduleDuration with schedule: "+ dur);
// 32400 seconds (9 hours)
// Compute a duration that spans a weekend and holiday. Even though this
// spans three days, it only spans 9 work hours based on the schedule.
dur = dc.calcScheduleDuration("5/25/2012 12:00","5/29/2012 12:00");
gs.log("calcScheduleDuration with schedule spaning holiday: "+ dur);
// 32400 seconds (9 hours)
// Use the current date time in a calculation. The output of this is
// dependent on when you run it.
var now =new Date();
dur = dc.calcScheduleDuration("5/15/2012",new GlideDateTime());
gs.log("calcScheduleDuration with schedule to now: "+ dur);
// Different on every run.}
/**
* 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());}Calcul d’une durée relative
Exemple de script de calcul de durée relative.
Ce script calcule la durée relative pour « Jour suivant à 16h si après 10h » :
// Next day at 4pm if before 10am
var days =1;
if(calculator.isAfter(calculator.startDateTime,"10:00:00"))
days++;
calculator.calcRelativeDueDate(calculator.startDateTime, days,"16:00:00");Ce script montre comment utiliser DurationCalculator pour calculer une durée relative.
/**
* Sample use of relative duration calculation.
*
*/
gs.include('DurationCalculator');
executeSample();
/**
* Function to house the sample script.
*/
function executeSample(){
// First we need a DurationCalculator object. We will also use
// the out-of-box relative duration "2 bus days by 4pm"
var dc =new DurationCalculator();
var relDur ="3bf802c20a0a0b52008e2859cd8abcf2";
// 2 bus days by 4pm if before 10am
addSchedule(dc);
// Since our start date is before 10:00am our result is two days from
// now at 4:00pm.
dc.setStartDateTime("5/1/2012 09:00:00");
if(!dc.calcRelativeDuration(relDur)){
gs.log("*** calcRelativeDuration failed");
return;}
gs.log("Two days later 4:00pm: "+ dc.getEndDateTime());
// Since our start date is after 10:00am our result is three days from
// now at 4:00pm.
dc.setStartDateTime("5/1/2012 11:00:00");
if(!dc.calcRelativeDuration(relDur)){
gs.log("*** calcRelativeDuration failed");
return;}
gs.log("Three days later 4:00pm: "+ 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");}