Map-Wert

Wertauflöser - Kurzfassung

Zweck: Adressiert den Schlüssel einer Map oder das Feld eines "Client-Objekts" im Eingabewert für einen Lese- oder Schreibzugriff.

Siehe auch: Alle Map-Schlüssel-Wertauflöser, Variable-Wertauflöser

images/download/attachments/78258593/image2022-10-17_9-59-3-version-1-modificationdate-1665993543156-api-v2.png

Der Map-Wert-Wertauflöser adressiert den Schlüssel einer Map oder das Feld eines "Client-Objekts" im Eingabewert für einen Lese- oder Schreibzugriff.

WICHTIG◄ Für ein "Client-Objekt" als Eingabewert werden nur Schlüssel vom Typ String akzeptiert.

Für einen Schreibzugriff muss der Map-Wert-Wertauflöser analog zum Variable-Wertauflöser oder einem Objekt-Feld-Wertauflöser auf der linken Seite einer Wertzuweisung (z. B. per Setze Wert oder Setze Werte) verwendet werden.

Sonderfälle:

  • Wenn als Eingabewert kein Datenobjekt des Typs Map (java.util.Map) oder "Client-Objekt" vorliegt, lautet der Rückgabewert beim Lesezugriff "Kein Wert" ($null). Ein Schreibzugriff ist wirkungslos.

  • Wenn keine Konfiguration für den Parameter Schlüssel vorliegt oder diese zur Laufzeit "Kein Wert" ($null) als "Schlüssel" ergibt, lautet der Rückgabewert beim Lesezugriff "Kein Wert" ($null). Ein Schreibzugriff ist wirkungslos.
    HINWEIS◄ Ein leerer String kann in einer Map als Schlüssel und in einem "Client-Objekt" als Feldname verwendet werden, "Kein Wert" ($null) dagegen nicht.

  • Wenn der parametrierte Schlüssel im Eingabewert nicht als Schlüsselwert bzw. Feldname verwendet wird, lautet der Rückgabewert bei einem Lesezugriff "Kein Wert" ($null).

    • Ein Schreibzugriff fügt einer Map einen Eintrag mit dem angegebenen Schlüssel und dem durch die Zuweisung bestimmten Wert hinzu.

    • Einem "Client-Objekt" wird bei einem Schreibzugriff das über den Schlüssel adressierte Feld nur dann hinzugefügt, wenn der Schlüssel ein String ist.

  • Wenn der parametrierte Schlüssel bei einen Schreibzugriff bereits als Schlüsselwert bzw. Feldname im Eingabewert verwendet wird, überschreibt der zugewiesene Wert den vorhandenen.

  • Das Zuweisen von "Kein Wert" ($null) zu einem bestehenden Schlüssel ist möglich.

    • Handelt es sich beim Eingabewert um eine Map, wird der auf $null gesetzte Schlüssel selbst dadurch nicht aus der Map gelöscht.

    • Handelt es sich beim Eingabewert um ein "Client-Objekt", wird das auf $null gesetzte Feld dagegen aus dem "Client Objekt" gelöscht.

Die Parameter Wert Typ und Ist Liste von deklarieren einerseits im Kontext der Konfiguration den für nachfolgende Elemente erwarteten Datentyp.

Andererseits sind die beiden Parameter bei Lese- und Schreibzugriffen auf Map-Werte abhängig vom Kontext für die folgenden Funktionen analog zum Eingabeobjekt (Typsicher)-Wertauflöser relevant:

Funktion

bei Lesezugriff

bei Schreibzugriff

Typumwandlung
für simple Werte (String, Long, Double usw.)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg automatisch

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg automatisch

Nachschlagen eines Aufzählungswerts in der als Typ ausgewählten Aufzählung
ausgehend von einem als Wert übergebenen Textschlüssel, der mit einem je Aufzählung definierten Schlüsselfeld verglichen wird (i. d. R. name, für Einheiten alias)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg automatisch

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg automatisch

Nachschlagen einer Entität vom ausgewählten Typ (konkreter Entitätstyp)
ausgehend von einem numerischen Wert für die ID (id) der Entität

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg im Server-Kontext unterstützt
images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg im Client Workflow nicht unterstützt

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg nicht unterstützt

Typprüfung gegen den ausgewählten Typ
Prüfen der Klassenzugehörigkeit eines Werts
bzw. aller Werte einer Liste (wenn Ist Liste von ausgewählt ist):
→ Rückgabewert bei bestanden: geprüfter Wert (ggf. Liste)
→ Rückgabewert bei nicht bestanden: "Kein Wert" ($null)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg automatisch

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg automatisch

HINWEIS◄ Die Typprüfung erfolgt immer erst nach den anderen ggf. anwendbaren Funktionen. Verläuft das Nachschlagen oder die Typumwandlung erfolgreich, wird die Prüfung daher immer bestanden. Scheitert eine anwendbare Funktion lautet der Rückgabewert "Kein Wert" ($null), weil danach der ausgewählte Typ nicht vorliegt.

WICHTIG◄ Falls bei einem Schreibzugriff der Map-Wert-Wertauflöser mit den Parametern Typ und/oder Ist Liste von auf der Zielseite der Zuweisung (z. B. links in einer Setze Wert-Ereignisaktion) eingesetzt wird, führt das Scheitern einer Typprüfung, Typumwandlung oder des Nachschlagens eines Aufzählungswerts nicht etwa zur Zuweisung von "Kein Wert" ($null), sondern zu einem "stillen" Abbruch der Zuweisung. Der als Ziel definierte Schlüssel behält also seinen vorherigen Wert unverändert bei und der Ausführungskontext wird ohne Fehlermeldung fortgesetzt. Lediglich im Kontext von Tests ist der Abbruch über den Reiter "Log" eine UnsupportedOperatonException nachvollziehbar.

Konfiguration

Als Eingabewert erwartet der Map-Wert-Wertauflöser immer eine Map (java.util.Map) oder ein "Client-Objekt".

HINWEIS◄ Der Eingabewert muss ggf. über den Erzeuge Instanz-Wertauflöser (mit "Typ" java.util.Map) erzeugt werden, damit über den Map-Wert-Wertauflöser lesend und schreibend zugegriffen werden kann.

Schlüssel

Im Parameter Schlüssel müssen Wertauflöser konfiguriert werden, deren Auswertung zur Laufzeit einen Schlüssel (in einer Map) oder Feldnamen (in einem "Client-Objekt") adressiert.

Im Beispiel rechts wird der Wert myKey als statischer Text (s. Statische Werte) für den Parameter Schlüssel definiert, der sowohl als Schlüssel einer Map als auch als Feldname eines "Client-Objekts" geeignet wäre.

WICHTIG◄ Während der Feldname eines "Client-Objekts" immer ein String sein muss, kommen als Schlüssel in einer Map beliebige Datentypen in Frage. Dieselbe Map könnte z. B. gleichzeitig einen Long-Schlüssel 1234, einen Integer-Schlüssel mit demselben Wert (1234) und einen String-Schlüssel mit denselben Ziffern ("1234").

HINWEIS◄ Wenn auf bestehende Schlüssel in einer Map über den Alle Map-Schlüssel-Wertauflöser zugegriffen wird, kann als Rückgabewert die Teilmenge der Schlüssel für einen bestimmten "Schlüssel Typ" angefordert werden. Um im Kontext eines "Client Objekts" alle Feldnamen abzurufen, muss sogar ausdrücklich der einzige unterstützte "Schlüssel Typ" String explizit ausgewählt sein.

images/download/attachments/78258593/image2022-10-17_11-21-2-version-1-modificationdate-1665998462830-api-v2.png

Typ

Der optionale Parameter Wert Typ unterstützt eine statische Einfachauswahl für eine Klasse über ein Auswahlfeld/Combobox. Dessen Suchfunktion (s. Bild rechts) berücksichtigt sowohl Treffer für die anwendbare Lokalisierung sowie den internen Namen der Klasse.

Eine Auswahl für den Wert Typ impliziert eine Typprüfung für den gelesenen oder zugewiesenen Wert und kann - soweit automatische Umwandlungen vorgesehen sind - auch eine Typumwandlung oder ein Nachschlagen von Aufzählungswerten oder Entitäten in Bezug auf den Rückgabewert bewirken.

Beispiele:

Wurde dem Schlüssel myKey z. B. der Textwert 0815 (in JSON-Notation "0815") zugewiesen, dann kann dieser bei einem Lesezugriff abhängig von der Auswahl für den Wert Typ wahlweise als String-Wert (0815) oder als Long-Wert (815) "gelesen" werden.

Würde bereits im Kontext der Zuweisung des Textwerts 0815 zum Schlüssel myKey der Wert Typ Long spezifiziert, dann wird der Long-Wert 815 zugewiesen. Die Information, dass die ursprüngliche Zeichenfolge eine "Vornull" enthielt, geht dabei verloren.

Allerdings kann der gespeicherte Long-Wert (815) verwendet werden, um bei einem Lesezugriff eine Entität mit der ID (id) 815 "nachzuschlagen", indem deren Entitätstyp als Wert Typ ausgewählt wird, sofern der Kontext das unterstützt (s. Tabelle oben).

images/download/attachments/78258593/image2022-10-18_11-43-56-version-1-modificationdate-1666086236380-api-v2.png

ANMERKUNG◄ Über das [+]-Symbol oder die Eingabetaste könnte die hier als Suchbegriff eingegebene Zeichenfolge lang auch als Freitexteingabe für eine (nicht im Dropdown gelistete) Klasse bestätigt werden, was allerdings nur selten beabsichtigt sein dürfte.

Ist Liste von

Die Option Ist Liste von (per Standard abgewählt) spezifiziert, dass es sich beim gelesenen oder geschriebenen Wert um eine Liste handeln soll. Ist der Wert keine Liste liefert/schreibt der Map-Wert-Wertauflöser "kein Wert" ($null).

Sofern ausdrücklich ein Typ angegeben ist (s. Bild rechts), impliziert die Auswahl der Option Ist Liste von eine Typprüfung aller existierenden Einträge gegen diesen Typ, sodass der Rückgabewert $null lautet, falls mindestens ein Eintrag nicht dem ausgewählten Typ entspricht.

Beispiel:

Die Auswahl des Wert Typs Long und der Option Ist Liste von impliziert eine Typprüfung für den Wert im Schlüssel myKey. Enthält dieser keine Liste (sondern z. B. nur einen einzigen Long-Wert) oder eine Liste, die Einträge mit Datentypen die nicht Long-Werte sind lautet der Rückgabewert des Wertauflösers $null.

HINWEIS◄ Wie oben bereits angemerkt, wird ein Schreibzugriff beim Scheitern einer Typprüfung für den Wert auf der Zielseite der Zuweisung abgebrochen. Falls die Konfiguration rechts also das Ziel einer Zuweisung definiert und zur Laufzeit eine Liste zugewiesen werden soll, die mindestens einen Wert enthält, der kein Long-Wert ist, wird dem Schlüssel myKey nicht etwa "Kein Wert" ($null) zugewiesen. Stattdessen bleibt ein bestehender Wert für den Schlüssel myKey unverändert erhalten bzw. der Schüssel wird nicht erstellt (falls er noch nicht existiert).

images/download/attachments/78258593/image2022-10-18_12-25-27-version-1-modificationdate-1666088727227-api-v2.png


Beim Zugriff auf "Listen" als Werte sind außerdem folgende Aspekte zu beachten:

  • Ist die Option Ist Liste von abgewählt (Standard) und kein Wert Typ ausgewählt dann findet keine Typprüfung statt. Man kann auf diesem Weg also nicht spezifizieren, dass nur ein Rückgabewert "erwünscht" ist, der keine Liste ist.

  • Solange die Option Ist Liste von abgewählt ist, wird eine Liste wie jedes andere in einer Variablen gespeicherte Datenobjekt direkt zurückgegeben bzw. zugewiesen.

  • Ist beim Zugriff auf eine Liste die Option Ist Liste von abgewählt, dann kann der Parameter Wert Typ für eine Typumwandlung für die Liste als Ganzes genutzt werden.
    Beispiel: Eine Schlüssel route enthält eine normale "Liste" (java.util.List) von String-Werten, die über IATA-Codes von Flugziele entlang eines "Reiseschemas" definiert:
    In JSON-Notation könnte die Liste im Wert für den Schlüssel route für eine "Rundreise" z. B. so aussehen: [MUC,JFK,GIG,CDG,MUC]Wird auf die Variable route per Wert Typ "Liste" (java.util.List) oder ohne Angabe eines Typs zugegriffen, entspricht der Rückgabewert exakt dem gespeicherten Wert.
    Erfolgt der Zugriff auf den Schlüssel route dagegen per Wert Typ "Eindeutige Liste" (java.util.Set), dann wird die "Liste" in eine "Eindeutige Liste" umgewandelt, was die Reihenfolge und die Anzahl der Einträge verändern kann.
    Im konkreten Beispiel könnte der Rückgabewert so aussehen: [GIG,CDG,MUC,JFK]

Beispiele

Lesezugriff auf einen Schlüssel einer Map oder ein Client Objekt (als Standardwert)

Eine Ereignisbehandlung soll ausgewählte Inhalte (hier: name und id) aus einer per Variable author übergebenen Map in einer Benachrichtigung wiedergeben.

Falls die Variable author keine Map enthält, sollen Feldwerte aus einem "Client Objekt" angezeigt werden, das zu diesem Zweck aus statisch hinterlegtem JSON-Text generiert wird.

Laufzeitbeispiel:

Benachrichtigung mit Daten aus einer bereitgestellten Map

images/download/attachments/78258593/image2022-10-19_17-35-47-version-1-modificationdate-1666193747349-api-v2.png

Benachrichtigung mit Standardwerten
(ohne Map)

images/download/attachments/78258593/image2022-10-19_17-37-44-version-1-modificationdate-1666193864861-api-v2.png

Konfiguration:

Die Benachrichtigung kann innerhalb einer Ereignisbehandlung wie rechts abgebildet konfiguriert werden:

  • Der Objekt Resolver innerhalb der Ausführen mit-Ereignisaktion greift primär auf eine in der Variablen author vorliegende Map zu. Liefert die Variable eine Map, gilt diese als Bezugsobjekt für die Ausgabe der Benachrichtigung per Hinweis anzeigen (Popup) im Aktionsblock unten.

  • Ist die Variable author leer oder enthält sie einen anderen Datentyp als Map, liefert der Variable-Wertauflöser "Kein Wert" als Rückgabewert. Dann wird der verkettete Standardwert-Wertauflöser aktiv und wertet die Konfiguration für seinen Standardwert-Parameter aus:

images/download/attachments/78258593/image2022-10-19_17-40-1-version-1-modificationdate-1666194001133-api-v2.png

Innerhalb der Hinweis anzeigen (Popup)-Ereignisaktion werden in der Meldung Werte aus dem Bezugsobjekt in einem Textverkettung-Wertauflöser mit literalen Textzeichen kombiniert:

  • Die erste Textkomponente soll den Schlüssel bzw. das Feld name lesen. Dessen Name wird als statischer Text zugewiesen.

  • Die zweite Textkomponente definiert literale Formatierungszeichen als statischen Text.

  • Die dritte Textkomponente soll den Schlüssel bzw. das Feld id lesen. Dessen Name wird als statischer Text zugewiesen.

HINWEIS◄ Wir gehen davon aus, dass der Typ aller für die Benachrichtigung relevanten "Schlüssel" in der Map String ist. Nur dann funktioniert der fliegende Wechsel zwischen "Client Objekt" und Map als Eingabewert für den Map-Wert-Wertauflöser wie hier demonstriert.

ANMERKUNG◄ Ein "Client Objekt" im Standardwert-Wertauflöser zu erzeugen, ist effizienter, als für jeden Lesezugriff einen eigenen Standardwert zu definieren. Allerdings greift der "Standard" auch nur, wenn die Map komplett fehlt. Ist die Map vorhanden, enthält aber nicht für alle relevanten "Schlüssel" Werte, dann erscheint die Benachrichtigung lückenhaft, wenn wie hier auf "individuelle Standardwerte" verzichtet wird.

images/download/attachments/78258593/image2022-10-19_17-53-36-version-1-modificationdate-1666194817014-api-v2.png

Daten in einer Map sammeln (Schreibzugriff)

Eine Suche (Ereignisaktion) mit dem Modus "Suchwert" liefert in einer Variablen users eine Liste von Benutzerkonten (s. Benutzer), die hier als "Benutzergruppe" bezeichnet werden soll.

Die Daten der "Benutzergruppe" sollen hinsichtlich der Kombinatorik für die Felder "Sprache" (locale) und "Land" (address.countryCode) ausgewertet werden. Das Auswertungsergebnis soll als Map bereitgestellt werden, die als eindeutige "Schlüssel" alle in der Benutzergruppe verwendeten Sprachen verwendet. Jedem Schlüssel soll als Wert eine Liste der "Herkunftsländer" von Benutzern zugeordnet werden, in deren Konto die jeweilige Sprache ausgewählt ist.

ANMERKUNG◄ Eine Auswertung der Kombinatorik ist auch innerhalb der Suche (Ereignisaktion) denkbar, wenn entsprechende Kriterien für eine Gruppierung verwendet werden. Im Beispiel soll die Auswertung der Kombinatorik allerdings ausdrücklich entkoppelt vom Abruf der Detaildaten für die Benutzergruppe und mit einer Map als Ergebnis erfolgen.

Konfiguration:

Die Konfiguration rechts zeigt, wie die Auswertung der Kombinatorik innerhalb einer Ereignisbehandlung gelöst werden kann:

  • Details zur initial ausgeführten Suche (Ereignisaktion) sollen hier keine Rolle spielen. Entscheidend ist, dass diese eine Liste von Benutzerkonten in der Variablen users bereitstellt.

  • Die nachfolgende Ausführen mit-Ereignisaktion setzt eine per Erzeuge Instanz mit dem Typ "Map" (java.util.Map) erzeugte Map als Bezugsobjekt für die weiteren Ereignisaktionen. Solange alle die Map betreffenden Aktionen in diesem Kontext ausgeführt werden können (z. B. Hinweis anzeigen (Popup) ganz unten), muss die erzeugte Map nicht ausdrücklich einer Variablen zugewiesen werden.

  • Für den Kontext innerhalb der nachfolgenden Für jeden Eintrag wiederholen (Schleife) wird über den Parameter Map in Variable speichern die Variable locales für den Zugriff auf die Map definiert. Der Parameter Wertauflöser für Einträge definiert eine Iteration über eindeutige Werte für das Feld "Sprache" (locale) innerhalb der Liste aller Benutzer der "Benutzergruppe" (in der Variablen users):

    • Der Variable-Wertauflöser liefert zunächst alle in der Variablen users aufgelisteten Benutzerkonten.

    • Der verkettete Sammle Werte-Wertauflöser liest aus diesen das Objekt-Feld "Sprache" (locale) und gibt per Option Eindeutige Werte als Rückgabewert eine Liste zurück, die jede relevante "Sprache" genau einmal enthält.

  • Die Ausführen mit-Ereignisaktion innerhalb der Schleife definiert keinen Objekt Resolver, behält also die Sprache als Bezugsobjekt bei. Durch den Parameter Sprache in Variable speichern wird die für die jeweilige Iteration ausschlaggebende Sprache zusätzlich in die Variable locale geschrieben. Dies ist hier ausnahmsweise erforderlich, damit der Zugriff auf die Sprache im Regel-Listen Resolver (s. unten) gelingt, der sich hier auf einen Benutzer als Bezugsobjekt bezieht.

    • Die Setze Wert-Ereignisaktion definiert einen Schreibzugriff auf die Map (locales), durch den einerseits ein Schlüssel für die aktuelle Sprache angelegt und andererseits die gewünschte "Länderliste" für die Sprache als Wert zugewiesen wird:

      • Auf der linken Seite der Zuweisung stellt ein Variable-Wertauflöser den Bezug zur Map locales her, die als Eingabewert für den verketteten Map-Wert-Wertauflöser benötigt wird. Dieser definiert als Schlüssel die aktuelle Sprache (per Variable-Wertauflöser für locale).
        ANMERKUNG◄ Auf eine Spezifikation von Wert Typ und Ist Liste von wird hier verzichtet.

      • Auf der rechten Seite der Zuweisung greift am Beginn der Wertauflöserkette ein Variable-Wertauflöser auf die Liste der Benutzer (users) zurück, die wie folgt verarbeitet wird:

        • Der verkettete Regel-Listen Resolver gibt Alle Werte als Liste zurück, für die die Objekt-Feld-Regel erfüllt ist, dass das Objekt-Feld "Sprache" (locale) mit der aktuellen Sprache (Variable locale) in der Iteration übereinstimmt.

        • Der verkettete Sammle Werte-Wertauflöser ermittelt aus dieser Fraktion innerhalb der "Benutzergruppe" eine Liste von eindeutigen Werten für das Adressfeld "Land" (address.countryCode), sofern für dieses eine Angabe vorliegt.
          ANMERKUNG$null-Werte werden von Sammle Werte in der gegebenen Konfiguration einfach übersprungen.

  • Nach der Iteration über alle verwendeten Sprachen wir hier zur Demonstration eine Hinweis anzeigen (Popup)-Ereignisaktion ausgeführt, um das String-Abbild der Map auszugeben.

    ANMERKUNG◄ In einem echten Anwendungsfall kann die Map anderweitig verarbeitet werden.

Laufzeitbeispiel: (String-Abbild der Map)

{en=[US, DE], de=[DE, IT, AT], fr=[MU]}

HINWEIS◄ Als Schlüssel in der Map dienen Werte der Dynamischen Aufzählung Sprache und nicht etwa nur die internen Namen dieser Werte (als String), die das String-Abbild ausgibt. Auch die Liste im zugehörigen Wert bezieht sich auf Dynamische Aufzählungswerte für das Land und nicht nur auf die oben ausgegebenen Textwerte.

Zur Verdeutlichung wird nachfolgend noch das Server-XML-Abbild einer Map mit denselben Daten wiedergegeben.

images/download/attachments/78258593/image2022-10-19_10-40-23-version-1-modificationdate-1666168823964-api-v2.png images/download/attachments/78258593/image2022-10-19_10-41-52-version-1-modificationdate-1666168912181-api-v2.png

Server-XML einer Map mit Länder-Listen in Sprache-Schlüsseln
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="CORESYSTEM">
<entry>
<key enumName="core:Locale" name="en" xsi:type="core:DynamicEnumValue"/>
<value xsi:type="set">
<entry enumName="core:Country" name="US" xsi:type="core:DynamicEnumValue"/>
<entry enumName="core:Country" name="DE" xsi:type="core:DynamicEnumValue"/>
     </value>
</entry>
<entry>
<key enumName="core:Locale" name="de" xsi:type="core:DynamicEnumValue"/>
<value xsi:type="set">
<entry enumName="core:Country" name="DE" xsi:type="core:DynamicEnumValue"/>
<entry enumName="core:Country" name="IT" xsi:type="core:DynamicEnumValue"/>
<entry enumName="core:Country" name="AT" xsi:type="core:DynamicEnumValue"/>
</value>
</entry>
<entry>
<key enumName="core:Locale" name="fr" xsi:type="core:DynamicEnumValue"/>
<value xsi:type="set">
<entry enumName="core:Country" name="MU" xsi:type="core:DynamicEnumValue"/>
</value>
   </entry>
</map>

Dies Auswertung der Kombinatorik von Sprache und Land in der ausgewerteten "Benutzergruppe" ergibt im Klartext:

  • Die Sprache "Englisch" (en) ist für je einen oder mehrere Benutzer aus den USA (US) und Deutschland (DE) ausgewählt.

  • Die Sprache "Deutsch" (de) ist für je einen oder mehrere Benutzer aus Deutschland (DE), Italien (IT) und Österreich (AT) ausgewählt.

  • Die Sprache "Französisch" (fr) ist für einen oder mehrere Benutzer aus Mauritius (MU) ausgewählt.

Dynamisch bestimmte Feldnamen in einem Client-Objekt (Schreibzugriff)

Eine Ereignisbehandlung soll einen zufälligen "Wurf" mit einer parametrierbaren Anzahl an Würfeln (Variable numberOfDice) simulieren und ein "Client-Objekt" zurückgeben, das die geworfenen Augenzahlen in systematisch benannten Felder (die0, die1, die2, ...) wiederspiegelt.

Laufzeitbeispiel: "Wurf mit 3 Würfeln" (numberOfDice=3)

Client-Objekt in JSON-Notation
{
"die2": {
"class": "java.lang.Long",
"value": "1"
},
"die1": {
"class": "java.lang.Long",
"value": "3"
},
"die0": {
"class": "java.lang.Long",
"value": "6"
}
}

Konfiguration:

Der Knackpunkt für die Konfiguration ist, dass der typischerweise für Wertzuweisungen an Felder eines Objekts verwendete Objekt-Feld-Wertauflöser keine dynamische Zuweisung für den Feldnamen sondern nur eine statische Auswahl eines Felds in der Konfiguration unterstützt.

Daher muss der Map-Wert-Wertauflöser verwendet werden, dessen dynamisch definierbarer Schlüssel im Kontext eines Client-Objekts als Feldname interpretiert wird.

In der zum "Würfeln" verwendeten Ereignisbehandlung werden die rechts abgebildeten Ereignisaktionen konfiguriert:

  • Die umgebende Ausführen mit-Ereignisaktion setzt ein per Erzeuge Instanz mit dem Typ "Client Objekt" (ASObject) erzeugtes "Client Objekt" als Bezugsobjekt für die weiteren Ereignisaktionen. Der verkettete Wert als Variable speichern-Wertauflöser speichert einen Verweis auf dieses "Client Objekt" in der Variablen roll. Auf diesen Variablennamen kann sich z. B. der Parameter "Ergebnisausdruck" in einem Eigenes Aktionsevent auslösen (Formulardesigner)-Verhalten (nicht im Bild) als Rückgabewert beziehen.

  • Die Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion soll die Anzahl von Würfen ausführen, die der Long-Wert in der Variable numberOfDice vorgibt. Ein Eigenes Aktionsevent auslösen (Formulardesigner)-Verhalten kann diesen Wert als Aufrufparameter übergeben.

    • Innerhalb der Iteration soll die Setze Wert-Ereignisaktion eine "gewürfelte" Zufallszahl (als Long-Wert im Wertebereich zwischen 1 und 6) einem Feld des als Bezugsobjekt vorliegenden "Client-Objekts" zuordnen, dessen Name ein Präfix mit der Indexnummer des Wurfs kombiniert.

      • Auf der linke Seite der Zuweisung definiert der Map-Wert-Wertauflöser den Feldnamen im Parameter Schlüssel durch eine Textverkettung:

        • Die erste Textkomponente ist der statische Text die (en: Würfel).

        • Die zweite Textkomponente wird aus dem Long-Wert in der Variablen $index abgeleitet, die in einer Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion den aktuellen Iterationsindex angibt.

      • Auf der rechten Seite der Zuweisung findet das eigentliche "Würfeln" statt. Details dazu sind hier nicht von Belang.

images/download/attachments/78258593/image2022-10-19_15-31-14-version-1-modificationdate-1666186274086-api-v2.png