Zeit-Trigger

Einführung in Zeit-Trigger

Ein Workflow kann mehrere Zeit-Trigger enthalten.

Abbildung 67: ConSol CM Process Designer - Zeit-Trigger

Ein Zeit-Trigger ist ein Mechanismus, der reagiert, wenn ein bestimmter Zeitraum abgelaufen ist. Dies kann zum Beispiel in folgenden Situationen erforderlich sein:

Diese Anwendungsfälle können mittels Zeit-Triggern implementiert werden.

Ein Zeit-Trigger kann so konfiguriert werden, dass er einen Arbeitszeitkalender verwendet, d. h. nur die Zeiten berücksichtigt, die als Arbeitszeiten definiert sind.

Ein Zeit-Trigger kann hängen an ...

Ein Zeit-Trigger muss einen der beiden folgenden Typen haben:

Sie als Workflow-Entwickler müssen alles implementieren, was geschehen soll, wenn ein Zeit-Trigger gefeuert hat! Es gibt keine automatischen Aktionen. Der Zeit-Trigger sorgt lediglich für das Signal Zeit abgelaufen, genauso wie ein Wecker.

Hinzufügen eines Zeit-Triggers zu einem Workflow

Hinzufügen eines Zeit-Triggers zu einem Bereich

Klicken Sie in der Palette auf das Zeit-Trigger-Symbol und ziehen Sie es in den gewünschten Bereich. Es wird automatisch an den oberen Rand des Bereichs angefügt. Sie können die Position später ändern (ziehen Sie den Trigger nach links oder rechts, um die Reihenfolge der Trigger zu ändern oder das Layout zu verbessern).

Ein Zeit-Trigger, der an einem Bereich hängt, kann nicht in einen anderen Bereich oder eine Aktivität verschoben werden. Wenn Sie einen Zeit-Trigger an einen anderen Bereich oder eine Aktivität anfügen möchten, entfernen Sie den bereits erstellen Trigger und erstellen Sie einen neuen Trigger für den richtigen Bereich bzw. die Aktivität.

Um die Eigenschaften des Triggers zu konfigurieren, wählen Sie ihn im Bearbeitungsbereich aus und setzen Sie im Eigenschaften-Editor die richtigen Werte. Siehe Abschnitt Eigenschaften eines Zeit-Triggers.

Sie können vom Trigger ausgehend Verbindungen zu Aktivitäten oder Entscheidungsknoten ziehen, die sich hinter dem Trigger befinden sollen. Der erste Schritt, der nach dem Zeit-Trigger ausgeführt wird, muss immer eine automatische Aktivität sein!

Hinzufügen eines Zeit-Triggers zu einer Aktivität

Klicken Sie in der Palette auf das Zeit-Trigger-Symbol und ziehen Sie es in die gewünschte Aktivität. Es wird an die Ecke der Aktivität angefügt.

Ein Zeit-Trigger, der an einer Aktivität hängt, kann nicht in eine anderen Aktivität oder einen Bereich verschoben werden. Wenn Sie einen Zeit-Trigger an eine andere Aktivität oder einen Bereich anfügen möchten, entfernen Sie den bereits erstellen Trigger und erstellen Sie einen neuen Trigger für die richtige Aktivität bzw. den Bereich.

Um die Eigenschaften des Triggers zu konfigurieren, wählen Sie ihn im Bearbeitungsbereich aus und setzen Sie im Eigenschaften-Editor die richtigen Werte. Siehe Abschnitt Eigenschaften eines Zeit-Triggers.

Sie können vom Trigger ausgehend Verbindungen zu Aktivitäten oder Entscheidungsknoten ziehen, die sich hinter dem Trigger befinden sollen. Der erste Schritt, der nach dem Zeit-Trigger ausgeführt wird, muss immer eine automatische Aktivität sein!

Eigenschaften eines Zeit-Triggers

Ein Zeit-Trigger hat folgende Eigenschaften:

Abbildung 68: ConSol CM Process Designer - Eigenschaften eines Zeit-Triggers

Geschäftslogik und Initialisierung eines Zeit-Triggers

Die Zeitmessung eines Triggers wird begonnen (d. h. der Trigger wird initialisiert), wenn das Ticket in den Bereich bzw. die Aktivität eintritt. Sie hält an (d. h. der Trigger feuert), wenn der definierte Zeitraum, der als fester Wert gesetzt wurde (Minuten/Stunden/Tage), oder die manuell definierte Zeit verstrichen ist.

Wenn Sie als Workflow-Entwickler einen Trigger mit anderen Werten initialisieren möchten, muss dies mit Skripten erfolgen. Dieser Abschnitt enthält einige kurze Beispiele, eine detaillierte Erklärung zur Programmierung mit Zeit-Triggern in Workflows finden Sie im Abschnitt Arbeiten mit Kalendern und Zeiten. In diesen Kapiteln stehen auch Code-Beispiele.

Ein Zeit-Trigger kann auch deaktiviert werden. In Beispiel 2 ist dies erforderlich, um zu verhindern, dass der Zeit-Trigger am Anfang feuert, da er erst initialisiert werden soll, wenn eine E-Mail eingegangen ist.

Beispiele für Zeit-Trigger

Die Implementierungen für die oben genannten Anwendungsfälle (siehe Einführung in Zeit-Trigger) wären:

Skripte mit Zeit-Triggern

Die folgenden Methoden sind wichtig, wenn Sie mit Zeit-Triggern arbeiten:

TimerTrigger

Das wichtigste Objekt in einem Skript für einen Trigger ist der Trigger selber. Es handelt sich um ein Objekt der Java-Klasse TimerTrigger und es ist implizit in jedem Trigger-Skript als trigger verfügbar.

workflowApi

workflowApi (die Singleton-Instanz von WorkflowContextService) bietet zwei Methoden zum Reinitialisieren des Triggers. Reinitialisieren bedeutet, dass der Trigger auf seinen ursprünglichen Zustand zurückgesetzt wird, sodass noch keine Zeit abgelaufen ist. Für beide Methoden muss der Name des Triggers (pTriggerName) als Pfad angegeben werden. Eine Erklärung dazu finden Sie im Abschnitt über die Arbeit mit Pfadinformationen.

Siehe auch Abschnitt Arbeiten mit Kalendern und Zeiten.

Übersicht über die TimerTrigger-Ereignisse

Die folgende Tabelle enthält eine Übersicht über die möglichen Ereignisse von Zeit-Triggern. Beachten Sie bei der Arbeit mit Zeit-Triggern die Funktionen der Objekte und Methoden.

Ereignis im Prozess

Zeit-Trigger-Ereignis

Ergebnis

Ticket läuft in den Bereich, an den der Zeit-Trigger angehängt ist

Skript zu Beginn wird ausgeführt

Skript zu Beginn gibt null oder false zurück: Zeit-Trigger wird nicht initialisiert und feuert nicht, außer wenn er zu einem anderen Zeitpunkt im Prozess initialisiert wird.

Skript zu Beginn verwendet trigger.setDueTime(<Long>), um den Trigger zu initialisieren. Der Zeitpunkt des Feuerns wird anhand des Ausgangsdatums berechnet (d. h. des Zeitstempels, zu dem das Ticket in den Bereich gelaufen ist). Der <Long>-Wert in Millisekunden wird addiert, d. h. die Methode setDueTime()verwendet die Zeit in Bezug auf die Zeit der Trigger-Initialisierung.

Um eine bestimmte Zeit festzulegen, können Sie ein DATE-Objekt verwenden, das das Zieldatum / die Deadline und folgende Code-Zeile enthält: trigger.setDueTime(target.time - (new Date()).time)

Wenn die Checkbox Kalender markiert ist, wird der Kalender berücksichtigt.

Ticket befindet sich noch in dem Bereich, an dem der Zeit-Trigger hängt

Ein Skript im Workflow ruft die Methode workflowApi.reinitializeTrigger() auf

reinitializeTrigger(<TriggerName>) wird aufgerufen: Der Trigger wird wieder gestartet und verwendet dazu den Zeitstempel, zu dem das Ticket in den Bereich gelaufen ist (an den der Trigger angehängt ist).

reinitializeTrigger(<TriggerName>,<newBaseDate>) wird aufgerufen: Der Trigger wird neu gestartet, die Zeitmessung beginnt mit newBaseDate. Wenn Sie zum Beispiel „jetzt“ als newBaseDate verwenden möchten, müssen Sie workflowApi.reinitializeTrigger("TIMER_NAME", new Date()) aufrufen. Für a und b) :

Wenn die Checkbox Kalender markiert ist, wird der Kalender berücksichtigt.

Zeit-Trigger hat gefeuert

Skript nach Ablauf wird ausgeführt

Das gesamte Skript wird ausgeführt. Danach gilt Folgendes:

Skript nach Ablauf gibt false zurück: Es passiert nichts. Eine mit dem Trigger verknüpfte automatische Aktivität wird nicht ausgeführt.

Skript nach Ablauf gibt true zurück: Eine mit dem Trigger verknüpfte automatische Aktivität wird ausgeführt.

Siehe auch Abschnitt Verwenden der richtigen Komponenten bei der Arbeit mit Zeit-Triggern.

Beispiel 1: Setzen der Ablaufzeit eines Zeit-Triggers entsprechend der Queue

Diese Skript könnte beim Start der Zeitmessung für einen Zeit-Trigger an einem Bereich verwendet werden. Es initialisiert den Trigger für eine Eskalation entsprechend der Queue, d. h. wenn sich das Ticket in der Queue HelpDesk_1st_Level befindet, erfolgt die Eskalation schneller als in der Queue HelpDesk_2nd_Level.

Innerhalb der Skripte Skript zu Beginn und Skript nach Ablauf existiert das Objekt trigger als implizite Initialisierung von TimerTrigger. Sie können also direkt mit dem Trigger arbeiten, ohne vorher zusätzliche Schritte durchführen zu müssen. In einem Admin-Tool-Skript müssen Sie allerdings die Klasse TimerTrigger oder das entsprechende Java-Paket vorher importieren.

Das folgende Skript kann in einer Servicedesk- und Helpdesk-Umgebung verwendet werden und an den folgenden TimerTrigger angehängt werden.

Abbildung 78: ConSol CM Process Designer - TimerTrigger im ServiceDesk-Workflow

def addedEscalMillis = 0

switch (ticket.queue.name) {

case "HelpDesk_1st_Level":

addedEscalMillis = 12*60*60*1000L;

break;

case "HelpDesk_2nd_Level":

addedEscalMillis = 24*60*60*1000L;

break;

case "ServiceDesk":

addedEscalMillis = 4*60*60*1000L;

}

trigger.setDueTime(addedEscalMillis)

Code-Beispiel 7: Beispiel für ein Skript zu Beginn

Für dieses Beispiel ist es sinnvoll, statische Werte für die Zeiten direkt im Skriptcode anzugeben. In echten Umgebungen empfiehlt es sich, die Eskalationszeiten und dergleichen in System-Properties zu speichern und über configurationService abzurufen. Auf diese Weise kann ein Administrator einfach auf die Eskalationszeiten zugreifen und diese ändern, ohne die Workflow-Implementierung verändern zu müssen.

Im Arbeitsalltag würde vielleicht auch ein Arbeitszeitkalender verwendet werden, siehe Beispiel 2.

In der Datei server.log sehen Sie die Zeit, zu der der Trigger feuern soll.

2017-03-02 13:22:25,979 INFO [w.DefaultWorkflowEventListener] [Susan-] Ticket's 100332-001 timer defaultScope/Service_Desk/TimeTriggerDesiredDeadline was activated with escalation time Thu Mar 02 17:22:25 CET 2017

Das Ticket wurde am 2. März 2017 um 13:22 erstellt, daher liegt die Eskalationszeit vier Stunden später um 17:22.

Das gleiche Prinzip wird angewendet, um die Eskalationszeit abhängig von der Ticketpriorität, dem VIP-Status des Kunden oder einem anderen Parameter zu berechnen.

Beispiel 2: Eskalation als Warnung 4 Stunden vor dem gewünschten Enddatum berechnen

Im Ticket kann eine Deadline ausgewählt werden (Ticketfeld des Typs Datum). Vier Stunden bevor diese Deadline erreicht wird, soll das Ticket in den Eskalationsstatus überführt werden (Markierung mit einem Overlay).

def deadl = ticket.get("serviceDesk_fields.desiredDeadline")

if (deadl == null){

log.info("No deadline set!")

} else {

log.info """DEADL: ${deadl}: ${deadl.time}"""

 

// 4hrs before deadline the escalation should be set

// business calendar should be used

// ServiceDeskCalendar is assigned to queue ServiceDesk, this is transparent here

 

def now = new Date()

log.info """NOW: ${now}: ${now.time}"""

 

// time required in millisecds

def four_hours = -4*60*60*1000L

 

// calculate escalation date

def escalDate = BusinessCalendarUtil.getBusinessTime(deadl, four_hours, ticket.queue.calendar)

// calculate and set due time

log.info """escalDate: ${escalDate}: ${escalDate.time}"""

def dueTime = escalDate.time - now.time

 

trigger.setDueTime(dueTime)

log.info 'DUE TIME is now ' + dueTime

}

Code-Beispiel 8: Zeit für TimerTrigger mit BusinessCalendar berechnen und setzen

Beispielausgabe in der Datei server.log: