Zeitberechnung mit Macro Actions
Basieren Formularfeldwerte auf Dynamischen Feldern vom Typ "Date" oder "DateTime", können Ziel-Zeiten mit einer Formel automatisiert berechnet werden. Damit können bspw. Termine für Wiedervorlagen oder für die nächste Regelprüfung eines Assets ermittelt und weiterverwendet werden.
Das Ausführen dieser Berechnungen erfolgt mittels Jobs oder Aktionen unter Nutzung von KIX-Zeit-Platzhaltern und Variablenfiltern.
Gegebenenfalls müssen Asset-Klassendefinitionen um weitere Attribute (Formularfelder) ergänzt werden, damit diese Werte für eine Berechnung genutzt werden können, z. B. Angaben zum Wartungsintervall (s. auch: Eine Klassendefinition bearbeiten).
Szenario
Im nachfolgenden Beispiel soll der nächste Wartungstermin eines Assets ermittelt werden. Dieser basiert aus der Berechnung des am betroffenen Asset hinterlegten Wartungsintervalls und dem am Ticket notierten Datum der letzten Wartung (Datum der letzten Wartung + Wartungsintervall = nächster Wartungstermin).

Abb.: Angaben zum Wartungsintervall im Ticket
Folgende Schritte sind dazu erforderlich:
Anlegen von 3 Dynamischen Feldern (Datum der letzten Wartung, Wartungsintervall, Datum der nächsten Wartung)
Einbinden der Dynamischen Felder in die Dialoge Neues Ticket und Ticket bearbeiten.
Erweiterung der Asset-Klassendefinition um das Attribut (Formularfeld) Wartungsintervall|MaintenancePeriod.
Optional: Hinterlegen eines Pattern für das neue Eingabefeld
Job-Konfiguration zum Auslesen des Wartungsintervalls
Job-Konfiguration zum Berechnen des nächsten Wartungstermins
Dynamische Felder anlegen
Für die Umsetzung des Beispiels werden 3 Dynamische Felder benötigt. Sie werden im Menü
mit nachfolgender Grundkonfiguration angelegt. Alle weiteren Konfigurationsparameter sind optional.DFMaintenanceDateTime
Enthält das Datum der letzten Wartung
Label: Letzte Wartung am
Feldtyp: Date/Time
Objekttyp: Ticket
Anzahl (Min/Max/Default): 1/1/1
DFMaintenancePeriod
Enthält den Wartungsintervall in Monaten
Label: Wartungsintervall (Monate)
Feldtyp: Text
Objekttyp: Ticket
Anzahl (Min/Max/Default): 1/1/1
RegEx:
^[0-9]*$
RegExErrorMessage: Bitte nur Zahlenwerte eingeben
DFNextMaintenance
Enthält das Datum des nächsten Wartungstermins
Label: Nächste Wartung am
Feldtyp: Date/Time
Objekttyp: Ticket
Anzahl (Min/Max/Default): 1/1/1
Datumsbeschränkung: dissablePastDates
Dynamische Felder einbinden
Damit die Wartungsinformationen am Ticket zur Verfügung stehen, müssen die Dynamischen Felder in den Dialogen Neues Ticket und Ticket bearbeiten bereitgestellt werden. Alternativ können Sie sie auch in weiteren Vorlagen oder Aktionen bereitstellen.
Navigieren Sie dazu im Admin Modul ins Menü Default - New Ticket Template zur Bearbeitung.
und öffnen Sie die VorlageErgänzen Sie zuvor angelegten Dynamischen Felder in der Vorlage (s. auch Eine Vorlage konfigurieren)
Navigieren Sie im Explorer zu
.Öffnen Sie die Aktion Ticket Edit zur Bearbeitung.
Ergänzen Sie auf der Seite Eingabefelder die zuvor angelegten 3 Dynamischen Felder.

Abb.: Integration der Dynamischen Felder in den Dialog Neues Ticket
Assetklasse erweitern
Die Dialoge zum Anlegen neuer Assets enthalten standardmäßig kein Eingabefeld, um den Wartungsintervall zu hinterlegen. Um dieses in den Dialog zu integrieren, muss die entsprechende Assetklasse um ein zusätzliches Eingabefeld erweitert werden. Dies erfolgt durch Modifikation der Klassendefinition.
Für dieses Beispiel wird die Assetklasse "Computer" um das Feld MaintenancePeriod erweitert. Danach kann beim Anlegen/Bearbeiten eines Assets der Klasse "Computer" der Wartungsintervall in Monaten hinterlegt werden.

Abb.: Erweiterte Assetklasse "Computer"
Die Modifikation der Assetklasse erfolgt im Menü Assets >> Assetklassen. Öffnen Sie die Klasse "Computer", um diese zu bearbeiten. Alternativ können Sie eine andere Assetklasse wählen. Fügen Sie in der Klassendefinition nachfolgenden Code ein. Platzieren Sie ihn an gewünschter Stelle. Die Platzierung im Code definiert die Platzierung des Eingabefeldes im Formular. Alternativ können Sie das Eingabefeld "MaintenancePeriod" anders benennen, müssen dies jedoch im weiteren Verlauf des Beispiels beachten. Für eine funktionierende Berechnung muss sichergestellt werden, dass nur Zahlen im Eingabefeld notiert werden können. Dies erfolgt durch die Angabe eines Regulären Ausdrucks (RegEx).
Navigieren Sie im Admin Modul zu
.Öffnen Sie die Assetklasse "Computer", um diese zu bearbeiten.
Alternativ können Sie eine andere Assetklasse wählen.
Fügen Sie in der Klassendefinition nachfolgenden Code ein.
Platzieren Sie den Code an gewünschter Stelle innerhalb der Klassendefinition. Die Platzierung im Code definiert die Platzierung des Eingabefeldes im Formular.
Alternativ können Sie das Eingabefeld MaintenancePeriod anders benennen, müssen dies jedoch im weiteren Verlauf des Beispiels beachten.
Für eine funktionierende Berechnung muss sichergestellt werden, dass nur Zahlen im Eingabefeld notiert werden können. Dies erfolgt durch die Angabe eines Regulären Ausdrucks (RegEx).
{ 'CountDefault' => 0, 'CountMax' => 1, 'CountMin' => 0, 'CustomerVisible' => 0, 'Input' => { 'Required' => 0, 'Type' => 'Text', 'RegEx' => '^[0-9]*$', 'RegExErrorMessage' => 'Please enter numeric values', }, 'Key' => 'MaintenancePeriod', 'Name' => 'MaintenancePeriod', 'Searchable' => 1 }
Abb.: Erweiterung Assetklasse "Computer" um das Eingabefeld MaintenancePeriod (am Ende der Klassendefinition)
Speichern Sie abschließend Ihrer Eingaben mit
.
Weiterführende Information zu Assetklassen und deren Modifikation finden Sie unter: Eine Klassendefinition bearbeiten
Pattern anlegen
Die Bezeichnung des Eingabefeldes (MaintenancePeriod) ist frei wählbar. Ggf. haben Sie eine andere Bezeichnung gewählt. Damit KIX diese Bezeichnung in den Oberflächen übersetzen kann, kann dafür ein Pattern im KIX hinterlegt werden. Dies erfolgt im Menü
. Klicken Sie dazu auf .
Abb.: Pattern für das Eingabefeld MaintenancePeriod
Job konfigurieren zum Auslesen des Wartungsintervalls
Wird am Ticket ein betroffenes Asset gewählt, soll dessen Wartungsintervall ausgelesen und am Ticket hinterlegt werden. Dies erfolgt automatisiert durch einen Job.
Der Job liest vom betroffenen Asset den Wert des Attributs MaintenancePeriod aus und setzt diesen Wert beim Speichern des Tickets ins Dynamische Feld DFMaintenancePeriod, welches zuvor in die Oberflächen integriert wurde.

Abb.: Wartungsintervall des betroffenen Assets im Ticket hinterlegen
Der Job wird im Menü
angelegt und konfiguriert. Konfigurieren Sie den Job wie folgt:Job Informationen
Typ: Ticket
Name und Kommentar: beliebig
Gültigkeit: gültig
Ausführungsplan
Zeitgesteuerte Ausführung: k. A.
Eventgesteuerte Ausführung: TicketDynamicFieldUpdate_AffectedAsset, TicketCreate
(optional weitere Events)
Filter: k. A.
Aktionen
1. Aktion: Asset Attribute abrufen
Assetbezug aus dynamischem Feld: AffectedAsset
Erzwingen: setzen Sie ein Häkchen, wenn der Wert bei Ausführung des Jobs stets aktualisiert werden soll (optional).
Attribut - Dynamisches Feld Mapping:
Attribut: MaintenancePeriod
Dynamisches Feld: DFMaintenancePeriod
Job konfigurieren zum Berechnen des nächsten Wartungstermins
Wird am Ticket das Datum der letzten Wartung angegeben, kann in Verbindung mit dem Wartungsintervall das Datum der nächsten Wartung errechnet werden. Dies erfolgt ebenfalls automatisiert durch einen Job.

Abb.: Berechnung des nächsten Wartungstermins
Der Job liest das am Ticket hinterlegte Datum der letzten Wartung aus und speichert dieses in der Variable "varCurrentMaintenance" (1. Aktion). Sofern für die letzte Wartung kein Datum angegeben ist, setzt der Job automatisch den aktuellen Zeitpunkt als Datum der letzten Wartung, damit eine Berechnung möglich ist (2. Aktion).
Des Weiteren liest der Job den Wartungsintervall des betroffenen Assets aus dem Dynamischen Feld "DFMaintenanceDateTime" aus und speichert diesen Wert in der Variable "varMaintenancePeriod". (3. Aktion). Ist der Wartungsintervall mit einem Wert belegt, kann die Berechnung durchgeführt werden (4. Aktion). Das Ergebnis der Berechnung wird ins Dynamische Feld "DFNextMaintenance" geschrieben und somit am Ticket bereitgestellt (Aktion 4.1)
Für die Berechnung wird folgende Formel verwendet:
${varCurrentMaintenance|DateUtil.bob|DateUtil.calc(+${varMaintenancePeriod}M)|DateUtil.unixTime|DateUtil.timeStamp}
Vom Datum der letzten Wartung wird mittels des Filters
DateUtil.bob
der Beginn des Businessdays (BOB) extrahiert (8:00 Uhr - je nach Kalender).Mittels des Filters
DateUtil.calc
wird dieser Wert mit der Anzahl Monate addiert.Die Anzahl der Monate entsprechen dem Wert des Wartungsintervalls, welcher in der Variable
${varMaintenancePeriod}
gespeichert ist.Somit entspricht der Ausdruck
(+$ {varMaintenancePeriod}M)
bspw. dem Ausdruck (+6M) , also 6 Monate.Die Filter
DateUtil.unixTime
undDateUtil.timeStamp
konvertieren das Ergebnis in einen Unix-/Zeitstempel, sodass das Datum der nächsten Wartung ins Dynamische Feld DFNextMaintenance geschrieben und am Ticket bereitgestellt werden kann.
Die Job-Konfiguration im Detail:
Job Informationen
Typ: Ticket
Name und Kommentar: beliebig
Gültigkeit: gültig
Ausführungsplan
Zeitgesteuerte Ausführung: k. A.
Eventgesteuerte Ausführung: TicketDynamicFieldUpdate_AffectedAsset, TicketDynamicFieldUpdate_DFMaintenanceDateTime
(optional weitere Events)
Filter: keiner
Aktionen:
1. Aktion: Set Variable
Variable: varCurrentMaintenance
Wert: <KIX_TICKET_DynamicField_DFMaintenanceDateTime_ObjectValue>;
2. Aktion: Bedingung
Wenn:
!defined ${varCurrentMaintenance}
Makro: Ticket
1. Aktion: Dynamisches Feld setzen
Dynamic Field Name: DFMaintenanceDateTime
Dynamic Field Value: <KIX_NOW>
3. Aktion: Set Variable
Variable: varMaintenancePeriod
Wert: <KIX_TICKET_DynamicField_DFMaintenancePeriod>
4. Aktion: Bedingung
Wenn:
defined ${varMaintenancePeriod}
Makro: Ticket
1. Aktion: Dynamisches Feld setzen
Dynamic Field Name: DFNextMaintenance
Dynamic Field Value:
${varCurrentMaintenance|DateUtil.bob| DateUtil.calc(+${varMaintenancePeriod}M)| DateUtil.unixTime|DateUtil.timeStamp}