Skip to main content

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).

Zeitberechnung_Ticket.png

Abb.: Angaben zum Wartungsintervall im Ticket

Folgende Schritte sind dazu erforderlich:

  1. Anlegen von 3 Dynamischen Feldern (Datum der letzten Wartung, Wartungsintervall, Datum der nächsten Wartung)

  2. Einbinden der Dynamischen Felder in die Dialoge Neues Ticket und Ticket bearbeiten.

  3. Erweiterung der Asset-Klassendefinition um das Attribut (Formularfeld) Wartungsintervall|MaintenancePeriod.

  4. Optional: Hinterlegen eines Pattern für das neue Eingabefeld

  5. Job-Konfiguration zum Auslesen des Wartungsintervalls

  6. 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ü System > Dynamische Felder 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.

  1. Navigieren Sie dazu im Admin Modul ins Menü Workflow > Vorlagen und öffnen Sie die Vorlage Default - New Ticket Template zur Bearbeitung.

  2. Ergänzen Sie zuvor angelegten Dynamischen Felder in der Vorlage (s. auch Eine Vorlage konfigurieren)

  3. Navigieren Sie im Explorer zu Workflow >Aktionen.

  4. Öffnen Sie die Aktion Ticket Edit zur Bearbeitung.

  5. Ergänzen Sie auf der Seite Eingabefelder die zuvor angelegten 3 Dynamischen Felder.

Zeitberechnung_Vorlage.png

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.

Zeitberechnung_Assetklasse.png

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).

  1. Navigieren Sie im Admin Modul zu Assets > Asset Klassen.

  2. Öffnen Sie die Assetklasse "Computer", um diese zu bearbeiten.

    Alternativ können Sie eine andere Assetklasse wählen.

  3. 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
    }
    Zeitberechnung_Klassendefinition.png

    Abb.: Erweiterung Assetklasse "Computer" um das Eingabefeld MaintenancePeriod (am Ende der Klassendefinition)

  4. Speichern Sie abschließend Ihrer Eingaben mit Speichern.

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ü Internationalisierung > Übersetzungen. Klicken Sie dazu auf Neues Pattern.

Zeitberechnung_Pattern.png

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.

Zeitberechnung_Job-Asset_abrufen.png

Abb.: Wartungsintervall des betroffenen Assets im Ticket hinterlegen

Der Job wird im Menü Automatisierung > Jobs 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.

Zeitberechnung_Job-Berechnung.png

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 und DateUtil.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}