Einfache Dauer und relative Dauer

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 3 Minuten Lesedauer
  • Wie viel Arbeit zum Abschließen einer Aufgabe erforderlich ist, kann als „relative Dauer“ ausgedrückt werden.

    Die relative Dauer bestimmt den erwarteten Fälligkeitszeitpunkt relativ zur Startzeit. Beispiele für relative Dauern sind „Nächster Geschäftstag bis 16:00 Uhr“ oder „2 Werktage bis 10:30 Uhr“.

    Um eine relative Dauer zu berechnen, müssen Kalender und Zeitzone berücksichtigt werden, um zu bestimmen, was „nächster Geschäftstag“ bedeutet, da der Kalender definiert, welche Tage gültige Arbeitstage sind, und auch die Zeitzone das Ergebnis beeinflusst. Als Beispiel betrachten Sie „Nächster Geschäftstag bis 16 Uhr“:
    • Wenn es Montag, 12 Uhr ist: Nächster Geschäftstag bis 16 Uhr => Dienstag, 16 Uhr
    • Wenn es Freitag, 14 Uhr ist: Nächster Geschäftstag bis 16 Uhr => folgender Montag, 16 Uhr
    Hinweis:
    Der nächste Geschäftstag wird häufig durch einen Starttag und eine Startzeit definiert. Zum Beispiel bedeutet „Nächster Geschäftstag bis 16 Uhr, wenn vor 14 Uhr“, dass, wenn die aktuelle Uhrzeit an einem Geschäftstag später als 14 Uhr ist, „nächster Arbeitstag“ tatsächlich 2 Geschäftstage sind, da der heutige Tag nicht zählt.

    Einfache Dauer berechnen

    Dieses Beispiel mit Business Rule und Skript veranschaulicht, wie eine einfache Dauer berechnet wird.

    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();

    Dieses Skript veranschaulicht die Verwendung von DurationCalculator zur Berechnung einer einfachen Dauer.

    /**
     * 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());}

    Relative Dauer berechnen

    Ein Beispiel für ein Skript zur Berechnung der relativen Dauer.

    Dieses Skript berechnet die relative Dauer für „Nächster Geschäftstag bis 16 Uhr, wenn nach 10 Uhr“:
    // 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");

    Dieses Skript veranschaulicht die Verwendung von DurationCalculator zur Berechnung einer relativen Dauer.

    /**
     * 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");}