Das Rechnen mit Daten und Zeiten spielt bei der Programmierung von ConSol CM-Workflows eine große Rolle. Für einen Zeit-Trigger (siehe Abschnitt Zeit-Trigger) muss der genaue Zeitpunkt, an dem er feuern soll, über das Skript gesetzt werden. Dadurch haben Sie verschiedene Möglichkeiten zur Steuerung von Eskalationszeiten, Erinnerungen für Bearbeiter und anderen aktiven Komponenten des ConSol CM-Prozesses. Beispiele für mögliche Berechnungen mit Daten und/oder Zeiten sind:
Wenn Sie ein Datum und/oder eine Zeit berechnen, müssen Sie entscheiden, ob ein Arbeitszeitkalender verwendet werden soll oder nicht. Ein Arbeitszeitkalender definiert die Arbeitszeiten für einen Prozess. Er wird mit dem Admin Tool definiert und einer oder mehrerer Queues zugewiesen.
Zum Beispiel kann das Servicedesk-Team Arbeitszeiten von 8:00 bis 18:00 an 6 Tagen der Woche haben, wohingegen das Verwaltungsteam an 5 Tagen pro Woche von 9:00 bis 17:00 arbeitet. Durch die Verwendung eines CM-Arbeitszeitkalenders wird sichergestellt, dass die Eskalation nicht in der Freizeit stattfindet und dass die Nicht-Arbeitsstunden nicht in die Berechnung der verstrichenen Eskalationszeit einfließen. Eine detaillierte Einführung in die Arbeitszeitkalender finden Sie im ConSol CM Administratorhandbuch.
Auf der anderer Seite gibt es Beispiele, bei denen ein Arbeitszeitkalender nicht erforderlich ist und stattdessen die reine Zeit auf Grundlage des normalen Kalenders verwendet werden soll. Zum Beispiel wenn Sie sich drei Wochen nach dem Erstkontakt bei einem Kunden melden sollen. Die folgenden Absätze zeigen Beispiele für beide Anwendungsfälle.
1 Tag bedeutet 24 Stunden absolute Zeit; dies hat nichts mit der Verwendung eines Kalenders zu tun. Der Kalender spielt nur eine Rolle, wenn der Zeit-Trigger aktiviert ist. Dann werden die 24 Stunden, d. h. 86400000 Millisekunden, als Eingabe für den Arbeitszeitkalender verwendet (sofern der Kalender aktiviert ist).
Beispiel:
Wenn der Zeitraum 1 Tag = 24 Stunden ohne Kalender ist, werden die 24 Stunden wie reguläre Zeit berechnet. Die Eskalation wird also einen Tag später zur gleichen Uhrzeit ausgelöst.
Im Gegensatz dazu: Wenn ein Kalender verwendet wird (mit zum Beispiel 7 Arbeitsstunden pro Arbeitstag), werden die 24 Stunden entsprechend dem Kalender aufgeteilt. Der Trigger feuert also über 3 Tage später (24 Stunden = 3 x 7 Stunden + 3 Stunden).
Der Zeit-Trigger für eine Eskalation wird abhängig von der Priorität konfiguriert:
// prio is 'medium'
def escalationTime = configurationService.getValue("custom-mycompany-properties","escalation.time.medium")
def escalationTimeMillisecs = escalationTime * 60 * 1000L
trigger.setDueTime( escalationTimeMillisecs )
Code-Beispiel 68: Setzen der Zeit für einen Zeit-Trigger
Abbildung 155: ConSol CM Process Designer - Zeit-Trigger für eine Eskalation 4 Stunden vor der Deadline
def deadl = ticket.get("serviceDesk_fields.desiredDeadline")
// 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()
// 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
def dueTime = escalDate.time - now.time
trigger.setDueTime(dueTime)
Code-Beispiel 69: Skript für Zeit-Trigger für Eskalation 4 Stunden vor Deadline (Methode BusinessCalendarUtil.getBusinessTime für CM-Versionen unter 6.10.6 oder 6.11.0.4)
def deadl = ticket.get("serviceDesk_fields.desiredDeadline")
if (deadl == null){
println("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.getEscalationTime(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)
}
Code-Beispiel 70: Skript für Zeit-Trigger für Eskalation 4 Stunden vor Deadline (Methode BusinessCalendarUtil.getEscalationTime für CM-Versionen 6.10.6 oder 6.11.0.4 und höher) (Kommentar in log.info-Statements, wenn Sie das Beispiel ausprobieren möchten)
Denken Sie daran, dass die Methode setDueTime() die Trigger-Zeit (Delta) in Millisekunden ab dem Zeitpunkt, an dem das Ticket in den Bereich gelaufen ist, in dem sich der Trigger befindet, festlegt!
Die folgenden Methoden sind mit der Klasse BusinessCalendarUtil verfügbar. Sie sind hilfreich, um Zeiten zu berechnen, wenn ein Arbeitszeitkalender eingesetzt wird.