Wert aus SQL-Abfrage


Wertauflöser - Kurzfassung

Zweck: Übergibt ein einzelnes natives SQL-SELECT-Statement an eine Datenbank, die für den Lobster Data Platform / Orchestration -Server über den angegebenen Alias erreichbar sein muss, und gibt die Ergebniszeilen als Liste von Client-Objekten zurück.

Siehe auch: SQL-Abfrage ausführen (Ereignisaktion)

images/download/attachments/177909604/image-2024-9-2_15-24-59-version-1-modificationdate-1725283499743-api-v2.png

Der Wert aus SQL-Abfrage-Wertauflöser übergibt ein einzelnes natives SQL-SELECT-Statement an eine Datenbank, die für den Lobster Data Platform / Orchestration -Server über den angegebenen Alias erreichbar sein muss, und gibt die Ergebniszeilen als Liste von Client-Objekten zurück.

Im Unterschied zur SQL-Abfrage ausführen-Ereignisaktion können mit dem Wert aus SQL-Abfrage-Wertauflöser ausschließlich SELECT-Statements ausgeführt werden. Der Wertauflöser gibt deren Rückgabewerte als Liste von Client-Objekten zurück. Jedes Client-Objekt repräsentiert dabei eine Ergebniszeile. Die "Spaltennamen" der Abfrage (Projektionen) erscheinen als Felder jedes Client-Objekts in der Liste. Abhängig vom Datenbanksystem erscheinen die Spaltennamen dabei entweder einheitlich in Großbuchstaben, einheitlich in Kleinbuchstaben oder unter Berücksichtigung von Groß- und Kleinschreibung. In jedem Fall muss die jeweilige Schreibweise bei Zugriff auf die Datenfelder in Lobster Data Platform / Orchestration (z. B. über einen Objekt-Feld -Wertauflöser) exakt ("case-sensitiv") übereinstimmen.
HINWEIS ◄ Falls eine Abfrage keine Zeilen zurückgibt, enthält die Ergebnisvariable eine leere Liste , die eine Prüfung per Ist leer erfüllt, aber nicht einen Vergleich wie " Ist Gleich 'kein Wert'".

Das SQL-Statement kann die Werte von Variablen aus dem Kontext der aktuellen Ereignisbehandlung über typsichere Platzhalter entsprechend der Lobster Data Platform / Integration Abfragesyntax einbeziehen.

Konfiguration

Der Parameter Alias kann wahlweise als statischer Text oder als Rückgabewert eines Wertauflösers bestimmt werden. Er muss auf eine Datenbank verweisen, auf die der Lobster Data Platform / Orchestration-Server zugreifen kann.

Der Parameter SQL-Query definiert das auszuführende SQL-SELECT-Statement in der nativen Syntax der per Alias adressierten Datenbank, ggf. unter Berücksichtigung von typsicheren Platzhaltern, an deren Stelle zur Laufzeit der Wert je einer Variablen aus dem Kontext der Ereignisbehandlung eingesetzt wird.

  • Für die Definition dieser Platzhalter greift die Lobster Data Platform / Integration Abfragesyntax mit der Struktur @<index>:<typ>@, also etwa @1:s@ für einen String-Wert oder @2:t@ für einen Timestamp.

  • Der <index> muss dabei eine positive Ganzzahl sein, die auch als Variablenname innerhalb der Konfiguration verwendet wird. Die verwendeten Werte müssen dabei nicht lückenlos und aufsteigend vergeben werden.

  • Als <typ> muss ein Kennbuchstabe für einen Datentyp angegeben werden ( "l" long, "s" string, ... komplette Liste s. Lobster Data Platform / Integration Abfragesyntax), der zum Verwendungszweck für den Platzhalter passen muss.

  • Für alle in der SQL Query verwendeten Platzhalter muss explizit ein korrespondierender Variablenname mit einem Wertauflöser konfiguriert werden, dessen Rückgabewert dem Datentyp des Platzhalters entsprechen oder zumindest geeignet konvertierbar sein muss.

  • Derselbe Variablenname kann von mehreren Platzhaltern referenziert werden, die bei Bedarf sogar unterschiedliche Datentypen spezifizieren können, solange jeder zur Laufzeit auftretende Wert in alle Ziel-Datentypen konvertiert werden kann.

ANMERKUNGPlatzhalter können ausschließlich an Positionen des SQL-Statements verwendet werden, die Werte betreffen, und nicht etwa um Feld- oder Tabellennamen oder Schlüsselwörter der Syntax dynamisch zuzuordnen. Allerdings kann der Wert für den Parameter SQL Query insgesamt dynamisch aufgebaut werden (z. B. per Textverkettung), um entsprechende Flexibilität zu erreichen.

Beispiel

Das Feld "Ersteller" (creatorId) einer Entität verweist über einen Long-Wert auf das Konto des Benutzers (s. Benutzer) oder Gastbenutzers (s. Gastbenutzer), der die Entität erstellt - also erstmalig gespeichert - hat. Dabei verweist eine positive creatorId auf die ID eines Benutzers, während ein negativer Wert für die creatorId auf einen Gastbenutzer als Ersteller hinweist. Die Möglichkeit, dass Gastbenutzer Entitäten erstellen sei im folgenden Beispiel allerdings ausgeschlossen, so dass ausschließlich positive Werte für die creatorId vorkommen können.

Ausgehend von einer creatorId soll in einer Benachrichtigung der Benutzername des betreffenden Benutzers als "Urheber" der Entität identifiziert werden. Über die Nachschlagefunktion für Entitäten des Eingabeobjekt (Typsicher)-Wertauflösers kann dies einfach erreicht werden.

Der Zugriff auf das Benutzerkonto über die creatorId per Eingabeobjekt (Typsicher)-Wertauflöser scheitert allerdings, wenn das betreffende Konto seit dem Erstellen der Entität gelöscht wurde. Auch eine Suche würde keinen Treffer liefern, da ein gelöschtes Benutzerkonto in der betreffenden Tabelle der Lobster Data Platform / Orchestration-Datenbank (hier: base_user) tatsächlich nicht mehr existiert.

Da Lobster Data Platform / Orchestration für Benutzer allerdings Informationen zum Änderungsverlauf vorhält, kann der Benutzername eines gelöschten Benutzerkontos in der "Änderungshistorie" nachgeschlagen werden. Der Wert aus SQL-Abfrage-Wertauflöser ermöglicht den dafür erforderlichen Lesezugriff auf die betreffende Datenbanktabelle, im vorliegenden Anwendungsfall: base_user_history.

Konfiguration:

Das folgende SELECT-Statement liefert den zuletzt verwendeten Benutzernamen eines Benutzerkontos für eine im Integer-Parameter 1 (Platzhalter @1:i) gegebene ID:

PostGreSQL-Beispiel
SELECT username FROM base_user_history WHERE id=@1:i@ ORDER BY entry_valid_from DESC LIMIT 1

Die rechts abgebildete Wertauflöserkette identifiziert den "Ersteller" der als Bezugsobjekt vorliegenden Entität entweder über das Feld "Benutzername" (userName) eines existierenden Benutzerkontos oder - falls das Konto gelöscht wurde - anhand des letzten relevanten Eintrags in der Änderungshistorie:

  • Der erste Objekt-Feld-Wertauflöser liefert den Long-Wert aus dem Feld creatorId, der das "Ersteller"-Konto identifiziert.

  • Der verkettete Eingabeobjekt (Typsicher)-Wertauflöser wird hier eingesetzt, um ausgehend von der ID das komplette Benutzerkonto (Typ "Benutzer"/User) nachzuschlagen.

  • Der verkettete zweite Objekt-Feld-Wertauflöser liefert den Wert des Felds "Benutzername" (username), sofern das Benutzerkonto existiert. Anderenfalls lautet der Rückgabewert $null.

  • Der verkettete Standardwert-Wertauflöser werten die im Parameter Standardwert definierten Wertauflöser genau dann aus, wenn der Eingabewert $null lautet. Sonst wird der Eingabewert unverändert ausgegeben. Der Standardwert ist wie folgt definiert:

    • Der Wert aus SQL-Abfrage-Wertauflöser bezieht sich per Alias scm auf die Datenbank von Lobster Data Platform / Orchestration.

    • Die SQL Query definiert das oben genannte SELECT-Statement als statischen Text mit einem Integer-Parameter (@1:i@).

    • Unter Variablenname 1 sind die Wertauflöser definiert, die zur Laufzeit die ID des gesuchten Benutzerkontos als Parameter in das Statement "einsteuern". Über die automatisch befüllte Variable entity kann dazu das Bezugsobjekt adressiert werden, um erneut auf dessen Feld "Erstellt von" (creatorId) zuzugreifen.

  • Abschließend soll aus dem ersten "Treffer" aus der SQL-Abfrage die Spalte username gelesen werden:

    • Die SQL Query spezifiziert zwar per LIMIT 1, dass maximal eine Ergebniszeile aus der Abfrage geliefert wird. Allerdings ist diese formal das einzige Element einer Liste (im Rückgabewert des Wert aus SQL-Abfrage-Wertauflösers). Deshalb kommt der Listenwert-Wertauflöser zum Einsatz, um das erste Element zu identifizieren, dessen Feld username als Fallback-Wert das bereits gelöschte Benutzerkonto identifizieren soll.

images/download/attachments/177909604/image-2024-9-3_9-6-30-version-1-modificationdate-1725347190104-api-v2.png