Auslösendes Ereignis

Wertauflöser - Kurzfassung

Zweck: Identifiziert das Ereignis, das zur Laufzeit die Ausführung der aktuellen Ereignisbehandlung ausgelöst hat.

images/download/attachments/177910558/image2022-7-19_9-15-29-version-1-modificationdate-1726035571729-api-v2.png

Der Auslösendes Ereignis-Wertauflöser identifiziert das Ereignis, das zur Laufzeit die Ausführung der aktuellen Ereignisbehandlung ausgelöst hat.

Der Rückgabewert ist das auslösende Ereignis (s. Ereignisse). Der Typ des Rückgabewerts wird in der Konfiguration als "Schnittstelle > zu Aktionsereignissen" angegeben, da zur Laufzeit auslösende Ereignisse unterschiedlicher Typen vorkommen können. Grundsätzlich sind dabei zwei Kategorien von echten Ereignissen zu unterscheiden:

  • Vordefinierte Ereignisse sind je nach Kategorie unterschiedlichen Statischen Aufzählungen zugeordnet. Jede Statische Aufzählung liefert dabei Ereignisse eines spezifischen konkreten Typs, z. B. "Allgemein" (de.lobster.scm.actionevent.CommonActionEvent).

  • Eigene Aktionsevents werden in der zugehörigen Dynamischen Aufzählung (Eigenes Aktionsevent) verwaltet. Der konkrete Typ von Eigenen Aktionsevents ist immer "Eigenes Aktionsevent" (de.lobster.scm.actionevent.CustomActionEvent).

Spezifische Wertauflöser ("Jede statische Aufzählung" bzw. "Jede dynamische Aufzählung", s. Statische Werte) definieren statische Werte aus den jeweiligen Aufzählungen, die in Regeln mit dem Rückgabewert des Auslösendes Ereignis-Wertauflösers verglichen werden können.

Als String-Abbildung für ein vom Auslösendes Ereignis-Wertauflösers zurückgegebenes "Ereignis" erscheint der interne "Name" (name) des jeweiligen Ausfzählungswerts, also z. B. "CREATE" für das vordefinierte Ereignis "Erstellen" aus der Kategorie Allgemein (Ereignisse)). Dieser interne Name kann als Information ausreichen, um in einer Hinweis anzeigen (Popup)-Ereignisaktion über das auslösende Ereignis zu informieren. Die Verwendung dieses Namens anstelle des Aufzählungswerts in einer Regel, die das auslösende Ereignis eindeutig identifizieren bzw. mit einer Liste von Vergleichswerten abgleichen soll, ist allerdings nur bedingt zu empfehlen, da es keinen Mechanismus gibt, der verhindert, dass ein interner Name aus einer Statischen Aufzählung für vordefinierte Ereignisse auch als Name für ein Eigenes Aktionsevent verwendet wird. Der Name identifiziert das Ereignis also nicht notwendigerweise eindeutig, wenn nicht zusätzlich eine Typprüfung für den Rückgabewert erfolgt.

HINWEIS◄ Im Zuge von Tests für Ereignisbehandlungen kann das auslösende Ereignis (über den Parameter "Aktionsevent") explizit ausgewählt werden. Falls der Auslösendes Ereignis-Wertauflöser innerhalb der Konfiguration der Ereignisbehandlung verwendet wird, können so spezifische Tests für jedes relevante auslösende Ereignis definiert werden. Als Standardwert für Tests, deren Definition kein "Aktionesevent" angibt, wird automatisch das "virtuelle" Ereignis TESTING (mit dem Typ de.lobster.scm.utils.testing.TestingManager$TestEvent) erzeugt.

Konfiguration

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

Beispiele

Lokalisierte Benachrichtigung über das auslösende Ereignis

Eine Ereignisbehandlung, die durch Ereignisse aus unterschiedlichen Kategorien ausgelöst werden kann, soll eine Benachrichtigung erzeugen, die die Lokalisierung für das auslösende Ereignis für die Aktuelle Sprache anzeigt.

  • Der Titel der Nachricht soll per Lokalisierung für die Aktuelle Sprache auf den konkreten Typ des Ereignisses hinweisen.

Laufzeitbeispiele:

Konfiguration:

Im Aktionsteil einer Ereignisbehandlung soll der Benutzer durch eine Hinweis anzeigen (Popup)-Ereignisaktion über das auslösende Ereignis informiert werden.

Wie rechts ersichtlich, wird die Hinweis anzeigen (Popup)-Ereignisaktion innerhalb einer Ausführen mit-Ereignisaktion platziert, die im Objekt Resolver den Auslösendes Ereignis-Wertauflöser verwendet.

Dies ist einerseits nützlich, weil der "Titel" und die "Meldung" abhängig vom auslösenden Ereignis definiert werden sollen.

Andererseits - und das ist hier besonders wichtig - wird die Variable entityClass für den Aktionsblock der Ausführen mit-Ereignisaktion automatisch mit dem Namen des konkreten Typs des auslösenden Ereignisses belegt, der zum Abrufen der Lokalisierungen in der Hinweis anzeigen (Popup)-Ereignisaktion (s. unten) benötigt wird.

images/download/attachments/177910558/image-2024-9-11_8-23-13-version-1-modificationdate-1726035792918-api-v2.png

Die Hinweis anzeigen (Popup)-Ereignisaktion muss wie rechts abgebildet konfiguriert werden, damit die gewünschten Lokalisierungen (oder ggf. Standardwerte) in der Benachrichtigung erscheinen:

  • Im Titel soll der lokalisierte Name für den Typ des auslösenden Ereignisses erscheinen.

    • Aufgrund der allgemeinen Konvention für die Lokalisierung von Typen soll dieser unter dem Resource Namen $name aus dem Bundle bezogen werden, das der Wert der Variablen entityClass innerhalb der Ausführen mit-Ereignisaktion identifiziert.

    • Der "Klassenname" (entityClass) soll auch als Standardwert ausgegeben werden. Er sollte nur für das Standard-Ereignis in Tests (s. o.) eine Rolle spielen.

    • Es sind keine Angaben für Parameter erforderlich.

    • Die Sprache für die Lokalisierung wird nicht definiert, so dass - soweit vorhanden - auf Lokalisierungen für die Aktuelle Sprache oder ersatzweise die Standardsprache zugegriffen wird, bevor auf den Standardwert zurückgegriffen wird.

  • Innerhalb der Meldung soll das auslösende Ereignis identifiziert werden.

    • Aufgrund der allgemeinen Konvention für die Lokalisierung von Aufzählungswerten soll die Lokalisierung aus dem Bundle für die Aufzählung entnommen werden, die deren "Klassenname" (in der Variable entityClass) identifiziert.

    • Als Resource wird auf die String-Abbildung des Rückgabewerts für das Auslösendes Ereignis zugegriffen, der im Ausführen mit-Aktionsblock als Bezugsobjekt für Wertauflöser gilt. Der Eingabeobjekt (Typsicher)-Wertauflöser stellt also nur die Umwandlung der Ereignisses als String mit dessen internen Namen sicher.

    • Der Standardwert soll hier der Einfachheit halber dieselbe Konfiguration wie für die Resource verwenden und nur den internen Ereignis-Namen ausgeben, auch wenn dieser ohne Bezug zur entityClass nicht unbedingt eindeutig ist. Während für vordefinierte Ereignisse mindestens in den Standard-Sprachen (Deutsch und Englisch) Lokalisierungen vorliegen sollten, muss ein Eigenes Aktionsevent nicht unbedingt lokalisiert werden. Auch das Standard-Ereignis für Tests (s. o.) ist nicht lokalisiert.

images/download/attachments/177910558/image-2024-9-11_8-29-43-version-1-modificationdate-1726036182664-api-v2.png images/download/attachments/177910558/image-2024-9-11_8-30-29-version-1-modificationdate-1726036228766-api-v2.png

Fallunterscheidung anhängig vom auslösenden Ereignis

Im folgenden Beispiel soll eine E-Mail-Versand-Ereignisaktion bei bestimmten Zugriffen auf ein Benutzer-Datenobjekt (Benutzerkonto) ausgelöst werden:

  • Beim "Erstellen" und "Löschen" eines Benutzers soll grundsätzlich eine Nachricht versendet werden.

  • Beim "Ändern" eines Benutzers (genauer: bei Änderungen an einem bereits angelegten Benutzerkonto) soll die Nachricht nur versendet werden, wenn die Änderung nicht mit der Rolle "Administrator" erfolgt.

Konfiguration:

images/download/attachments/177910558/image2019-5-10_16-46-55-version-1-modificationdate-1726035571731-api-v2.png

  • Die Ereignisbehandlung reagiert auf die Auslösenden Ereignisse "Ändern", "Löschen" und "Erstellen".

  • Die Prüfende Regel prüft per Typprüfung auf den Objekttyp "Benutzer".

  • Innerhalb der Wenn Dann Sonst-Aktion wird der Wertauflöser Auslösendes Ereignis verwendet, um festzustellen, ob "Erstellen" oder "Löschen" ausgelöst wurde ...

  • ... ODER ob die Anmeldung eine andere Rolle als "Administrator" verwendet (durch Not-Option negierte Rollenregel).

►ANMERKUNG◄ Sofern der Ereignisbehandlung keine weiteren Aktionen oder Bedingungen hinzugefügt werden sollen, könnte in diesem Beispiel die Prüfung auf das Aktionsereignis auch in die Prüfende Regel integriert werden.