Siehe auch: Abfragekonfigurator, Such API, Suche (Formulardesigner), Tupel Suche (Formulardesigner)
Ereignisaktion - Kurzfassung
Zweck: Sucht Daten in der Datenbank von Lobster Data Platform / Orchestration und speichert das Ergebnis in einer Variablen.
Tooltip
Verwendung: Die analog zum Abfragekonfigurator konfigurierbare "Suche" für die ausgewählte "Entität" überträgt abhängig vom ausgewählten "Modus", den ersten oder mehrere Rückgabewerte aus der Datenbank in die per "Ergebnis speichern als" angegebene Variable. Im Block "Suche anpassen" können Ereignisaktionen konfiguriert werden, die vor dem Ausführen der Suche ausgeführt werden. Dabei gilt die Suche als Bezugsobjekt, sodass ihre Definition "angepasst" werden kann.
Parameter:
Ergebnis speichern als: Variablenname
Entität: der gesuchte Entitätstyp
Modus: bestimmt den Rückgabewert
↓ Modus / Suche →
Suche
Tupel-Suche
CSV-Suche
Erstes Ergebnis
eine Entität
ein Tupel-Datenobjekt
erster Tupel als CSV-Zeile
Suchwert
(Liste von Ergebnissen)
Liste von Entitäten
mehrere Tupel-Datenobjekte
mehrere CSV-Zeilen
Suchergebnis
(wie im Abfragekonfigurator)
SearchResult
(Datenobjekt)
TupleSearchResult
(Datenobjekt)
CsvSearchResult
(Datenobjekt)
Suche: spezifische Parameter für Sucharten (Suche, Tupel/CSV-Suche) analog Abfragekonfigurator
Output: Ergebnisdaten in der angegebenen Variablen
Hinweis: Die Suche berücksichtigt die Zugriffsrechte für den Anmeldekontext der aktuellen Sitzung bzw. abweichende Einstellungen innerhalb einer Ausführen als-Ereignisaktion
Eine Suche (Ereignisaktion) "sucht" über die Such API Daten von Entitäten in der Datenbank von Lobster Data Platform / Orchestration und speichert abhängig vom ausgewählten "Modus", den ersten Treffer (sofern vorhanden) oder eine Datenstruktur mit mehreren Rückgabewerten in einer Variablen.
Hintergrund zur Such-API
Im Unterschied zu einem direkten Zugriff auf die Datenbank, der über die Ereignisaktion SQL-Abfrage ausführen auch realisiert werden kann, berücksichtigt die Such API Zugriffsrechte für einen spezifischen Anmeldekontext, der entweder durch die Sitzung oder - im Kontext einer Ausführen als-Ereignisaktion - abweichend von der aktuellen Sitzung definiert ist. Die Such API unterstützt außerdem die Abfragedefinition per Editor mit grafischen Benutzerschnittstellen für Projektionen, Einschränkungen, Joins, Wertauflöser usw.) was den Umgang mit den intern oft über mehrere Tabellen verteilten Daten effizient ermöglicht, ohne dass dazu SQL-Code erstellt, das interne Datenmodell im Detail verstanden oder Eigenheiten des verwendeten Datenbanksystems berücksichtigt werden müssten. Da die Such API auch in anderen Kontexten verwendet wird (Abfragekonfigurator, Eigene Übersichten, Verhalten, usw.) können außerdem bestehende Konfigurationen "Abfragen" (oder Teile davon) bei Bedarf durch Kopieren und Einfügen ausgetauscht werden.
Konzeptionelle Parallelen zwischen einer Datenbankabfrage (per
SELECTin SQL) und der Struktur einer "Suche" spiegeln sich auch im Sprachgebrauch rund um die "Suche".
►ANMERKUNG◄ Gerade vor dem Hintergrund vordergründiger Ähnlichkeiten ist Aufmerksamkeit für Unterscheide angebracht und Skepsis gegenüber ungeprüften Annahmen zu empfehlen!
Funktional sind für die Suche (Ereignisaktion) drei unterschiedliche Suchtypen (Parameter Suche) relevant: Suche, Tupel-Suche und CSV Suche
In Verbindung mit drei Auswahlmöglichkeiten für den Parameter Modus (bzgl. Rückgabewert) ergibt sich die folgende Kombinatorik von Einsatzszenarien für eine Suche (Ereignisaktion):
↓ Modus / Suche → | |||
|---|---|---|---|
Erstes Ergebnis | eine einzelne Entität Beispiel: eine Adressbuch-Entität ( Wert (value) der Ergebnisvariablen | ein Tupel-Datenobjekt (eine "Zeile" einer Liste) Beispiel: ID und Name einer Adressbuch-Entität Wert (value) der Ergebnisvariablen | erster Tupel als CSV-Zeile Beispiel: ID und Name einer Adressbuch-Entität Wert (value) der Ergebnisvariablen
|
Suchwert | eine Liste von Entitäten Beispiel: zwei Adressbuch-Entitäten ( Wert (value) der Ergebnisvariablen | mehrere Tupel-Datenobjekte ("Zeilen" einer Liste) Beispiel: ID und Name zweier Adressbuch-Entitäten ( Wert (value) der Ergebnisvariablen | mehrere CSV-Zeilen Beispiel: ID und Name einer Reihe von Adressbuch-Entitäten ( Wert (value) der Ergebnisvariablen |
Suchergebnis | Datenobjekt vom Typ "Suchergebnis"( Beispiel: zwei Adressbuch-Entitäten ( Wert (value) der Ergebnisvariablen | Datenobjekt vom Typ "Ergebnis Tupelsuche"( Beispiel: zwei Adressbuch-Entitäten ( Wert (value) der Ergebnisvariablen | Datenobjekt vom Typ "CSV-Suchergebnis" Beispiel: ID und Name einer Reihe von Adressbuch-Entitäten Wert (value) der Ergebnisvariablen |
Konfiguration

Unabhängig von anderen Parametern muss im Parameter Ergebnis speichern als ein Variablenname angegeben werden, über den nach fehlerfreiem Verlauf der Suche auf den Rückgabewert zugegriffen werden kann.
Der Datentyp des Rückgabewerts variiert abhängig von den Einstellungen für Modus und Suche (s. Matrix oben). Im Fall einer Suche ist zusätzlich die Auswahl für die Entität relevant.
Für jede Suche muss der Typ einer Entität ausgewählt werden, die als primäres Ziel der Suche betrachtet wird.
Ähnlich wie im
FROM-Abschnitt desSELECT-Statements in einer Datenbankabfrage können über die Such API zusätzlich Daten von Entitäten anderer Typen über Joins eingebunden werden.Auch Einschränkungen und - soweit anwendbar - Projektionen können direkt oder über Joins auf Daten "fremder" Entitäten zugreifen und diese in Beziehung zur primären Entität setzen.
Als Modus muss eine der folgenden Optionen für die Übergabe der Suchergebnisse in die Variable ausgewählt werden:
Erstes Ergebnis (Standard) begrenzt die Rückgabe auf den ersten "Treffer", sofern es überhaupt einen gibt.
Suchwert gibt alle Ergebnisse der Suche als Liste zurück, z. B. eine Liste von Sendungen, falls eine Suche nach dieser Entität ausgeführt wird.
Suchergebnis gibt alle Ergebnis der Suche als Suchergebnis-Objekt zurück. Dieses Objekt enthält die Ausgabe von Modus Suchwert im Objekt-Feld result und weitere Informationen zur Suche in anderen Feldern (z. B.
count).
Die Auswahl für Suche definiert den Typ der Suche: Suche, Tupel-Suche oder CSV Suche.
Sobald für den Parameter Suche eine Auswahl getroffen ist, erscheinen unterhalb weitere Parameter, mit denen die Suche analog zum im Abfragekonfigurator definiert werden kann.
Über das im Bild rechts oben eingeblendete Kontextmenü für den Parameter Suche kann die komplette Konfiguration über die Lobster Data Platform / Orchestration-Zwischenablage kopiert oder ausgeschnitten und in einem beliebigen Kontext, der sich auf die Such API bezieht, wieder eingefügt werden. Die Option Einfügen erscheint nur, wenn die Zwischenablage bereits eine Suchdefinition enthält. Diese spezielle Zwischenablage ermöglicht nicht nur den Austausch von Suchdefinitionen, z. B. für Tests mit dem Abfragekonfigurator. Sie kann auch verwendet werden, um beim Editieren einen bestimmten Änderungsstand "einzufrieren", damit dieser bei Bedarf später wiederhergestellt werden kann. Außerdem können natürlich auch einzelne Komponenten wie Projektionen, Joins oder Einschränkungen ausgeschnitten, kopiert und eingefügt werden, sofern Quell- und Zielkontext kompatibel sind. |
|
Beispiel
Bei der Anlage von Sendungen soll über ein Verknüpfte-Entitätsattribut (vom Typ "Sendung zu Bestellposition") im Kopf der Sendung ein eindeutiger Bezug zu genau einer Position einer Bestellung identifiziert werden können, auf die sich diese Sendung bezieht.
Das Löschen von Bestellungen soll unzulässig sein, solange Sendungen existieren, die sich auf Positionen der zu löschenden Bestellung beziehen. Beim Versuch eine solche Bestellung zu löschen soll eine Meldung wie die folgende ausgegeben und das "Löschen" unterbunden werden:

Konfiguration:
Eine Ereignisbehandlung wird wie rechts abgebildet konfiguriert:
|
|
| |
Die einleitende Suche (Ereignisaktion) wird wie folgt konfiguriert:
|
|
Aktionsblock "Suche anpassen"

Im Block "Suche anpassen" können Ereignisaktionen konfiguriert werden, die vor dem Ausführen der Suche ausgeführt werden. Dabei gilt die Suche als Bezugsobjekt, sodass ihre Definition "angepasst" werden kann.
Typisches Anwendungsbeispiel: Paging
Eine typische Verwendung zum Anpassen der Suche ist das Manipulieren der Parameter "Erstes Ergebnis" und "Maximale Ergebnisse", um über die Suche (Ereignisaktion) ein Paging für umfangreiche Datenmengen zu realisieren.
Für die folgende Konfiguration gehen wir davon aus, dass zwei Variablen firstResult und maxResults im Ausführungskontext für die Suche (Ereignisaktion) mit Long-Werten gefüllt sind, um das "Blättern" in einer umfangreichen Anzahl von Treffern zu ermöglichen.
Konfiguration:
Die rechts abgebildete Setze Werte-Ereignisaktion wurde dem "Suche anpassen"-Bock über das Kontextmenü für das
►HINWEIS◄ Da kein Zielobjekt definiert ist, beziehen sich die Objekt-Feld-Wertauflöser für die Zielwerte (links im Bild) auf die konfigurierte "Suche", die das Bezugsobjekt im "Suche anpassen"-Block gilt. Der Entitätstyp dieses Bezugsobjekts hängt davon ab, welche der Sucharten im Parameter "Suche" (s. oben) ausgewählt ist. Die Beschriftung im Kopf des "Suche anpassen"-Blocks variiert entsprechend ("Suche anpassen", "Tupel-Suche anpassen" oder "CSV-Suche anpassen"). |
|
Besonderes Anwendungsbeispiel: "Nachrüsten" einer Bedingung
Eine CSV Suche im Kontext einer Suche (Ereignisaktion) sieht per Standard keine "Bedingung" vor. Im Block "Suche anpassen" soll allerdings ausgehend von zwei Textwerten aus Variablen (propertyName und beginsWith)eine Einfache Feld-Einschränkung als "Bedingung" generiert werden.
Dafür soll folgende Konvention gelten:
Die Variable
propertyNamebenennt einen validen "Datenfeldpfad" für die gesuchte Entität, z. B.namefür das "Name"-Feld.Die Variable
beginsWithdefiniert eine Zeichenfolge, die ohne Beachtung der Groß-/Kleinschreibung am Beginn des Werts im betreffenden Datenfeld (propertyName) erwartet wird, etwaTEST.
Konfiguration:
Der Screenshot rechts zeigt die Konfiguration für Ereignisaktionen im "Suche anpassen"-Block einer Suche (Ereignisaktion), die eine "CSV-Suche" ausführen soll:
►HINWEIS◄ Falls die Konfiguration für die "Bedingung" der CSV-Suche doch eine oder mehrere (statische) Einschränkungen vorsehen sollte, überschreibt unsere Zuweisung diese komplett. Soll die erzeugte Einschränkung zusätzlich zu bestehenden Einschränkungen berücksichtigt werden, muss eine Such-Verknüpfung angepasst oder erzeugt werden, um je nach Bedarf entweder eine UND- oder eine ODER-Beziehung herzustellen. |
|
Besonderes Anwendungsbeispiel: Generieren eines "Suche"-Objekts
Über die Öffne View (Aktion) kann eine Übersicht für eine Entitätstyp mit einer "Suche" (bzw. "CSV-Suche" oder "Tupel-Suche")-Objekt anstelle von "Formulardaten" geöffnet werden. Dann wirkt die "Bedingung" aus der Suche wie eine "Einschränkung" für Eigene Übersichten. Falls es sich bei der geöffneten View um eine Eigene Übersicht handelt, wird die "Bedingung" aus der Suche mit der ggf. konfigurierten Einschränkung der Übersicht UND-verknüpft.
Da das Erstellen einer Bedingung per Automatisierung schnell aufwändig und unübersichtlich werden kann, wenn es um mehr als eine Einfache Feld-Einschränkung (s. oben) geht, kann eine Suche (Ereignisaktion) "missbraucht" werden, um das benötigte "Suche"-Objekt für Öffne View (Aktion) zu erzeugen.
Konfiguration:
Der Screenshot rechts zeigt die Konfiguration für eine Suche (für die Entität Firmen/Mandanten) innerhalb einer Suche (Ereignisaktion), die eigentlich nur dazu dient, im Kontext einer Ereignisbehandlung ein ►ANMERKUNG◄ Da die Ausführung der Suche nicht verhindert werden kann wir sie hier so konfiguriert, dass sie möglichst wenig Daten erzeugt. Als Modus ist deshalb "Erstes Ergebnis" ausgewählt, sodass in die Variable
►WICHTIG◄ In der nachfolgenden Öffne View (Aktion)-Ereignisaktion wird auf das |
|
Die rechts abgebildete Öffne View (Aktion)-Ereignisaktion öffnet eine Standard-"Firmenübersicht", für die die "Bedingung" aus dem ►WICHTIG◄ Falls in der Suche (Ereignisaktion) in der Variablen Es ist wichtig zu verstehen warum: Öffne View (Aktion) versucht nur dann aus dem Parameter Formulardaten eine Restriktion für die Zu öffnende View abzuleiten, wenn sein Wert dem Typ "Suche" ( |
|
►HINWEIS◄ Für alle relevanten Sucharten (Suche, Tupel-Suche und CSV Suche) besteht die Möglichkeit im Parameter Formulardaten auf das where-Feld innerhalb der Suche zuzugreifen. Dann wird versucht, die dort definierte Bedingung direkt (und falls nötig UND-verknüpft) als Einschränkung für die Zu öffnende View zu berücksichtigen. Dies gelingt allerdings nur, sofern innerhalb der Sucheinschränkung nicht auf Joins zugegriffen wird, die nicht über eine Verkettete Projektion komplett in die "Bedingung" integriert sind.







