Setze Wert

Ereignisaktion - Kurzfassung

Zweck: Setzt einen Wert in ein Objekt-Feld oder eine Variable.


Die Ereignisaktion Setze Wert setzt einen Wert in ein Objekt-Feld oder eine Variable.

images/download/attachments/62864945/image2021-3-17_13-58-56-version-1-modificationdate-1615985937811-api-v2.png

Auf beiden Seiten der "Wertzuweisung" kann je ein Wertauflöser für das Ziel und die Quelle der Wertzuweisung konfiguriert werden.

Die Pfeilrichtung des Symbols zwischen den beiden Werten verdeutlicht die Beziehung zwischen Quelle (rechts) und Ziel (links).

WICHTIG

  1. Eine Wertzuweisung findet nur statt, wenn das konfigurierte Ziel eine Wertzuweisung überhaupt verarbeiten kann und sofern der Datentyp zwischen Quelle und Ziel übereinstimmt oder konvertierbar ist. Falls z. B. ein statischer Wert (s. Statische Werte) oder "kein Wert" als Ziel definiert ist, ist die Ereignisaktion in Bezug auf das Ziel wirkungslos. Im Rahmen von Tests ist eventuell eine Fehlermeldung im "Log" nachzulesen (z. B. eine UnsupportedOperationException), allerdings führen solche Unstimmigkeiten im Fall der Wert setzen-Ereignisaktion in der Regel nicht zu einem Abbruch der Ereignisbehandlung (mit Rollback). Schlägt eine Wertzuweisung fehl, behält das Ziel seinen Wert schlicht unverändert bei.

  2. Definiert ein Variable-Wertauflöser in einer Setze Wert-Ereignisaktion die Quelle, kann der Parameter "Typ" (im Variable-Wertauflöser) verwendet werden, um die Daten "typsicher" aus der Variablen zu lesen. Dabei greifen neben einfachen Konvertierungen für simple Werte (z. B. zwischen den Typen String und Long) auch spezifische Mechanismen (s. Eingabeobjekt (Typsicher)) zum "Auflösen" komplexer Objekte ausgehend von einfachen Werten (Dynamischer Aufzählungswert via name als String-Wert, Entität eines konkreten Typs via id als Long-Wert).

  3. Definiert ein Variable-Wertauflöser in einer Setze Wert-Ereignisaktion das Ziel, kann der Parameter "Typ" (im Variable-Wertauflöser) verwendet werden, um die aus der Quelle gelesenen Daten "typsicher" ins Ziel zu schreiben. Dabei greifen ausschließlich einfache Konvertierungen für simple Werte (z. B. zwischen den Typen String und Long), aber nicht die unter (2) genannten spezifischen Mechanismen.

  4. Beim schreibenden oder lesenden Zugriff auf Variablen ist zu beachten, dass diese immer nur eine Referenz auf ein Objekt verkörpern, wenn ihnen nicht ein simpler Wert (z. B. eine Zeichenfolge oder ein Zahlenwert) zugewiesen wird. Setze Wert überträgt, wenn Quelle und Ziel zwei unterschiedliche Variablen sind, also nur die Referenz, sofern der Wert der Quelle ein Objekt und nicht ein simpler Wert ist.

Die folgenden Beispiele sollen die praktische Bedeutung dieser wichtigen Aspekte verdeutlichen.

Beispiel

Als Beispiel wird hier die Verwendung einer Reihe von Setze Wert-Ereignisaktionen erklärt, die insgesamt eine Ereignisbehandlung mit dem folgenden Ziel ergeben soll:

Aufgabenstellung:

images/download/attachments/62864945/image2021-3-19_17-5-38-version-1-modificationdate-1616169940306-api-v2.png

  • Es existieren zwei Firmen (mit den IDs 2101 und 4101), denen bisher die oben gezeigten "Firmentypen" (s. Firmentyp) zugeordnet sind.

  • Die Firmentypen der Firma "Vortex Inc." (2101) sollen durch die Ereignisbehandlung auf die bisher nur als "Spediteur" klassifizierten Firma "fast-or-furious Ltd." übertragen werden und zwar zusätzlich zum aktuellen Firmentyp ("Spediteur").

Konfiguration:

HINWEIS◄ Die folgende Konfiguration ist nicht als Best-Practice-Lösung für die Aufgabenstellung zu verstehen. Sie dient vielmehr dazu wichtige Gesichtspunkte bei der Verwendung von Setze Wert zu illustrieren.

Zuweisen eines simplen Werts an eine Variable (mit einfacher Konvertierung)

Die Quelle der ersten Zuweisung ist ein Wertauflöser der die eindeutige interne ID (2101) der Firma "Vortex Inc." als simple, statischen Zeichenfolge vom Typ String (s. Statische Werte) definiert.

Das Ziel der Zuweisung ist ein Wertauflöser für eine Variable, in dem der Name sourceId definiert wird, wobei der Typ Long spezifiziert wird.

Der Wert der Variablen sourceId lautet nach dieser Zuweisung 2101 (Long), allerdings nur, weil eine automatische Konvertierung von String zu Long vorgesehen ist und weil die Zeichenfolge "2101" sich direkt in eine Ganzzahl umwandeln lässt. Schon das anhängen eines Leerzeichens ("2101 ") würde diese Umwandlung verhindern. Dann würde die Variable sourceId überhaupt nicht gesetzt. Sie würde dann auch in Tests nicht erscheinen oder - wenn sie innerhalb der Transaktion schon anderweitig gesetzt wurde - den vorherigen Wert zeigen.

images/download/attachments/62864945/image2021-3-19_17-37-58-version-1-modificationdate-1616171881170-api-v2.png

ANMERKUNG◄ Um den Long-Wert statisch zuzuweisen, wäre hier eigentlich der spezifische Wertauflöser "Long" angebracht, den das System im Zuge der Konfiguration auch automatisch vorschlägt, wenn das Ziel diesen Typ spezifiziert. Allerdings könnte anstelle des statischen Texts nach ersten Tests später auch ein anderer Wertauflöser zum Einsatz kommen, der per Definition grundsätzlich Text liefert (z. B. Benutzereingabe (Wertauflöser)). Dann wären allerdings auch weitere Prüfungen zu empfehlen, die den Fall behandeln, dass ein Benutzer Text eingibt, der nicht in Long umgewandelt werden kann.

Zuweisen einer Referenz auf eine per Long-ID adressierten Entität als Wert einer Variablen

Die Quelle dieser Zuweisung ist die zuvor gesetzt Variable sourceId, die zur Laufzeit den Long-Wert 2101 enthält. Der ausgewählte Typ "Firmenkonto" greift beim Lesezugriff, sodass der Gegenstand der Zuweisung das komplette Firmenkonto der durch die ID 2101 identifizierte Firma "Vortex Inc." ist.

Das Ziel der Zuweisung ist eine neue Variable mit dem Namen sourceCompany, in der eine Referenz auf das Firmenkonto der "Vortex Inc." gespeichert wird und nicht etwa nur ein statischer Schnappschuss des aktuellen Stands der Daten für dieses Firmenkonto.

HINWEIS◄ In Tests erscheint als Wert der Variablen trotzdem der jeweils aktuelle Stand des Firmenkontos mit allen zum Zeitpunkt der Ausführung gültigen Details.

images/download/attachments/62864945/image2021-3-19_17-58-54-version-1-modificationdate-1616173137042-api-v2.png

In der rechts abgebildeten Ausführen mit-Ereignisaktion wird zunächst als Bezugsobjekt das Firmenkonto der Firma "fast-or-furious Ltd." gesetzt, die das Ziel der im Aktionsblock folgenden Zuweisungen ist. Dabei wird dessen interne ID (4101) als statischer Long-Wert (s. Statische Werte) angegeben, der per Verkettung an einen Eingabeobjekt (Typsicher)-Wertauflöser weitergegeben. Dieser gibt zu Laufzeit das identifizierte Firmenkonto als Bezugsobjekt zurück. Funktional entspricht die Verkettung also der oben gezeigten Zuweisung für die sourceCompany. Allerdings hätte die Angabe eines statischen Texts ("4101") hier nicht funktioniert, da der Wertauflöser Eingabeobjekt (Typsicher) Entitäten strikt nur dann auflöst, wenn ein Long-Wert als Eingabewert anliegt.

Mit dem als Bezugsobjekt definierten Firmenkonto werden anschließend folgende Ereignisaktionen ausgeführt:

  • Die Änderungen später speichern-Ereignisaktion setzt eine Vormerkung zum Speichern für das Firmenkonto, da die nachfolgenden Anpassungen am Firmenkonto nach Abschluss der Ereignisbehandlung gespeichert werden sollen.

  • Die folgende Setze Wert-Ereignisaktion überträgt die Liste der Firmentypen im Feld types des Firmenkontos der "Vortex Inc." pauschal auf das Firmenkonto der "fast-or-furious Ltd.". Dies überschreibt zunächst deren bestehende Klassifikation als "Spediteur".

  • Im letzten Schritt wird der Firmentyp "Spediteur" der übertragenen Liste wieder hinzugefügt.

Weiter Details hierzu beschreiben die folgenden Abschnitte, die die Konfiguration der beiden Setze Wert-Ereignisaktionen aufgeklappt zeigen.

images/download/attachments/62864945/image2021-3-19_18-15-33-version-1-modificationdate-1616174135727-api-v2.png

Die Quelle der ersten Zuweisung ist die zuvor gesetzt Variable sourceCompany, die zur Laufzeit eine Referenz auf das Firmenkonto der "Vortex Inc." enthält. Die Auswahl von "Firmenkonto" als Typ bewirkt hier nur, dass im verketteten Objekt-Feld die Felder eines Firmenkontos auswählbar sind. Ohne diese Unterstützung müsste man den Feldnamen types wissen und per Direkteingabe definieren. Gegenstand der Zuweisung ist eine Referenz auf eine Liste von Firmentypen ("Firmentyp[]"), der zur Laufzeit die Einträge "Empfänger" und "Auftraggeber" angehören.

Das Ziel der Zuweisung definiert ein Objekt-Feld-Wertauflöser, der den Zugriff auf das Feld "Firmentypen" des Bezugsobjekts - der "fast-or-furious Ltd." ermöglicht. Dieses Feld referenziert bisher eine Liste mit genau einem Eintrag, nämlich dem Firmentyp "Spediteur". Diese Referenz ersetzt die Zuweisung durch eine Referenz auf die Liste der "Vortex Inc." mit den Firmentypen"Empfänger" und "Auftraggeber" ersetzt.

images/download/attachments/62864945/image2021-3-19_18-44-42-version-1-modificationdate-1616175884666-api-v2.png

WICHTIG◄ Für das Verständnis von Setze Wert ist es wichtig zu verstehen, das sich in diesem Moment die beiden Eingabeobjekte für die beteiligten Firmenkonten per Feld types tatsächlich auf dieselbe Liste beziehen und nicht etwa auf zwei unterschiedliche Listen, die aufgrund der Zuweisung dieselben Elemente enthalten.

Die letzte Zuweisung soll nun den Eintrag des Firmentyps "Spediteur" für das Firmenkonto der "fast-or-furious Ltd." wiederherstellen, damit dieser nicht verloren geht, wenn das Firmenkonto mit der neuerdings referenzierten Liste gespeichert wird.

Die Quelle für den Eintrag verwendet eine Verkettung der statischen Zeichenfolge FWD, die dem internen Namen des Werts aus der Dynamischen Aufzählung Firmentyp entspricht, der in der Auswahl als "Spediteur" lokalisiert ist. Der verkettete Eingabeobjekt (Typsicher)-Wertauflöser "verwandelt" diesen String daher in den entsprechenden Aufzählungswert.

Als Ziel dient hier ein Listenwert-Wertauflöser, der mit dem Modus "Hinzufügen (am Ende)" das Ergänzen eines Elements in der oberhalb per Wertauflöser definierten Liste ermöglicht. Der Liste, auf die das Feld "Firmentypen" (types) im Firmenkonto der "fast-or-furious Ltd." verweist, wird also der "Spediteur" als dritter Firmentyp hinzugefügt.

images/download/attachments/62864945/image2021-3-19_19-3-30-version-1-modificationdate-1616177012470-api-v2.png

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg ACHTUNGimages/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg Wie im vorigen Einschub erklärt, beziehen sich zu diesem Zeitpunkt die beiden Eingabeobjekte für die beteiligten Firmenkonten per Feld types auf dieselbe Liste, der gerade der Eintrag "Spediteur" hinzugefügt wurde. Würde innerhalb der laufenden Transaktion anschließend auf die Firmentypen der "Vortex Inc." zugegriffen, erschiene für diese Firma also ebenfalls der Eintrag "Spediteur" als Firmentyp. Die beschriebene Vorgehensweise führt daher nur dann zum gewünschten Ziel (siehe folgende Abbildung), weil hier nur das Bezugsobjekt von Ausführen mit, also das Firmenkonto der "fast-or-furious Ltd.", durch die Änderungen später speichern-Ereignisaktion zum Speichern vorgemerkt wird. Die nicht beabsichtigten Änderungen der Firmentypen für die als sourceCompany referenzierte "Vortex Inc." am Ende der Transaktion gehen mangels Vormerkung hier glücklicherweise "verloren".

images/download/attachments/62864945/image2021-3-19_19-22-31-version-1-modificationdate-1616178154170-api-v2.png