Liste modifizieren / Hinzufügen
Mit der Operation "Hinzufügen" kann einer gegebenen Liste ein einzelner Eintrag hinzugefügt werden, der im Allgemeinen am Ende der Liste erscheint.
Konfiguration
Nach dem Hinzufügen einer Liste modifizieren-Ereignisaktion zu einem Workflow ist die Operation "Hinzufügen" bereits ausgewählt.
Die Wert-Konfiguration für die zu modifizierende Liste (links) muss zur Laufzeit eine aktualisierbare Liste liefern.
Wird auf eine Wert-Konfiguration für die zu modifizierende Liste (links) verzichtet, wird automatisch auf das Bezugsobjekt im Kontext der Liste modifizieren-Ereignisaktion zurückgegriffen.
Die Wert-Konfiguration (rechts) definiert den hinzuzufügenden Eintrag.
Wird auf eine Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) verzichtet, gilt als Standardwert "Kein Wert" ($null).
Eine explizite Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) kann allerdings trotzdem auf das Bezugsobjekt im Kontext der Liste modifizieren-Ereignisaktion zugreifen.
Beispiele
Einfache Anwendungsfälle: Liste mit simplen Werten
Die folgende Serie von Beispielen demonstriert unterschiedliche einfache Anwendungsfälle für das Hinzufügen von Einträgen zu einer Liste von simplen Werten (vom Typ String) mit der Liste modifizieren-Ereignisaktion.
Die Spalte "Ergebnis" zeigt das JSON-Abbild des resultierenden Werts für die in der Variable list gespeicherte Liste nach der sequenziellen Ausführung aller Konfigurationen bis zur jeweilige Tabellenzeile.
Konfiguration |
Beschreibung |
Ergebnis |
|
Die Wert-Konfiguration für die zu modifizierende Liste (links) erzeugt über den Erzeuge Instanz-Wertauflöser eine leere Liste und weist über den verketteten Wert als Variable speichern-Wertauflöser dieses Datenobjekt der Variablen list zu. ►WICHTIG◄ Die Initialisierung der Liste ist hier unbedingt erforderlich. Ein Variable-Wertauflöser mit dem Typ "Liste" eignet kann die Wertauflöserkette nicht ersetzen, da dieser nicht automatisch eine List-Objekt generiert. Als Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) dient ein Wertauflöser für statischen Text mit dem Textwert A. |
["A"] |
|
Als folgender Schritt wird zunächst eine Ausführen mit-Ereignisaktion verwendet, um die im vorherigen Schritt erzeugte Liste als temporäres Bezugsobjekt für den Aktionsblock zu definieren. Dies erledigt der Variable-Wertauflöser im Parameter Objekt-Wertauflöser indem er den Variablennamen list adressiert. ►HINWEIS◄ Die Einstellungen für den Typ und die Option Ist Liste von wurden hier manuell vorgenommen, um die willkürliche Konvention abzubilden, dass "unsere" Liste nur Textwerte enthalten soll. Daher wird für den Aktionsblock unterhalb der Datentyp String[] - also "String-Liste" - avisiert. Innerhalb der Liste modifizieren-Ereignisaktion erscheint dieser Typhinweis auch für die linke Wert-Konfiguration. Wir können also auf eine explizite Wert-Konfiguration für die zu modifizierende Liste verzichten, nachdem diese zur Laufzeit als Bezugsobjekt vorliegt. Als Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) dient wie im vorherigen Beispiel ein Wertauflöser für statischen Text mit dem Textwert B. ►ANMERKUNG◄ Die Liste modifizieren-Ereignisaktion fügt einer Liste neue Einträge grundsätzlich am Ende hinzu. |
["A","B"] |
|
Der nächste Schritt soll demonstrieren, dass eine als Bezugsobjekt vorliegende Liste für die Wert-Konfigurationen auf beiden Seiten der Liste modifizieren-Ereignisaktion als Eingabewert genutzt werden kann. Analog zum vorherigen Schritt bezieht sich eine Ausführen mit-Ereignisaktion auf die Variable list als temporäres Bezugsobjekt. Natürlich hätte man stattdessen auch den Aktionsblock aus dem vorherigen Schritt erweitern können. Innerhalb der Liste modifizieren-Ereignisaktion wird wie im vorherigen Schritt auf eine explizite Wert-Konfiguration für die zu modifizierende Liste (links) verzichtet, da diese als temporäres Bezugsobjekt vorliegt. Die Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) verwendet einen Listenwert-Wertauflöser, der mit Standardeinstellungen (Modus "Wert (vom Anfang)" und Offset 0) den ersten Eintrag aus der als Eingabewert bzw. Bezugsobjekt vorliegenden Liste zurückgibt. Im gegebenen Szenario liefert der Listenwert also den Textwert A, der der Liste list im ersten Schritt hinzugefügt wurde. Dieser Wert wird nun am Ende der Liste erneut hinzugefügt. |
["A","B","A"] |
|
Der abschließende Schritt demonstriert die besondere Interpretation bei einem Verzicht auf eine Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts): Analog zum vorherigen Schritt steht als temporäres Bezugsobjekt im Aktionsblock einer Ausführen mit-Ereignisaktion die bestehende Liste (via Variable list) zur Verfügung. Da wie oben auf eine Wert-Konfiguration für die zu modifizierende Liste (links) verzichtet wurde, wird diese Liste modifiziert. Im Unterschied zum vorherigen Schritte wurde nun ebenfalls auf die Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) verzichtet. Anders als bei der linken Wert-Konfiguration gilt rechts damit "Kein Wert" ($null) als hinzuzufügender Eintrag und nicht etwa das String-Abbild, der bis dahin aufgebauten Liste. |
["A","B","A",null] |
Besonderer Anwendungsfall: Eindeutige Liste
Im Allgemeinen handelt es sich bei "Listen" in Lobster Data Platform / Orchestration um Datenobjekte des Typs "Liste" (List), in denen Einträge beliebiger Typen beliebig "aneinandergereiht" werden können. Derselbe Eintrag kann dabei auch mehrfach vorkommen.
In besonderen Fällen kommt dagegen eine "Eindeutige Liste" (Set) zum Einsatz. Eine "Eindeutige Liste" lässt im Allgemeinen ebenfalls Einträge unterschiedlicher Typen zu, kann denselben Eintrag allerdings nicht mehrfach enthalten.
Dei Datenstruktur für Benutzer sieht z. B. das Feld "Firmen" (companies) für eine "Eindeutige Liste" von Long-Werten vor, die Referenzen auf die "ID" (id) von Firmen/Mandanten sind, die der Benutzer beim Login als Firma der Session heranziehen kann.
Im folgenden Beispiel soll mit Hilfe der Liste modifizieren-Ereignisaktion sichergestellt werden, dass die Liste der "Firmen" (companies) für ein gegebenes Benutzerkonto Referenzen auf die Firma der Session und eine eventuell von dieser abweichende Firma mit dem Firmentyp "Rechnungsempfänger" aus deren übergeordneter Hierarchie enthält.
Konfiguration:
Innerhalb eines Aktionsblocks, der das betreffende Benutzerkonto als Bezugsobjekt bereitstellt (z. B. eine Ausführen mit- oder Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion) werden zwei Instanzen der Liste modifizieren-Ereignisaktion wie rechts dargestellt konfiguriert:
|
|
Für das Laufzeitverhalten dieser Konfiguration sind folgende Szenarien denkbar:
Falls das Benutzerkonto noch nicht gespeichert wurde, sodass zu Beginn noch keine companies-Liste vorliegt, wird das Feld automatisch mit einer leeren "Eindeutigen Liste" initialisiert. Im Unterschied zum vorherigen Beispiel erübrigt sich der Einsatz des Erzeuge Instanz-Wertauflösers.
Falls die "ID" (id) der Firma der Session noch nicht in der companies-Liste enthalten ist, wird sie hinzugefügt.
Falls sich das Konto der Firma der Session per Listenfeld "Firmentypen" (types) auf den Firmentyp "Rechnungsempfänger" bezieht, ist die zweite Instanz der Liste modifizieren-Ereignisaktion wirkungslos, da die "ID" (id) der Firma der Session der companies-Liste ggf. bereits hinzugefügt wurde.
Anderenfalls wird in der übergeordneten Firmenhierarchie nach einer als "Rechnungsempfänger" qualifizierten Firma gesucht.
Falls eine entsprechende Firma gefunden wird und deren "ID" (id) noch nicht in der companies-Liste des Benutzers enthalten ist, wird sie hinzugefügt.
In allen anderen Fällen (kein "Rechnungsempfänger" auffindbar oder ermittelter "Rechnungsempfänger" bereits in der companies-Liste enthalten) ist die zweite Instanz der Liste modifizieren-Ereignisaktion wirkungslos,
Komplexerer Anwendungsfall: Typisiertes plurales Attribut hinzufügen
Wenn ein neues Benutzerkonto (s. Benutzer) erstellt wird, soll die Adresse der Firma der Session zu dessen Adresskontakten mit dem Kontakttyp "Location" (LOCATION) hinzugefügt werden.
Konfiguration:
In einer Ereignisbehandlung, die auf das Ereignis "Erstellen" (s. Allgemein (Ereignisse)) reagiert und per Typprüfung sicherstellt, dass eine Entität des Typs "Benutzer" (User) erstellt werden soll, wird eine Liste modifizieren-Ereignisaktion wie folgt konfiguriert:
Die Wert-Konfiguration für die zu modifizierende Liste (links) verwendet eine Wertauflöserkette:
Der Objekt-Feld-Wertauflöser greift zunächst auf das address-Feld des als Bezugsobjekt vorliegenden Benutzerkontos zu.
Der verkettete Typisierte plurale Attribute (Wertauflöser) bezieht sich per Auswahl für Typisiertes Attribut auf den Typ "Adresskontakt" und dessen Subtyp "Location" (LOCATION), der vorher in der Dynamischen Aufzählung Kontakttyp als benutzerdefinierter Wert angelegt wurde.
Die Wert-Konfiguration für den hinzuzufügenden Eintrag (rechts) verwendet den Erzeuge Instanz mit Werten-Wertauflöser, um einen Attributwert für den Typ "Adresskontakt" (AddressContact) zu erzeugen.
Die einzige Eigenschaft, die für diesen neuen Attributwert explizit gesetzt werden muss, ist das contactAddress-Feld, dem als Wert die Adresse der Firma der Session zugewiesen wird.
Da die zu modifizierende Liste (links) über die Konfiguration für den Typisierte plurale Attribute (Wertauflöser) den Subtyp "Location" (LOCATION) eindeutig qualifiziert, muss dieser im Adresskontakt-Wert rechts nicht explizit zugewiesen werden.
►HINWEIS◄ Falls beim Erstellen des Benutzerkontos mehrere Adresskontakte mit unterschiedlichem Kontakttyp zugewiesen werden sollen, könnte man den Alle Attribute eines Typs-Wertauflöser mit dem Typ "Adresskontakt" verwenden, um die zu modifizierende Liste zunächst ohne Bezug zu einem Subtyp zu definieren. Diese Liste kann dann von eienr Serie unterschiedlicher Liste modifizieren-Instanzen modifiziert werden, die allerdings für den jeweils hinzuzufügenden Eintrag eine explizite Zuweisung für das Feld "Kontakttyp" (contactType) beinhalten müssen.
►ANMERKUNG◄ In diesem Beispiel werden die Adressdaten der Firma der Session dem neuen Adresskontakt des erstellten Benutzers übergeben. Da es sich bei Adressen um Referenzierte Objekte handelt, verweisen das address-Feld der Firma und das contactAddress-Feld des Adresskontakts momentan auf dieselbe "Adresse"-Entität. Allerdings können die Adressdaten in beiden Kontexten jederzeit geändert werden, was jeweils eine Änderung der Referenz zu einer anderen "Adresse"-Entität zur Folge hätte. Es besteht keine dauerhafte Verknüpfung zwischen der Firmenadresse und dem Adresskontakt.