Benutzer der Session

Wertauflöser - Kurzfassung

Zweck: Gibt die "Benutzerdaten" (Benutzerkonto/Gastbenutzerkonto) für den anwendbaren Anmeldekontext zurück.

images/download/attachments/201662684/image2022-2-11_7-43-49-version-1-modificationdate-1742198707471-api-v2.png

Der Benutzer der Session-Wertauflöser gibt die "Benutzerdaten" (das Konto) für den anwendbaren Anmeldekontext zurück.

Dabei sind Laufzeit folgende Szenarien zu unterscheiden:

Laufzeit-Szenario

Rückgabewert von "Benutzer der Session"

Ein vollwertiger Benutzer (s. Benutzer) ist für die aktuelle Sitzung eingeloggt bzw. wurde per Login API zur Authentifizierung angegeben und gilt im anwendbaren Anmeldekontext als "Benutzer".

Daten des Benutzerkontos (Typ: Benutzer), das die Sitzung oder den Zugriff per Login API authentifiziert

Ein Gastbenutzer (s. Gastbenutzer) ist für die aktuelle Sitzung eingeloggt bzw. wurde per Login API zur Authentifizierung angegeben und gilt im anwendbaren Anmeldekontext als "Benutzer".

Daten des Gastbenutzerkontos (Typ: Gastbenutzer), das die Sitzung oder den Zugriff per Login API authentifiziert

Im unmittelbaren oder mittelbaren Ausführungskontext des Wertauflösers spezifiziert eine Ausführen als-Ereignisaktion einen "Benutzer", um den anwendbaren Anmeldekontext temporär abweichend vom tatsächlich angemeldeten Benutzer oder Gastbenutzer zu definieren.

Daten des Benutzerkontos (Typ: Benutzer), das im temporären Anmeldekontext als "Benutzer" definiert ist.


►WARNUNG◄ Rückgabewert nicht für Schreibzugriffe verwenden!

Der Rückgabewert des Benutzer der Session-Wertauflösers liefert immer nur einen "Klon" des Kontos aus dem anwendbaren Anmeldekontext, der möglicherweise nicht mehr dem serverseitigen Datenstand für das betreffende Konto entspricht. Wenn ein Benutzer oder Gastbenutzer sich zu einer Lobster Data Platform / Orchestration-Sitzung anmeldet, wird dieser Klon als "Schnappschuss" von den Daten des verwendeten Kontos erstellt, damit dessen Daten während der Sitzung nicht immer wieder vom Server abgerufen werden müssen. Nur wenn der angemeldete Benutzer selbst Änderungen am eigenen Konto speichert (z. B. auch durch Funktionen wie Sprache ändern, Profilbild ändern, usw.) wird der nur für seine Sitzung gültige Klon des Kontos neu erstellt.

Der Versuch, am geklonten Rückgabewert des Benutzer der Session-Wertauflösers vorgenommene Änderungen - z. B. per Änderungen später speichern - zu speichern, scheitert (mit Fehlermeldung inkl. Rollback für die Transaktion), wenn der serverseitige Datenstand nach dem Erstellen des verwendeten Klons durch Zugriffe aus anderen Sitzungen aktualisiert wurde. Um das Risiko für einen Konflikt beim Schreiben zu minimieren, sollten die Daten des betreffende Kontos möglichst unmittelbar vor einem Schreibzugriff vom Server abgeholt werden. Dazu kann die "ID" (id) des als Benutzer der Session identifizierten Kontos an den Eingabeobjekt (Typsicher)-Wertauflöser übergeben werden (s. Beispiel "Schreibzugriff" unten).

Da der Wertauflöser wahlweise die Daten eines Benutzerkontos oder eines Gastbenutzerkontos liefert, deklariert das GUI für die Konfiguration den Typ "Schnittstelle > Benutzer" für den Rückgabewert des Wertauflösers. Ein Objekt-Feld-Wertauflöser bietet für diesen Schnittstellen-Typ nur die folgende minimalistische Auswahl von Feldern an, die für eine Authentifizierung mit dem einen oder anderen Kontotyp unbedingt benötigt werden:

Feldname

Lokalisierung

Datentyp

Bedeutung

Details

id

ID

Long

Absolutwert identifiziert das Konto des "Benutzers"

Für Benutzer wird der ID-Wert als positiver Long-Wert angegeben.
Für Gastbenutzer wird der ID-Wert als negativer Long-Wert angegeben.

created

Erstellt

Timestamp

Erstelldatum des Kontos


creatorId

Erstellt von

Long

Absolutwert identifiziert das "Benutzer"-Konto, der das zurückgegebene Konto erstellt hat.

Für Benutzer wird der ID-Wert als positiver Long-Wert angegeben.
Für Gastbenutzer wird der ID-Wert als negativer Long-Wert angegeben.

ownerId

Besitzer

Long

ID des Firmenkontos, das das Konto des "Benutzers" besitzt

Der Wert -1 signalisiert, dass kein Besitzer zugeordnet ist.

Unabhängig von der Definition des Typs "Schnittstelle > Benutzer" umfasst der Rückgabewert aber immer sämtliche Daten des Kontos, das als Benutzer der Session gilt.

WICHTIG◄ Die "Schnittstelle > Benutzer" liefert bei einem clientseitigen Lesezugriff auf das Feld username den Wert des Felds loginToken, falls ein Gastbenutzer als Benutzer der Session gilt. Details zu dieser Besonderheit verdeutlicht das Beispiel "Komplexerer Anwendungsfall" unten.

HINWEIS◄ Wenn man den Benutzer der Session-Wertauflöser in einer Konfiguration einsetzt, sollte die implementierte Logik so angelegt werden, dass jedes der eingangs aufgelisteten Szenarien vorkommen könnte. Auch wenn auf einem Lobster Data Platform / Orchestration-System bisher Gastbenutzer keine Rolle spielen oder im unmittelbaren Kontext keine Ausführen als-Ereignisaktion verwendet wird, sollte die Möglichkeit in Betracht gezogen werden, dass sich die Einsatzbedingungen in Zukunft ändern. Eine Konfiguration, in deren Kontext bisher z, B. ausschließlich Benutzer als Benutzer der Session zu erwarten sind, sollte durch geeignete Vorkehrungen sicherstellen, dass auch in einer Gastbenutzer-Sitzung wirklich "nichts passieren" kann. Es sollte allerdings auch kein wesentlicher Schritt eines Workflow mit einem Rollback scheitern oder - eventuell noch schlimmer - mit unvollständigen oder unpassenden Daten ausgeführt werden, nur weil der Benutzer der Session vom falschen Typ (Gastbenutzer vs. Benutzer) ist oder durch eine Ausführen als-Ereignisaktion innerhalb einer komplexen Aufrufkette ein "unerwartetes" Benutzerkonto ins Spiel gebracht hat.

Konfiguration

Der Wertauflöser ignoriert den Eingabewert und verwendet keine Parameter.

Beispiele

Beispiel: Einschränkung für eine Eigene Übersicht

Den Zugriff auf die meisten Entitätstypen regelt Lobster Data Platform / Orchestration über den "Besitz" (ownerId) bzw. Firmenfreigaben, so dass meistens die Firma der Session ausschlaggebend dafür ist, welche Entitäten Eigene Übersichten in ihrem Datengrid auflisten. Man könnte sagen, dass Lobster Data Platform / Orchestration keinen "Privatbesitz" an Entitäten vorsieht, weil systematisch nur Firmen als Besitzer oder Empfänger einer Freigabe vorgesehen sind. Allerdings verweisen die automatisch befüllten Standardfelder "Erstellt von" (creatorId) und "Zuletzt geändert von ID" (lastModifierId) einer Entität auf Benutzer bzw. Gastbenutzer. Im folgenden Beispiel soll eine "Eigene Übersicht" für Benutzer auf dieser Basis eine zusätzliche Einschränkung erhalten, so dass sie nur diejenigen Benutzer ausgibt, für die der angemeldete Benutzer der Session als "Ersteller" gilt.

Konfiguration:

Eine "Eigene Übersicht" für Benutzer wird neu angelegt und mit der rechts abgebildeten Konfiguration für die Einschränkung versehen:

  • Die linken Seite der Feld Einschränkung adressiert das Feld "Erstellt von" (creatorId) des Benutzers, in dem Long-Werte enthalten sind, die als Referenz auf ein Benutzer- bzw. Gastbenutzerkonto gelten.

  • Auf der rechten Seite der Feld Einschränkung wird der Benutzer der Session-Wertauflöser verwendet, um das Benutzer- oder Gastbenutzerkonto zu ermitteln, auf das sich die aktuelle Sitzung bezieht. Der verkettete Objekt-Feld-Wertauflöser liest das Feld "ID" (id) des Kontos, die hier als Suchkriterium für die Übersicht dient.

HINWEIS◄ Die Schnittstelle gibt den eigentlich positiven Wert der ID eines Gastbenutzerkontos als negativen Wert zurück. Allerdings greift dieselbe Logik auch für den Wert für "Erstellt von". Insofern funktioniert die Eigene Übersicht mit dieser Einschränkung auch ohne besondere Vorkehrungen für eine Anmeldung als Gastbenutzer.

ANMERKUNG◄ Dass ein Gastbenutzer Konten für Benutzer erstellen kann, sollte normalerweise durch die Zuweisung einer geeignet eingeschränkten Rolle ausgeschlossen sein. Allerdings ist die Einschränkung in dieser Form für beliebige Entitäten einsetzbar.

images/download/attachments/201662684/image2022-2-14_10-55-11-version-1-modificationdate-1742198707468-api-v2.png

Laufzeitbeispiel:

images/download/attachments/201662684/image2022-2-14_14-27-46-version-1-modificationdate-1742198707465-api-v2.png

  • Die Eigene Übersicht "Von ►MIR◄ erstellte Benutzerkonten" listet für den Benutzer "Triple Q" nur die beiden Benutzerkonten auf, die er selbst erstellt hat.

  • Die Spalte Erstellt von zeigt - gemäß der für die Übersicht geltenden Einschränkung (s. o.) - in allen Zeilen den Benutzernamen (username) und die ID von "Triple Q", wenn dieser der Benutzer der Session ist.

Beispiel: Schreibzugriff auf das als Benutzer der Session identifizierte Konto

Um das Risiko missbräuchlicher Zugriffe auf Daten in Lobster Data Platform / Orchestration zu minimieren, sollen Gastbenutzer per Klick auf einen Ribbon-Button das eigene Konto deaktivieren können.

Laufzeitbeispiel:

images/download/attachments/201662684/image2022-2-16_15-40-53-version-1-modificationdate-1742198707341-api-v2.png

Konfiguration:

Der Ribbon-Button (s. o.) löst ein Eigenes Aktionsevent "Mein Konto deaktivieren" aus, das als Auslösendes Ereignis für die rechts abgebildete Ereignisbehandlung gelistet ist.

Die Prüfende Regel soll hier ausdrücklich absichern, dass die unten gezeigte Ereignisaktionen nur ausgeführt werden, wenn als Benutzer der Session ein Gastbenutzer vorliegt.

Da der Ribbon-Button in unterschiedlichen Kontexten angeboten werden und nicht an die Auswahl eines bestimmten Bezugsobjekts gebunden werden soll, ist kein Eingabewert für das Ereignis zu erwarten. Insofern wäre eine direkte Typprüfung auf den Typ "Gastbenutzer" für den Eingabewert sinnlos.

Stattdessen wird die Typprüfung hier innerhalb einer Mit-Regel ausgeführt, für die der Benutzer der Session-Wertauflöser im Parameter Objekt Feld Resolver das Bezugsobjekt temporär verändert.

Auch wenn für dessen Rückgabewert formal der Typ "Schnittstelle > Benutzer" ausgewiesen wird (s. Bild) , liegt zur Laufzeit ein "Gastbenutzer"-Objekt vor, wenn Gastbenutzer angemeldet sind.

ANMERKUNG◄ Im Unterschied zu einer direkten Typprüfung für den Eingabewert einer Ereignisbehandlung wird der in der Mit-Regel geprüfte Typ nicht als Kontext für die Aktion bei bestandener Regel angenommen. Stattdessen gilt der Kontext hier als unbestimmt ("Objekt").

images/download/attachments/201662684/image2022-2-16_15-52-59-version-1-modificationdate-1742198707338-api-v2.png

Als Aktion bei bestandener Regel muss zunächst durch eine Ausführen als-Ereignisaktion ein Anmeldekontext mit geeigneten Zugriffsrechten (s. Als Rolle) hergestellt werden, da davon auszugehen ist, dass ein Gastbenutzer nicht berechtigt ist, Gastbenutzerkonten zu ändern.

  • Wichtig ist dabei, dass für den optionalen Parameter Als Benutzer keine Auswahl getroffen wird, da dies den Bezug zum Benutzer der Session übersteuern würde, der durch die folgenden Aktionen bearbeitet werden soll.

  • Damit der Schreibzugriff für das angemeldete Gastbenutzerkonto möglichst sicher gewährleistet ist, soll im Objekt Resolver der Ausführen mit-Ereignisaktion der aktuelle Datenstand dieses Kontos vom Server abgerufen werden. Dies ermöglicht die folgende Verkettung ausgehend vom Benutzer der Session-Wertauflöser:

    • Der Objekt-Feld-Wertauflöser liest das Feld "ID" (id) aus dem Rückgabewert für den Benutzer der Session.

    • Da die "Schnittstelle > Benutzer" für Gastbenutzer per Definition negative Long-Werte für die ID zurückgibt, muss der Berechne Wert-Wertauflöser hier das Vorzeichen "umdrehen", damit im folgenden Schritt der eigentlich positive Wert der ID als Eingabewert vorliegt.

    • Das zunächst als "Zahl mit Einheit" vorliegende Berechnungsergebnis muss im Anschluss über einen Eingabeobjekt (Typsicher)-Wertauflöser noch ausdrücklich als Long-Wert deklariert werden, bevor ein weiterer Eingabeobjekt (Typsicher)-Wertauflöser das betreffende Gastbenutzerkonto auflösen kann.

    • Mit dem so ermittelten Gastbenutzerkonto als Bezugsobjekt kann durch eine Setze Wert-Ereignisaktion dessen Feld "Aktiv" (active) der Wert false zugewiesen werden, bevor diese Änderung per Änderungen später speichern zum Speichern vorgemerkt wird.

images/download/attachments/201662684/image2022-2-16_16-22-32-version-1-modificationdate-1742198707336-api-v2.png

WICHTIG◄ Die Verkettung im Objekt Resolver der Ausführen mit-Ereignisaktion könnte man erheblich verkürzen, in dem man nur die erste und letzte "Stufe" verwendet:

  • Benutzer der Session > Eingabeobjekt (Typsicher) mit Typ "Gastbenutzer"

    Allerdings sollte man das unbedingt unterlassen, weil sonst die Ereignisaktionen mit dem bei der Anmeldung des Gastbenutzers "geklonten" Datenstand des Kontos ausgeführt werden, was in Verbindung mit Änderungen später speichern zu einem Fehler mit Rollback führen kann, wenn seitdem das Konto ausgehend von einer anderen Sitzung verändert wurde, so dass der Klon für den Server als "veraltet" gilt (s. "WARNUNG" in der Einleitung).

Beispiel: Komplexerer Anwendungsfall

In ausgewählten Kontexten soll über ein Ribbonmakro ein "Hinweis" (per E-Mail) an andere Benutzer/Gastbenutzer versendet werden können, der sich auf die aktuelle Auswahl bezieht.

Beim Klick auf den betreffenden Button soll der angemeldete Benutzer über ein Kontextmenü einen der folgenden Adressaten für den Hinweis auswählen können:

Die Auswahlliste soll dabei kein Konto mehrfach aufführen, auch wenn es in unterschiedlichen Funktionen relevant ist.

Die Lösung muss so aufgebaut werden, dass die beteiligten Konten wahlweise Benutzer oder Gastbenutzer sein können.

Laufzeitbeispiel:

images/download/attachments/201662684/image2022-2-15_9-27-51-version-1-modificationdate-1742198707462-api-v2.png

  • Der Screenshot zeigt den Ribbon-Button "Hinweis" über den das angezeigte Kontextmenü geöffnet wurde.

  • Das Kontextmenü zeigt zwei Adressaten für einen Hinweis zur Auswahl an.

Konfiguration:

Nachfolgend wird nur die Konfiguration beschrieben, die das Öffnen des Kontextmenüs betrifft. Die auszulösende Benachrichtigung erwartet vom Kontextmenü das komplette Datenobjekt für das ausgewählte Benutzer- oder Gastbenutzerkonto in einer Variable.

Der dynamische Aufbau des Kontextmenüs erfolgt ausgehend von den Daten des Benutzer der Session (s. Parameter Objekt Resolver in der Ausführen mit-Ereignisaktion) in den rechts zunächst im Überblick dargestellten Schritten, die unterhalb im Detail beschrieben werden:

  • Im ersten Schritt speichert eine Setze Wert-Ereignisaktion die Liste der eindeutigen Long-Werte, die Referenzen auf "relevante" Benutzer-/Gastbenutzerkonten sind, der Variablen accountIds zu.

  • Im zweiten Schritt werden die Datenobjekte für die in der Variable accountIds aufgelisteten Konten vom Server abgefragt. Mit Hilfe der Ausführen als-Ereignisaktion wird das zu der Anmeldekontext so verändert, dass die für "Suche" erforderlichen Leserechte für Benutzer und Gastbenutzer gewährleistet sind. Die "gefundenen" Konten werden in zwei Listenvariablen (users und guests) übergeben.

  • Im dritten Schritt werden innerhalb der Öffne Kontextmenü-Ereignisaktion die in den Listenvariablen (users und guests) getrennt je Entitätstyp abgefragten Konten zu einer gemeinsamen Liste vereinigt, die die Optionen für das Kontextmenü definiert.

images/download/attachments/201662684/image2022-2-15_10-57-55-version-1-modificationdate-1742198707459-api-v2.png

Für den ersten Schritt wird eine Setze Wert-Ereignisaktion wie rechts abgebildet konfiguriert, um der Variablen accountIds (linke Seite der Zuweisung) die Liste der relevanten Konto-Referenzen zuzuweisen.

Auf der rechten Seite der Zuweisung wird die Liste durch eine Verkettung der folgenden Wertauflöser definiert:

  • Der Erzeuge Liste-Wertauflöser wird hier verwendet, um aus den Werten der die drei relevanten Felder (id, creatorId und lastModifierId) aus dem Rückgabewert von Benutzer der Session ("Schnittstelle > Benutzer" im Kontext) eine Liste von Long-Werten zusammenzustellen. Der hierzu jeweils verwendete Objekt-Feld-Wertauflöser wurde im Bild zugunsten einer kompakteren Ansicht "zusammenklappt".

  • Da die so zusammengestellte Liste noch Duplikate enthalten kann, wird sie im unterhalb verketteten Sammle Werte-Wertauflöser nachbearbeitet, da nur Eindeutige Werte zulässig sein sollen. Als Wert zum Sammeln wird dabei ein Eingabeobjekt (Typsicher)-Wertauflöser mit dem Typ "Long" verwendet, der darauf abzielt, dass der einzelne Eingangswert unverändert in die Liste übernommen wird (sofern noch nicht vorhanden).

Die Variable accountIds enthält zur Laufzeit aufgrund dieser Konfiguration eine Liste mit mindestens einem und maximal drei unterschiedlichen Long-Werten, die auf je ein Benutzer- oder Gastbenutzerkonto verweisen.

Positive Long-Werte verweisen dabei auf Benutzer und negative Werte auf Gastbenutzer.

images/download/attachments/201662684/image2022-2-15_11-32-12-version-1-modificationdate-1742198707452-api-v2.png

Für den zweiten Schritt wird innerhalb einer geeignet parametrierten Ausführen als-Ereignisaktion zunächst ein geeigneter Anmeldekontext hergestellt, damit ausreichender Zugriff auf die Konten besteht, die gelesen werden sollen. Im Beispiel (im Bild nicht zu sehen) wird die Rolle "Super user" beansprucht. Damit besteht unabhängig von der Auswahl einer bestimmten "Firma" Vollzugriff auf alle Konten.

Der Abruf der Konten für das Kontextmenü per Suche (Ereignisaktion) muss in zwei Schritten erfolgen, da jeweils nur ein bestimmter Entitätstyp (Benutzer oder Gastbenutzer) vom Server abgefragt werden kann.

Das Bild rechts zeigt die Konfiguration für die Suche (Ereignisaktion) für die Entität Benutzer:

  • Der Parameter Ergebnis speichern als definiert den Variablennamen users für den Rückgabewert.

  • Mit dem Modus "Suchwert" wird der Variablen users eine Liste von Instanzen der Entität zugewiesen, wenn für den Parameter Suche die Option "Suche" ausgewählt ist.

  • Die Bedingung prüft das Kriterium, dass der Wert der Feldprojektion für die "ID" (id) in der Liste der positiven Long-Werte in der Variablen accountIds enthalten ist. Der mit dem Variable-Wertauflöser verkette Regel-Listen Resolver gibt dabei Alle Werte als Liste zurück, die die Bedingung ">0" erfüllen.

    ANMERKUNG◄ Da es keine Benutzer-Konten mit negativen IDs gibt, könnte man auf die Einschränkung der accountIds auch verzichten. Dann würde ggf. die Vergleichsliste allerdings überflüssige Optionen enthalten.

Zur Laufzeit enthält die Variable users nach dem Ausführen der Suche (Ereignisaktion) eine Liste von Entitäten des Typs Benutzer, die auch leer sein kann, falls die Variable accountIds ausschließlich negative Werte enthält, die auf Gastbenutzer verweisen.

HINWEIS◄ Die Suche (Ereignisaktion) "findet" nur Benutzer, die im anwendbaren Anmeldekontext auch gelesen werden können. Dieser hängt hier von der Parametrierung der umgebenden Ausführen als Ereignisaktion ab. Wird diese unpassend gewählt, "fehlen" ggf. relevante Benutzer als Adressaten im Kontextmenü.

images/download/attachments/201662684/image2022-2-15_11-41-52-version-1-modificationdate-1742198707448-api-v2.png

Eine zweite Suche (Ereignisaktion), die die Entität Gastbenutzer betrifft definiert wiederum den Modus "Suchwert" und eine Suche vom Typ "Suche". Das Ergebnis ist eine Liste von Gastbenutzer-Konten, die in die Variable guests (nicht im Bild) geschrieben werden soll.

Die Bedingung für diese Suche (Ereignisaktion) verwendet die rechts dargestellte Konfiguration. Diese erfolgt analog zur Bedingung für die Benutzer (s. oben) mit den folgenden wichtigen Unterschieden:

  • Der Regel-Listen Resolver (rechts im Bild) schränkt die Liste aus der Variablen accountsId diesmal auf negative Long-Werte ein, die als Referenzen auf Gastbenutzer interpretiert werden.

  • Da die Feldprojektion für die "ID" der Gastbenutzer (links im Bild) ausschließlich positive Wert liefert, muss das Vorzeichen der negativen Vergleichswerte aus der Variablen accountIds umgekehrt werden. Dies ermöglicht der Berechne Wert-Wertauflöser, der zu diesem Zweck innerhalb eines verketteten Sammle Werte-Wertauflöser eingesetzt wird, um den Wert zum Sammeln zu definieren.

  • Im Berechne Wert-Wertauflöser definiert die "Formel" -input die Vorzeichenumkehr für den Eingabewert (input).
    ANMERKUNG◄ Alternativ könnte hier auch die Formel abs(input)verwendet werden, um das Vorzeichen zu "eliminieren". Da der Regel-Listen Resolver ausschließlich negative Werte als Teilmenge aus den Werten in der Listenvariable accountIds liefert, macht das hier keinen Unterschied.

  • Der unterhalb verkettete Eingabeobjekt (Typsicher)-Wertauflöser wandelt das Berechnungsergebnis ausdrücklich in einen Long-Wert um, damit dieser Datentyp für den Abgleich mit der Datenbank sichergestellt ist.

Zur Laufzeit enthält die Variable guests nach dem Ausführen der Suche (Ereignisaktion) eine Liste von Entitäten des Typs Gastbenutzer, die auch leer sein kann, falls die Variable accountIds ausschließlich positive Werte enthält, die auf Benutzer verweisen.

HINWEIS◄ Die Suche (Ereignisaktion) "findet" nur Gastbenutzer, die im anwendbaren Anmeldekontext auch gelesen werden können. Dieser hängt hier von der Parametrierung der umgebenden Ausführen als Ereignisaktion ab. Wird diese unpassend gewählt, "fehlen" ggf. relevante Gastbenutzer als Adressaten im Kontextmenü.

images/download/attachments/201662684/image2022-2-16_9-54-49-version-1-modificationdate-1742198707350-api-v2.png

Der dritte Schritt soll die in den Variablen users und guests gesammelten Konten zusammenführen und eine vereinigte Liste für Benutzer und Gastbenutzer zurückgeben.

Da diese Liste von Konten direkt die Auswahloptionen für das zu öffnende Kontextmenü definieren soll, kann diese Aufbereitung direkt in der Öffne Kontextmenü-Ereignisaktion untergebracht werden:

  • Im Parameter Elemente werden die Listen aus den Variablen users und guests zunächst durch einen Erzeuge Liste-Wertauflöser als Liste von Listen (mit zwei Einträgen) zusammengefasst. Per Verkettung folgt unterhalb ein Sammle Werte-Wertauflöser, in dem die Option Listen vereinen gesetzt wird. Als Wert zum Sammeln wird ein Objekt-Feld-Wertauflöser ohne Feldauswahl verwendet, damit die Konten aus den beiden Quelllisten komplett als Einträge in die "vereinigte" Liste übergehen.

  • Der Beschriftungsausdruck verkettet den Spracheintrag "Hinweis" ((common,info]) in Verbindung mit diversen Literalen mit Feldinhalten ({username}, {address.name1}) aus dem anzuzeigenden Konto, um die Beschriftung für den Kontextmenüeintrag aufzubauen.

    WICHTIG◄ Bzgl. {username} ist dabei zu berücksichtigen, dass der Aufbau des Kontextmenüs zur Laufzeit auch dann ein clientseitiger Lesezugriff (s. WICHTIG-Hinweis in der Einleitung) auf das jeweilige Konto gilt, wenn die Öffne Kontextmenü-Ereignisaktion innerhalb einer Ereignisbehandlung ausgeführt wird. Nur deshalb liefert der Zugriff auf das Feld username auch für Gastbenutzer nicht "kein Wert" (null), sondern den loginToken, während der Zugriff auf das Feld address.name1 für Gastbenutzer tatsächlich "kein Wert" (null) ergibt, so dass wie im Bild unten nur "leere Klammern" erscheinen:

    images/download/attachments/201662684/image2022-2-15_14-8-18-version-1-modificationdate-1742198707434-api-v2.png



    Der folgende Ausbauschritt illustriert mehr Details dazu.

images/download/attachments/201662684/image2022-2-15_13-0-17-version-1-modificationdate-1742198707440-api-v2.png

Aufgrund der bisherigen Konfiguration erscheinen im Kontextmenü die Benutzer immer oberhalb der Gastbenutzer und jeweils in der Reihenfolge, in der sie von der zugehörigen Suche (Ereignisaktion) zurückgegeben werden.

Auch wenn der Reihenfolge bei maximal drei Einträgen keine große Bedeutung zukommt, soll deren Effekt hier demonstriert werden:

An die bestehende Verkettung für den Parameter Elemente innerhalb der Öffne Kontextmenü-Ereignisaktion wird ein Liste sortieren-Wertauflöser angehängt, der das Feld username als Vergleichswert definiert.

  • Durch die Verkettung mit einem In Großbuchstaben-Wertauflöser wird außerdem erreicht, dass beim Sortieren Großbuchstaben und Kleinbuchstaben "gleich behandelt" werden. Anderenfalls werden sonst Großbuchstaben vor Kleinbuchstaben einsortiert.

Laufzeitbeispiel:

images/download/attachments/201662684/image2022-2-15_14-42-43-version-1-modificationdate-1742198707423-api-v2.png

  • Das Sortierergebnis erscheint korrekt. Der im Bild hervorgehobene Gastbenutzer erscheint mit der führenden Ziffer "2" im username (alias loginToken) vor den Benutzerkonten, deren "Benutzername" ebenfalls aufsteigend sortiert erscheint. Das Gastbenutzerkonto im Beispiel wurde vom Benutzer Q erstellt von danach von QQQ geändert.

Allerdings trügt der Schein, wie eine weitere Stichprobe im Kontext eines anderen Gastbenutzers belegt:

images/download/attachments/201662684/image2022-2-15_14-53-38-version-1-modificationdate-1742198707420-api-v2.png

images/download/attachments/201662684/image2022-2-15_14-39-10-version-1-modificationdate-1742198707426-api-v2.png

Wie im letzten "Laufzeitbeispiel" (oben) zu sehen, greift die Sortierung zwischen mehreren Gastbenutzer-Einträgen im Kontextmenü mit der bisherigen Konfiguration nicht. Der mit der Ziffer "6" beginnende Eintrag müsste sonst an Position 2 erscheinen. Der Hintergrund:

  • Obwohl der Aufbau des Kontextmenüs durch Öffne Kontextmenü clientseitig erfolgt, werden die Wertauflöser für die Elemente serverseitig verarbeitet, jedenfalls wenn die Ereignisaktion Teil einer Ereignisbehandlung ist, was im Kontext der Fall ist.

  • Da das Liste sortieren serverseitig erfolgt, greift der Objekt-Feld-Wertauflöser für den username im Vergleichswert für Gastbenutzer ins leere. Der loginToken wird im Unterschied zum clientseitigen Zugriff nicht automatisch als Fallback zugeordnet. Damit lautet für alle Gastbenutzer der Vergleichswert "kein Wert" (bzw. "").

Die Konfiguration kann - z. B. wie rechts gezeigt - angepasst werden, um dieses Problem zu neutralisieren:

  • Im Bild wurde der Objekt-Feld-Wertauflöser für den username ersetzt durch eine Textverkettung für die Felder username und loginToken. Da bei einem serverseitigen Lesezugriff auf ein Benutzer- oder Gastbenutzerkonto jeweils nur eines der beiden Felder einen Wert zurückgibt, ergibt die Textverkettung die "Vertretungsregelung" für den username, die clientseitig automatisch greift. Ergebnis:

images/download/attachments/201662684/image2022-2-15_17-37-34-version-1-modificationdate-1742198707414-api-v2.png

images/download/attachments/201662684/image2022-2-15_14-57-0-version-1-modificationdate-1742198707417-api-v2.png

ANMERKUNG◄ Falls das Kontextmenü nicht über eine Ereignisbehandlung sondern per Client Workflow aufgebaut wird, greift die Fallback-Regelung für den username auch beim Liste sortieren, so dass auf die zuletzt hinzugefügte Textverkettung verzichtet werden kann. Allerdings steht in einem Client Workflow die Ausführen als-Ereignisaktion nicht zur Verfügung, so dass für die Suche nach den Konten (im zweiten Schritt) ausreichende Leseberechtigungen im für den Client Workflow anwendbaren Anmeldekontext gewährleistet sein müssen.