Skip to main content

Variablen

Sie können Variablen definieren, um bspw. die von Macro Actions zurück gelieferten Ergebniswerte darin zu speichern. Durch Aufruf dieser Ergebnisvariablen können Sie auf die darin gespeicherten Werte referenzieren und sie weiterverarbeiten.

Variablen finden in u. a. in Jobs, Berichtsdefinitionen und in den Pre- und Post Actions von Ticketaktionen Verwendung.

Datentypen

Variablen können verschiedenartige Werte aufnehmen. Beim Implizieren von Variablen ist es nicht erforderlich, den Datentyp explizit anzugeben. Er wird von der Macro Action bestimmt, in der die Variable initialisiert wird.

Ausnahme ist jedoch die Konfiguration von Berichtsdefinitionen. Für die aus den Parametern im SQL Statement entstehenden Variablen muss der Datentyp angegeben werden, damit die Werte korrekt verwendet werden. 

Folgende Datentypen sind möglich: 

Datentyp

Beschreibung

Hinweise

String

Alphanumerische Zeichen und Zeichenketten

Die Zeichen und Zeichenketten werden immer in Hochkommas eingeschlossen, damit sie als Text interpretiert werden, z. B.:

  • varText1 = "1"

  • varText2 = "Die Postleitzahl von Chemnitz lautet: 09113"

Berechnungen mit Variablen vom Datentyp string sind nicht möglich, da es sich hierbei um reine Textzeichen handelt.

Numeric

numerische Werte/Ziffern

Variablen vom Datentyp number sind Zahlenwerte, mit denen auch Berechnungen und Vergleiche möglich sind.

Bei Fließkommazahlen muss ein Punkt anstelle des Kommas verwendet werden.

  • varNR1 = 1

  • varNR2 = 3.14159265359

Object

Objekte

Variablen des Datentyps object können mehrere Objekte mit verschiedenen Parametern aufnehmen.

Durch Verwendung des Filters "jq" können Teile davon extrahiert und weiterverwendet werden (s. Variablenfilter).

Beispiel:

varTest = {
   "Objects":[
      {
         "id":"47441",
         "value":"Moers",
      },
      {
         "id":"47798",
         "value":"Krefeld"
      }
    ]
  }

Date

DateTime

Time

Datumswerte

Variablen vom Datentyp Date können Datumswerte - ohne Uhrzeitangaben -  im Format YYYY:MM:DD aufnehmen. Die Zeitangaben werden in Hochkommas gesetzt, z. B.:

  • varDatum = "2022:03:04"

Variablen vom Datentyp DateTime können Datumswerte inkl. Uhrzeitangaben im Format YYYY:MM:DD hh:mm aufnehmen. Die Zeitangaben werden Hochkommas gesetzt, z. B.:

  • varZeitpunkt = "2022:03:04 11:55"

Variablen vom Datentyp Time können Zeitwerte - ohne Datumswerte - im Format hh:mm:ss aufnehmen. Die Zeitangaben werden Hochkommas gesetzt, z. B.:

  • varZeit = "11:55:05"

Bitte beachten Sie:

Die Variablen werden nicht global, sondern stets lokal initialisiert. Ihr Geltungsbereich erstreckt sich nur auf das aktuelle Objekt (Job/Aktion/Berichtsdefinition). Es ist somit nicht möglich, eine in Job A angelegte Variable in Job B weiterzuverarbeiten.

Initialisieren von Variablen

Eine Variable wird durch Angabe ihres Variablenbezeichners initialisiert, bspw. in den Ergebnisbezeichnungen einer Macro Action. 

Die Variablenbezeichner können Sie frei vergeben. Sie dürfen jedoch keine Umlaute, Sonderzeichen oder Leerzeichen enthalten. Erlaubt sind nur Groß- und Kleinbuchstaben sowie Ziffern, Minus-Zeichen (-) oder Unterstrich (_).

Entwickeln Sie eine eigene, einheitliche Namenskonvention zur Benennung der Variablen (z. B. varTicketIDTechnik, varArtikelIDSupport), um den Überblick zu behalten.

variablen-initialisieren.png

Abb.: Initialisieren von Variablen (Beispiel)

Referenzieren von Variablen

Um auf die in einer Variablen gespeicherten Werte zuzugreifen, wird mit ${Variablenbezeichner} auf die Variable referenziert. Lautet der Variablenbezeichner bspw. varTicketIDTechnik, so wird die Variable mit ${varTicketIDTechnik} aufgerufen und ihre Werte verarbeitet. 

Variablen können Sie verwenden, wo immer Sie deren Werte benötigen. Beispielsweise im Titel und/oder Body eines Artikels, in nachfolgenden Macro Actions (z. B. für Berechnungen) oder um den Wert in ein Dynamisches Feld zu setzen. Voraussetzung ist jedoch, dass die Variable vor ihrer Verwendung initialisiert wurde. Da die Macro Actions eines Jobs der Reihe nach - von oben nach unten - abgearbeitet werden, muss die Variable in einer der vorangegangenen Macro Actions bereits initialisiert worden sein.

variablen-referenzieren.png

Abb.: Setzen des in einer Variable gespeicherten Wertes in ein Dynamisches Feld

Anwendungsbeispiel: Berichte automatisiert erstellen

Arrays

Variablen können mehrere Werte aufnehmen und somit ein Array bilden. Dies kann bspw. genutzt werden, wenn in den zu verarbeitenden Daten ein nummeriertes Attribut enthalten ist (Ticket1, Ticket2, ...) und alle Einträge in einem Loop verarbeitet werden sollen. 

Die einzelnen Array-Werte werden durch Komma getrennt:

${Variable1, Variable2}

Ist eine der aufgezählten Variablen bereits ein Array, so werden die einzelnen Werte zusammengezogen:

Variable1 = ['Test1.1','Test1.2']
Variable2 = ['Test2.1','Test2.2']
${Variable1, Variable2} = ['Test1.1','Test1.2','Test2.1','Test2.2']

Repräsentation komplexer Objekte

Variablen können auch komplexe Objekte, Listen oder Mischformen repräsentieren. Der Zugriff auf die Eigenschaften des ResultObjekts erfolgt mittels Punkt (.). 

Ist die Eigenschaft ein Array, so können Sie mittels :<index> auf ein Element des Arrays zugreifen. 

Beispiel 14. Beispiel für die Ausgabedatei einer Berichtserstellung

Die Variable varReport wird in der Aktion Bericht erstellen angelegt und mittels Aktion Text entnehmen der Wert extrahiert.

variablen-objekte.png
  • Zugriff auf die Eigenschaften der Variable: ${varReport.Results:0.Content}

    • Die Variable varReport hat eine Eigenschaft Results. Results ist ein Array, welches die Berichte in den jeweiligen Ergebnisformaten (HTML, CSV, JSON, XLSX, etc.) beinhaltet.

      • Mittels Zugriff auf :0 wird auf das erste Ergebnisformat referenziert (hier: HTML)

        • Vom ersten Ergebnisformat wird die Eigenschaft Content verwendet. Dies bezieht sich auf den gesamten Dateiinhalt (hier das gesamte HTML-Dokument des generierten Reports).



Anwendungsbeispiel: Berichte automatisiert erstellen

Sondervariablen

Die Variablen RootObjectID und ObjectID verweisen auf auslösende Objekte. Sie können wie Platzhalter verwendet werden, um bspw. Informationen zum betroffenen Asset im Ticket anzugeben. Anwendungsfälle können sein:

  • Läuft für ein Software-Asset die Lizenz ab, erstellt ein Job ein Ticket, in dem die zu verlängernde Lizenz ersichtlich ist.

  • Das durch einen Job generierte Wartungsticket enthält bereits verschiedene Attribute des zu wartenden Assets im Artikeltext (z. B. Name, Standort, Adresse).

Variable

Beschreibung

RootObjectID

ID des Objekts, welche den Job initial ausgelöst (getriggert) hat, z. B.:

  • das auslösende Ticket an einem eventbasierten Job

    • Beispiel:  Wird ein Job ausgelöst, sobald ein neues Ticket erstellt wird (Event: "Ticket Create"), so entspricht RootObjectID der ID dieses Tickets.

  • das Objekt für das der Job ausgeführt wird

    • Beispiel: Ist in einem (zeitbasierten oder manuell ausgelösten) Job ein Filter hinterlegt, so entspricht RootObjectID der ID des Objekts, auf das die Filterbedingungen zutreffen. Das kann je nach Jobtyp ein Asset oder ein Ticket sein. 

Hinweis: Die Art des Objekts (Asset, Ticket) - und damit die Art der zurückgelieferten RootObjectID - ist abhängig vom gewählten Jobtyp. Er bestimmt anhand der gewählten Filter, ob und nach welcher Art von Objekt gesucht wird. Die Jobtypen Reporting und Synchronisation stellen jedoch keine Filter zur Verfügung, sodass auch kein auslösendes Objekt ermittelt werden kann. RootObjectID ist daher leer.

ObjectID

ID des aktuell verwendeten Objekts

  • entspricht bei einem nicht verschachtelten Job der RootObjectID.

  • entspricht bei einem verschachtelten Job der ID des jeweiligen Sub-Macros, z. B. bei "Macro ausführen" der angegebenen ObjectID; bei "Loop" dem Wert der Loop-Variable.

Anwendungsbeispiel: Periodischer Job "Lizenzverlängerung"

Variablenfilter

Sie können Filter auf Variablen anwenden, um auf deren Teilwerte zuzugreifen. Die Variable muss dazu bereits einen Wert besitzen. Der Wert kann bspw. einem Objekt, einem Platzhalter oder dem Ergebnis einer vorangehenden Macro Action entstammen. Die Groß-/Kleinschreibung der Filter ist unerheblich. Das Backend wandelt die Angaben vor der Verarbeitung in Kleinbuchstaben um.

Variablenfilter werden durch den Namen der zu verarbeitenden Variable, gefolgt von einem senkrechten Strich " | ", angegeben.

  • Syntax: ${VariablenName|VariablenFilter}

  • Beispiel: ${varTest|jq(.Objects[]::select(.id == "47441").value)}

Mehrere Variablenfilter können durch mehrfache Angabe von " | " voneinander getrennt angegeben werden.

  • Syntax: ${VariablenName|VariablenFilter1|VariablenFilter2|VariablenFilter3}

  • Beispiel: ${varStart|DateUtil.bob|DateUtil.eob|DateUtil.unixTime}

Tipp

Treten bei der Verwendung eines Variablenfilters Fehler auf, wird im KIX Log ein konkreter Hinweis auf diesen Fehler notiert. Zur Analyse können Sie diese im Menü System > Logs einsehen .

Durch Verwendung des Filters jq kann der extrahierte Teil als JSON weiterverarbeitet werden. Er ersetzt den ehemaligen Filter FromJSON

Enthält z. B. eine Variable als Wert mehrere Objekte mit Ortsnamen und dessen Geopositionsdaten, so können Sie mittels des jq-Filters gezielt die Orte oder die einzelnen Geopositionsdaten als JSON String extrahieren und anschließend weiterverarbeiten.

Wichtig

Innerhalb der zu ersetzenden Variable dürfen sich keine geschweiften Klammern befinden. Es sei denn, sie gehören zu einer ersetzenden inneren Variable ODER sie kommen strukturiert paarweise vor. Anderenfalls kann die Variable nicht korrekt ersetzt werden.

Möglich:

  • ${JSONString|jq( [.[] :: select(.id=="${SubTaskID}").value="OK"]) }

  • ${JSONString|jq(map(. :: select(.type=="person")) :: map({title: (.title)}))}

Nicht möglich:

  • ${JSONString|jq(map(. :: select(.type=="test")) :: map({smiley: ":-}"}))}

Wichtig: Vor und nach dem :: müssen Leerzeichen sein.

Beispiel:Werte eines Objekts

{
   "Objects": [
      {
         "id": "47441",
         "value": "Moers",
         "lattitude": 51.4463,
         "longitude": 6.6396
      },
      {
         "id": "47798",
         "value": "Krefeld",
         "lattitude": 51.3311,
         "longitude": 6.5616
      }
   ]
}
Variablenersetzung-FromJSON.png

Abb.: Beispiel Verwendung von Variablenfilter

Das Beispiel im Bild initialisiert zunächst eine Variable Test (1. Action). In dieser sind 2 Objekte definiert:

{"Objects":[{"id":"47441","value":"Moers","lattitude":51.4463,"longitude":6.6396},{"id":"47798","value":"Krefeld","lattitude":51.3311,"longitude":6.5616}]}
  1. Objekt mit folgenden Werten:

    • ID: 47441

    • Wert: Moers

    • sowie die unter "lattitude" und "longitude" angegebenen Geopositionsdaten

  2. Objekt mit folgenden Werten:

    • ID: 47798 

    • Wert: Krefeld

    • sowie die unter "lattitude" und "longitude" angegebenen Geopositionsdaten

Mit der 2. Aktion wird ein neues Ticket angelegt. Sowohl in dessen Titel als auch im Artikeltext werden die Variablenwerte ausgegeben. Dazu werden unter Verwendung des Filters jq Teilwerte der Objekte extrahiert und ausgegeben. Durch Angabe von |jq wird dem auswertenden Code mitgeteilt, dass der Wert von Test als JSON betrachtet und somit als Liste mit Objekten verarbeitet werden soll.

Artikeltext:

Test: ${Test|jq(.Objects[]::select(.id=="47441").value)} 
Test2: ${Test|jq(.Objects[]::select(.id == "47798").value)}

Titel:

Test: ${Test|jq(.Objects[]::select(.id == "47441").value)} // Test2: ${Test|jq(.Objects[]::select(.id=="47798").value)}

Hinweis

Innerhalb von jq müssen die Pipes ( | ) durch doppelte Doppelpunkte ( :: ) ersetzt werden.

Bei Ausführung der Aktion werden die angegebenen IDs selektiert und deren unter value definierte Werte im Titel und im Artikeltext des neuen Tickets ausgegeben.

Im Ergebnis entsteht folgendes Ticket:

Variablenersetzung-FromJSON-Ergebnis.png

Abb.: Das resultierende Ticket

Weiterführende Infos finden Sie bspw. unter:

Der Variablenfilter XMLUtil.FromXML ermöglicht die Verwendung von XML-Strukturen als Eingabewerte für Macro Actions (z. B. für XML-Transformation oder Macro Actions mit strukturierten Eingangsparametern) . Voraussetzung ist ein wohlgeformtes XML.

Damit kann bspw. der über die Macro Action "Webhook extended" empfangene XML-String oder der Inhalt einer XML-Datei im E-Mail-Anhang in einer Macro Action weiterverarbeitet werden.

Syntax-Beispiel: ${VariablenName|XMLUtil.FromXML}

Mit dem Filter "DateUtil" können Datums-/Zeit-Angaben extrahiert werden, um sie für automatisierte Berechnungen zu verwenden. Basieren die Ausgangswerte auf Dynamischen Feldern vom Typ Date oder DateTime, können bspw. Termine für Wiedervorlagen oder für die nächste Regelprüfung eines Assets automatisiert berechnet werden. Ein Beispiel dazu finden Sie unter Zeitberechnung mit Macro Actions.

Für die Berechnungen unterstützt der Filter die in der nachfolgenden Tabelle aufgeführten Parameter. Erhalten die Funktionen einen ungültigen Wert (falsches Format oder Fehleingaben), bleibt der Eingabewert unverändert. 

Syntax-Beispiel: ${VariablenName|DateUtil.bob}

Parameter

Beschreibung

Hinweise

BOB

Berechnet anhand des Eingabewertes den "Begin of Businessday"

  • Initial: 8:00 Uhr (basierend auf dem Standardkalender im SysConfig-Schlüssel "TimeWorkingHours")

  • Aktzeptiert als Eingabewert Timestamp und UnixTime

  • Ist das Datum kein Arbeitstag, wird der nächste Werktag genommen

  • Ergebnis ist ein TimeStamp

EOB

Berechnet anhand des Eingabewertes den "End of Businessday"

  • Initial: 21:00 Uhr (basierend auf dem Standardkalender im SysConfig-Schlüssel "TimeWorkingHours")

  • Aktzeptiert als Eingabewert Timestamp und UnixTime

  • Ist das Datum kein Arbeitstag, wird der nächste Werktag genommen

  • Ergebnis ist ein TimeStamp

UnixTime

Gibt den eingegeben TimeStamp als UnixTime (Sekundenanzahl) zurück

UnixTime bedeutet: Anzahl der Sekunden seit Epochenbeginn (z. B.: 1653388794)

Der Epochenbeginn ist je nach Betriebssystem der 1. Januar 1970, 00:00 Uhr UTC

(s. auch https://de.wikipedia.org/wiki/Unixzeit)

TimeStamp

Gibt die eingegebene UnixTime als TimeStamp zurück 

TimeStamp bedeutet: Datum/Zeit im Format: YYYY-MM-DD hh:mm:ss

(z. B. "2022-04-21 12:00:00")

Calc

Berechnet anhand des Eingabewertes ein neues Datum bzw. eine neue Zeit

  • Beispiel:

    ${varDF1|DateUtil.bob|DateUtil.calc(+1Y -1M +1w -5d +2h)}

  • Die Angabe der Vorzeichen (+ oder -) ist Pflicht!

    Ohne Vorzeichen wird der Wert ignoriert.

    • Richtig: +1d

    • Falsch: 1d

  • Es können mehrere Angaben (mit Leerzeichen dazwischen) gemacht werden.

    z. B.: +1d -4m +2Y

  • Als Zeiteinheiten sind möglich:

    • Y - Jahr

    • M - Monat

    • w - Woche

    • d - Tag

    • h - Stunde

    • m - Minute

    • s - Sekunde

    • ohne Einheit wird "s - Sekunde" angenommen

Platzhalter für Systemzeiten

Für die Ermittlung von Zeitpunkten können Sie nachfolgende KIX-Platzhalter verwenden. Die Platzhalter sind aktuell nur im Backend verfügbar und dienen dem Auslesen der Systemzeiten. Sie können nicht vom Frontend z. B. in Textbausteinen verwendet werden. 

Die von den Platzhaltern gelieferten Werte müssen zuvor in eine Variable geschrieben werden, um damit anschließend rechnen zu können. 

VariablenFilter_Platzhalter.png

Platzhalter

Beschreibung

Beispiel

KIX_NOW

liefert den aktuellen (lokalen) Zeitpunkt als TimeStamp

2022-05-30 13:28:08

KIX_NOW_DateTime

liefert vom Zeitstempel das aktuelle (lokale) Datum und die Zeit (analog KIX_NOW)

2022-05-30 13:28:08

KIX_NOW_Date

liefert vom Zeitstempel nur das aktuelle (lokale) Datum 

2022-05-30

KIX_NOW_Time

liefert vom Zeitstempel nur die aktuelle (lokale) Zeit

13:28:08

Der Variablenfilter FromBase64 liefert in einer Macro Action den Inhalt einer Base64 codierten Variable decodiert zurück.

Beispiel: Ein Drittsystem liefert ein PDF in Form eines Base64-Strings. Der Filter decodiert den Base64-String, sodass daraus wiederum ein PDF generiert wird. Das PDF kann danach bspw. als Anhang an einem Artikel gespeichert werden.

Syntax-Beispiel: ${VariablenName|FromBase64}

Der Variablenfilter ToBase64 in einer Macro Action codiert den Inhalt einer Variable in einen Base64-String. Es ist damit möglich, bspw. Artikelanhänge in Binärform in Drittsysteme (z. B. DMS "D3") zu übertragen. 

Syntax-Beispiel: ${VariablenName|ToBase64}