Öffne Kontextmenü
Ereignisaktion - Kurzfassung
Zweck: Öffnet ein eigens zu diesem Zweck definiertes Kontextmenü an der aktuellen Mauszeigerposition im Client, um eine Auswahl zu ermöglichen.
Die Ereignisaktion Öffne Kontextmenü öffnet an der aktuellen Mauszeigerposition im Client ein Kontextmenü ausgehend von einer - ggf. eigens generierten - "Liste" von Auswahlmöglichkeiten.
Die Auswahl des Benutzers kann mit einem der folgenden Modi verarbeitet werden:
Entweder die Auswahl wird synchron und serverseitig verarbeitet. Dann wird die Ereignisbehandlung unterbrochen, bis durch die Auswahl des Benutzers ein Rückgabeobjekt für die nachfolgenden Ereignisaktionen zur Verfügung steht. Verstreicht eine parametrierbare Wartezeit (>0 Sekunden) ohne Auswahl, schließt sich das Kontextmenü automatisch.
Alternativ wird die Auswahl wird asynchron und ausschließlich clientseitig verarbeitet. Dann definiert ein Client Workflow Ereignisaktionen, die der Client ausführt sobald ein Rückgabeobjekt ausgewählt ist, während der Server die Ereignisbehandlung sofort nach dem Öffnen des Kontextmenüs fortsetzt.
In beiden Fällen kann der Benutzer das Kontextmenü durch Drücken der Esc-Taste oder eine Interaktion im umgebenden Fenster (wie z. B. ein Mausklick außerhalb des Kontextmenüs) ohne Auswahl schließen.
Beim Schließen ohne Auswahl wird "kein Wert" ($null) als Rückgabeobjekt an die auszuführenden Ereignisaktionen weitergegeben. Diese werden also immer nach dem Schließen des Kontextmenüs ausgeführt, so dass der Sonderfall "keine Auswahl" z. B. durch eine Wenn Dann Sonst- oder Ausführen mit-Ereignisaktion oder im Client Workflow durch eine geeignete "Prüfende Regel" abgefangen werden sollte.
Konfiguration
Parameter
|
|
Die weiteren Parameter betreffen das Verhalten des geöffneten Kontextmenüs in Bezug auf die Auswahl eines Eintrags durch den Benutzer. Abhängig vom ausgewählten Modus werden dabei unterschiedliche Konfigurationsmöglichkeiten angeboten: |
|
Als Modus ist per Standard die Option Auswahl zurückliefern vorbelegt, mit der das Kontextmenü synchron geöffnet wird.
|
|
Alternativ kann der Modus auf die Option Aktion im Client ausführen umgestellt werden, mit dem das Kontextmenü asynchron geöffnet wird, so dass die Ereignisbehandlung ohne eine Auswahl im geöffneten Kontextmenü abzuwarten unmittelbar fortgesetzt wird. Als einzige Aktion bei Auswahl steht die Option Client Workflow zur Verfügung. Mit der Auswahl dieser Option kann ein Client Workflow definiert werden, den die Ereignisbehandlung zur Laufzeit an den Client zur Ausführung beim Schließen des Kontextmenüs übergibt. Für den Kontext des Client Workflows gilt dabei:
►ANMERKUNG◄ In Verbindung mit dem Modus Aktion im Client ausführen bleibt das Kontextmenü grundsätzlich "unbegrenzt" geöffnet. |
|
Definition von Einträgen für das Kontextmenü
Grundsätzlich kann jede Liste verwendet werden, um über den Wertauflöser für Elemente ein Kontextmenü zu erzeugen. Lobster Data Platform / Orchestration bietet vielfältige Möglichkeiten Listen über Wertauflöser zu erzeugen oder aus bestehenden Datenquellen zu gewinnen. Die folgenden Beispiele greifen ausgewählte Techniken aus einem umfangreichen Lösungsraum heraus.
Auf der Basis der Standardwerte für die Parameter Beschriftungsausdruck (label), Datenfeld der Kindknoten (children) und Icon Ausdruck (icon) könnte eine statische Definition für ein Kontextmenü im JSON-Format wie folgt aussehen:
[ { "label" : "COMPASS" , "icon" : "fa://fal-compass" , "children" : [ { "label" : "Nord" , "icon" : "fa://fal-arrow-up" }, { "label" : "Ost" , "icon" : "fa://fal-arrow-right" }, { "label" : "Süd" , "icon" : "fa://fal-arrow-down" }, { "label" : "West" , "icon" : "fa://fal-arrow-left" } ] }, { "label" : "GPS" , "icon" : "fa://fal-satellite" } ] |
Über einen Objekt aus JSON erzeugen-Wertauflöser (s. a. Abschnitt "Beispiele" unten) kann aus der links abgebildeten JSON-Struktur eine "Liste" für den Parameter Elemente in einer Öffne Kontextmenü-Ereignisaktion erzeugt werden. Laufzeitbeispiel: Das Kontextmenü wird beim Klick auf einen Button geöffnet, um das Ziel einer Tour mehr oder weniger präzise angeben zu können.
|
Zur Gliederung von Einträge in derselben Ebene eines Kontextmenüs kann eine horizontale Linie erzeugt werden, indem der Liste an der fraglichen Position ein Element hinzugefügt wird, das für ein Feld type den Wert hline angibt.
►HINWEIS◄ Die horizontale Linie ist per Definition nicht als Menüeintrag auswählbar.Ein Eintrag im Kontextmenü erscheint deaktiviert, wenn das betreffende Element über ein Feld mit dem Namen disabled verfügt, dem der Wert true (als Boolescher Wert, nicht als Text!) zugeordnet ist.
►HINWEIS◄ Ein deaktivierter Eintrag mit Kindknoten zeigt zwar das ">" Symbol am rechten Rand, klappt aber die Kindknoten nicht auf. Eine Deaktivierung versteckt also ggf. einen kompletten Ast eines Menübaums.
Beide Möglichkeiten veranschaulicht die folgende Anpassung für das obige Beispiel:
[ { "label" : "COMPASS" , "icon" : "fa://fal-compass" , "children" : [ { "label" : "Nord" , "icon" : "fa://fal-arrow-up" }, { "label" : "Süd" , "icon" : "fa://fal-arrow-down" }, { "type" : "hline" }, { "label" : "Ost" , "icon" : "fa://fal-arrow-right" }, { "label" : "West" , "icon" : "fa://fal-arrow-left" } ] }, { "label" : "GPS" , "icon" : "fa://fal-satellite" , "disabled" : true } ] |
|
►ANMERKUNG◄ Zwecks einfacherer Darstellung verzichtet das Einführungsbeispiel auf zwei Aspekte in der Menüdefinition, die für die Praxis wichtig sein können: Die Beschriftung der Menüeinträge definiert statische Texte ohne Bezug zur Sprachverwaltung, sodass das Menü in allen Sprachen identisch erscheint. Außerdem bieten die auswählbaren Listenelemente kein Feld an, das ausschließlich der Identifikation des ausgewählten Eintrags dient. Die Auswahl des Benutzers müsste also anhand der Beschriftung oder des Icons im Rückgabeobjekt bzw. einer Kombination aus beiden Merkmalen identifiziert werden. Änderungen an diesen Merkmalen erzeugen dann auch Änderungsaufwand in den ausgelösten Ereignisbehandlungen. Das erste der folgenden Beispiele zeigt eine angemessenere Lösung für beide Aspekte auf.
Beispiele
Professionalisierung des Einführungsbeispiels
Zunächst soll gezeigt werden, wie die Konfiguration für das Einführungsbeispiel im Detail und "professioneller" umgesetzt werden kann, die einerseits eine sprachabhängige Beschriftung der Menüeinträge und andererseits eine unabhängige Identifikation der Auswahlmöglichkeiten sicherstellt.
Konfiguration:
Zunächst wird der statische Text für die Definition der Elemente wie unten links dargestellt angepasst. Dann werden die rechts gezeigten Einträge in der Sprachverwaltung angelegt.
[ { "key" : "COMPASS" , "icon" : "fa://fal-compass" , "children" : [ { "key" : "N" , "icon" : "fa://fal-arrow-up" }, { "key" : "E" , "icon" : "fa://fal-arrow-right" }, { "key" : "S" , "icon" : "fa://fal-arrow-down" }, { "key" : "W" , "icon" : "fa://fal-arrow-left" } ] }, { "key" : "GPS" , "icon" : "fa://fal-satellite" } ] Anstelle des labels wird jetzt ein eindeutiges Feld key bereitgestellt, das gleichzeitig die eindeutige Identifikation und damit den Ansatzpunkt für eine Lokalisierung der Einträge über die Sprachverwaltung (s. rechts) gewährleistet. |
|
Die Implementierung des Kontextmenüs innerhalb einer Ereignisbehandlung oder in einem Client Workflow kann auf dieser Basis wie unten dargestellt umgesetzt werden:
►ANMERKUNGEN◄
|
|
Kontextmenü aus dem Ergebnis einer Tupel-Suche aufbauen
Anforderung:
Innerhalb einer Erfassungsmaske sollen bestimmte Benutzerkonten in einem Kontextmenü zur Auswahl angeboten, um über das mailto-Protokoll das Erstellen einer E-Mail-Nachricht an dessen Adresse anzustoßen.
Detailanforderungen:
|
Laufzeitbeispiel:
|
Konfiguration:
Der gewünschte Ablauf kann in den folgenden Schritten komplett als Client Workflow, z. B. in einem Verhalten für den Button, abgewickelt werden:
|
|
Nachfolgend werden relevante Konfigurationen für jeden Schritt des Client Workflows erörtert:
Suchaktion |
|
|
|
Die Negation kann hier nur über eine Wenn ( Case ) Projektion dargestellt werden, was etwas umständlich wirkt, aber mit wenigen Klicks konfiguriert werden kann. Für das Kontextmenü ist wichtig, dass der als Literale Projektion zugewiesene Werte (true oder false) tatsächlich vom Datentyp Boolean sind und nicht etwa nur gleichlautende Textwerte. |
►ANMERKUNG◄ Abhängig von konkreten Anforderungen wären ggf. noch "Bedingungen" für die Suche (Ereignisaktion) festzulegen, da sonst alle "lesbaren" Benutzerkonten als Ansprechpartner erscheinen. Auf Details hierzu sei mangels Relevanz mit Blick auf das Kontextmenü verzichtet.
Öffne Kontextmenü |
|
Die Suche (Ereignisaktion) speichert alle zurückgegebenen Ergebniszeilen als Liste in der Variablen users, die damit im Wertauflöser für die Elemente für das zu öffnende Kontextmenü direkt verwendet werden kann:
|
|
Ausgewählten Ansprechpartner benachrichtigen ... |
|
Nach dem Schließen des Kontextmenüs sollte dringend eine Prüfung erfolgen, ob ein Benutzer ausgewählt wurde oder nicht. Dazu kann eine Wenn Dann Sonst-Ereignisaktion wie rechts dargestellt konfiguriert werden:
Laufzeitbeispiel:
►ANMERKUNG◄ Die hier verwendete starre Aufbaustruktur für die E-Mail-Adresse ist natürlich nur dann legitim, wenn gesichert ist, dass alle im Kontextmenü aufgelisteten Benutzer über dieselbe Domäne erreichbar sind und deren Mail-Adresse dort immer ihrem Benutzernamen für die Lobster Data Platform entspricht. In einer realen Situation wäre sicher eine aufwändigere Logik für die Ermittlung der E-Mail-Adresse angebracht, die z. B. weitere Daten aus dem Benutzerkonto einbeziehen könnte. |
|