Verwenden von Datenfeldern in Skripten
Zugriff auf Datenfelder
Die grundsätzlichen Methoden, um auf Datenfelder zuzugreifen, sind für Vorgänge, Kontakte und Ressourcen gleich.
Vorgänge
Für die Arbeit mit Vorgangsfeldern benötigen Sie vier Methoden der Klasse Ticket:
-
Daten abrufen:
ticket.get("<group name>.<field name>")
-
Daten in ein Feld schreiben:
ticket.set("<group name>.<field name>", <value>)
-
Wert zu einem Feld hinzufügen (eine neue Zeile zu einem Listenfeld hinzufügen oder mit Daten rechnen):
ticket.add("<group name>.<field name>", <value>)
-
Feldwert entfernen (den Wert auf null setzen):
ticket.remove("<group name>.<field name>")
Kontakte
Für die Arbeit mit Kontaktfeldern benötigen Sie vier Methoden der Klasse Unit:
-
Daten abrufen:
unit.get("<group name>.<field name>")
-
Daten in ein Feld schreiben:
unit.set("<group name>.<field name>", <value>)
-
Wert zu einem Feld hinzufügen (eine neue Zeile in einem Listenfeld hinzufügen oder mit Daten rechnen):
unit.add("<group name>.<field name>", <value>)
-
Feldwert entfernen (den Wert auf null setzen):
unit.remove("<group name>.<field name>")
Alternativ können Sie den Namen der Feldgruppe und des Feldes durch einen Doppelpunkt trennen.
Bei der Arbeit mit Kontaktdaten, benötigen Sie auch Zugriff auf die verschiedenen Kontaktobjekte.
-
Hauptkontakt eines Vorgangs abrufen:
Unit mainContact = ticket.mainContact
-
Firma einer Person abrufen:
Unit company = mainContact.get("company()");
-
Firma einer Person setzen:
mainContact.set("company()", company);
-
Personen, die zu einer Firma gehören, abrufen:
List contacts = company.get("contacts()");
-
Vorgänge eines Kontakts abrufen:
List tickets = company.get("tickets()");
List tickets = mainContact.get("tickets()");
-
Namen des Kontaktdatenmodells, das für den Kontakt verwendet wird, abrufen:
mainContact.customerDefinition.name
-
Typ eines Kontakts (Person oder Firma) und den Namen der Definition abrufen:
mainContact.definition.name
mainContact.definition.type
Ressourcen
Für die Arbeit mit Ressourcenfeldern benötigen Sie vier Methoden der Klasse Resource:
-
Daten abrufen:
resource.get("<group name>.<field name>")
-
Daten in ein Feld schreiben:
resource.set("<group name>.<field name>", <value>)
-
Wert zu einem Feld hinzufügen (eine neue Zeile zu einem Listenfeld hinzufügen oder mit Daten rechnen):
resource.add("<group name>.<field name>", <value>)
-
Feldwert entfernen (den Wert auf null setzen):
resource.remove("<group name>.<field name>")
Der Inhalt eines Datenfelds hängt vom Datentyp ab und ist entweder ein Wert oder ein Objekt. Details zum Umgang mit den verschiedenen Datentypen finden Sie im Abschnitt Arbeiten mit verschiedenen Datentypen.
Arbeiten mit verschiedenen Datentypen
Der folgende Abschnitt zeigt Beispiele für die Arbeit mit Datenfeldern verschiedener Datentypen. Die Beispiele beziehen sich auf Vorgangsfelder, gelten aber auch für Kontakt- und Ressourcenfelder.
Einfache Datentypen
Einfache Datentypen sind Datenfelder, die einen einzelnen Wert oder ein einzelnes Objekt enthalten. Die folgende Liste zeigt die verfügbaren einfachen Datentypen mit den Klassen ihrer Werte:
- autocomplete (Autovervollständigung): AutocompleteValue, siehe Skripte des Typs Text-Autovervollständigung
- boolean (Ja/Nein): java.lang.Boolean
- date (Datum): java.sql.Timestamp
- enum (Sortierte Liste): EnumValue, siehe Abrufen und Setzen von Enum-Werten
- fixed-point number (Festkommazahl): java.math.BigDecimal
- MLA (Baum sortierter Listen): EnumValue, siehe Abrufen von Werten und Pfaden hierarchischer Listen
- number (Zahl): java.lang.Long
- string (Text): java.lang.String
Abrufen und Setzen von einfachen Feldwerten
Das folgende Beispiel zeigt, wie der Boolean-Wert eines Vorgangsfeldes abgerufen werden kann, um ihn in einem Entscheidungsskript zu verwenden:
boolean vip_info = ticket.get("am_fields.vip")
if(vip_info == true){
return true
}
else {
return false
}
Code-Beispiel 24: Entscheidungsskript, bei dem ein Boolean-Wert überprüft wird
Dasselbe Verhalten kann erreicht werden, indem Sie den Wert direkt zurückgeben:
return ticket.get("am_fields.vip")
Code-Beispiel 25: Entscheidungsskript, bei dem ein Boolean-Wert überprüft wird, Kurzversion
Das folgende Beispiel zeigt, wie ein Wert in einem Vorgangsfeld gesetzt werden kann. Da das Feld den Datentyp date hat, benötigt es ein Objekt der Klasse Date, das direkt in der Anweisung erstellt werden kann.
ticket.set("fields.reaction_time", new Date());
Code-Beispiel 26: Setzen eines Vorgangsfeldwertes für ein Feld des Typs date
Wenn Sie mit Feldern des Typs number oder date arbeiten, können Sie sogar bequem mit den Feldwerten rechnen, siehe folgendes Beispiel.
ticket.add("fields.orders_number", 1)
Code-Beispiel 27: Eins zur Anzahl der Bestellungen addieren
Suchen nach Feldwerten
Sie können mit den Methoden getByCriteria aus den entsprechenden Services (ticketService, unitService und resourceService) über die Werte in Datenfeldern nach Vorgängen, Kontakten und Ressourcen suchen.
def tickets = ticketService.getByCriteria("HelpDesk_1st_Level", [
"helpdesk_standard:priority": "hoch"
])
Code-Beispiel 28: Suchen nach allen Vorgänge der Queue „Helpdesk 1st Level“ mit der Priorität „hoch“
ticketService.getByCriteria("HelpDesk_1st_Level", [
"helpdesk_standard:priority": "hoch"
], { ticketCriteria ->
ticketCriteria.setStatus(TicketCriteria.Status.OPEN)
})
Code-Beispiel 29: Suchen nach allen offenen Vorgänge der Queue „Helpdesk 1st Level“ mit der Priorität „hoch“
Abrufen und Setzen von Enum-Werten
Ein Feld des Typs ENUM ist ein Feld, in dem der Wert einer von mehreren vordefinierten Listenwerten ist, zum Beispiel von einer Liste mit Prioritäten. Sie können zum Abrufen des Wertes eines Enum-Feldes die gleiche Syntax verwenden wie für einfache Datentypen. Die Methode get liefert ein Objekt der Klasse EnumValue. Verwenden Sie die Methode getName(), oder .name in Groovy, um den technischen Namen des Wertes abzurufen.
def prio = ticket.get("helpdesk_standard.priority")
log.info 'Priority is now ' + prio.getName()
Code-Beispiel 30: Abrufen eines Enum-Wertes für ein Vorgangsfeld
Wenn Sie den lokalisierten Wert eines Enum-Feldes abrufen möchten, müssen Sie LocalizationService verwenden.
def my_enum_field = ticket.get("helpdesk_standard.priority")
def my_enum_field_localized = localizationService.getLocalizedProperty(EnumValue.class, "name", my_enum_field.id, engineerService.getCurrentLocale())
Code-Beispiel 31: Abrufen eines lokalisierten Enum-Wertes
Beim Setzen eines Enum-Wertes muss der zweite Parameter der technische Name eines vorhandenen Enum-Wertes des Enums, das vom Vorgangsfeld referenziert wird, sein.
ticket.set("helpdesk_standard.priority", "URGENT");
Code-Beispiel 32: Setzen eines Enum-Wertes
Abrufen von Werten und Pfaden hierarchischer Listen
Hierarchische Listen werden bezüglich des Abrufens und Setzens der Werte wie normale Enum-Felder behandelt.
Die folgenden Beispiele zeigen die grundlegenden Methoden:
-
Wert einer hierarchische Liste abrufen:
def myEnumValueName = ticket.get("group name.field name").name
-
Wert einer hierarchische Liste setzen:
EnumValue enumValue = enumService.getValueByName("enum name","value name")
ticket.set("group name.field name", enumValue)
Listen und Tabellen
Listen und Tabellen sind „Container“ für andere Datenfelder. Ein Datenfeld des Typs list enthält entweder ein Feld eines einfachen Datentyps oder ein Feld des Typs struct, das aus mehreren Feldern mit einfachen Datentypen besteht. Ein Listenfeld kann mehrere Werte enthalten, wobei es für jeden Wert eine Zeile gibt.
Listen
Jede Zeile einer Liste enthält einen Wert eines einfachen Datentyps. Im folgenden Beispiel ist es ein Vorgangsfeld des Typs date, das den Parameter Gehört zu hat, der auf die Liste zeigt.
-
Alle Werte der Liste abrufen:
def convs = ticket.get("conversation_data.conversation_list").each() {
conv ->
log.info "NEXT DATE is :" + conv
}
-
Wert an einer bestimmten Listenposition anhand seines Indexes abrufen:
def mydate = ticket.get("conversation_data.conversation_list[1]")
-
Neue Zeile zu einer Liste hinzufügen:
ticket.add("conversation_data.conversation_list", date)
-
Bestimmten Wert der Liste anhand des Indexes der Listenposition ersetzen:
ticket.set("conversation_data.conversation_list[last]", date)
Tabellen (Struct-Liste)
Die Datenstruktur Struct-Liste bildet die technische Grundlage für eine Tabellenstruktur mit mehreren Spalten. Die Liste ist das übergeordnete Objekt, das Zeilen enthält. Jede Zeile ist eine Instanz eines struct. Das struct enthält so viele Vorgangsfelder (Tabellenspalten) wie erforderlich.
Um die Daten aus einer Struct-Liste abzurufen, arbeiten Sie mit einer Iteration über die Zeilen. Im folgenden Beispiel arbeiten wir mit einer Tabelle, in der ...
- das Vorgangsfeld orders_list die Liste darstellt.
- sich das Vorgangsfeld orders_list innerhalb der Vorgangsfeldgruppe order_data befindet.
- der Iterator str das struct darstellt.
- das struct drei Felder hat:
- orders_hardware
ist der Artikel, der bestellt werden soll (enum) - orders_contact
ist die Kontaktperson (string) - orders_number
ist die Anzahl der Artikel, die bestellt werden sollen (integer)
- orders_hardware
-
Daten einer Struct-List durch Iteration über die Liste abrufen:
def structs = ticket.get("order_data.orders_list").each() { str ->
log.info("Hardware is " + str.orders_hardware.getName())
log.info("Contact is " + str.orders_contact)
log.info("Number is " + str.orders_number)
}
-
Neue Zeile durch Erstellen eines neuen struct hinzufügen und die benötigten Werte im struct setzen:
ticket.add("order_data.orders_list", new Struct()
.set("orders_hardware", newhardware)
.set("orders_contact", newcontact)
.set("orders_number",newnumber)
-
Neuen Wert in einer bestimmten Tabellenzeile über den Index ihrer Position in der Liste setzen:
ticket.set("order_data.orders_list[0].contact", "John");
-
Zeile aus der Tabelle durch Setzen der entsprechenden Listenposition auf null entfernen:
ticket.set("order_data.orders_list[last]", null);