Textverkettungsprojektion
Projektion - Kurzfassung
Zweck: Verbindet geeignete Rückgabewerte aus mehreren Verkettungsprojektionen zu einer gemeinsamen Zeichenfolge.
Die Textverkettungsprojektion verbindet geeignete Rückgabewerte aus mehreren Verkettungsprojektionen zu einer gemeinsamen Zeichenfolge.
Die Anzahl der Verkettungsprojektionen ist variabel. Dabei sind folgende Fälle zu unterscheiden:
Verkettungsprojektionen |
Rückgabewert |
Hinweise |
mehrere Projektionen |
Verkettung der in Zeichenfolgen umgewandelten Rückgabewerte aller Verkettungsprojektionen |
Standardfall "Verkettung"
Sonderfall "Typumwandlung zu String": |
genau eine Projektion |
Rückgabewert der einzigen Verkettungsprojektion |
Sonderfall "keine Verkettung"
|
keine Projektion |
Leerstring ("") |
Sonderfall "keine Projektion" |
Konfiguration
Parameter |
Typ |
Beschreibung |
Name |
String |
Der optionale Parameter Name kann verwendet werden, um der Projektion einen (Alias-)Namen zuzuweisen.
|
Verkettungsprojektionen |
||
|
Die Konfiguration für Verkettungsprojektionen wird in einem Aufklappbar (Expandable)-Element dargestellt, das initial immer "zugeklappt" erscheint.
|
|
|
Initial ist die Liste der Verkettungsprojektionen leer. Im Detailbereich erscheint dann nur die schreibgeschützte "Schablone" für die Konfiguration. Ein Klick auf das Prinzipiell können beliebige Projektionen als Verkettungsprojektion innerhalb der Textverkettungsprojektion eingesetzt werden, solange sie geeignete Rückgabewerte liefern. |
|
|
Wenn bereits Verkettungsprojektionen eingerichtet sind, fügt ein Klick auf das ►WICHTIG◄ Für jede angelegte Verkettungsprojektion-Instanz muss auch eine Konfiguration erfolgen, sonst tritt beim Ausführen der Suche eine Fehlermeldung (NullPointerException) auf. Eine "undefinierte" Verkettungsprojektion wie die folgende muss also noch per Klick auf das Menüsymbol (links) "konkretisiert" oder über das Mülltonne-Symbol (ganz rechts) wieder entfernt werden.
|
|
|
Um die Reihenfolge von bereits konfigurierten Verkettungsprojektionen nachträglich anzupassen, kann man diese einerseits über die Kontextmenüfunktionen "Kopieren" oder "Ausschneiden" in die Lobster Data Platform / Orchestration-Zwischenablage übernehmen, um sie an anderer Position wieder einzufügen. Andererseits kann man die Anordnung auch einfach in der Baumansicht (links im Editor) bearbeiten, indem man eine einzelne Verkettungsprojektion per Drag & Drop an die neue Zielposition verschiebt. Im konkreten Beispiel kann die "Verkettung" countryCode-zipcode in zwei Zügen umgewandelt werden in zipcode-countryCode. Diese Technik bietet sich auch an, wenn man eine zusätzliche Verkettungsprojektion vor der erstplatzierten Instanz hinzufügen möchte. Über das |
|
|
Die mehr oder weniger umfangreiche Liste der Verkettungsprojektionen kann per Klick auf das [-] Symbol des Aufklappbar (Expandable)-Elements wieder "zugeklappt" werden.
|
|
|
Ein Klick auf das Minus-Symbol (rechts oben) minimiert die Konfigurationsoberfläche, so dass die Textverkettungsprojektion nur noch insgesamt angezeigt wird. Dann erscheinen, wie im Bild links für den konkreten Fall zu sehen, die Spaltennamen für die enthaltenen Verkettungsprojektionen ihrerseits als Textverkettung. Allerdings ist dies nur der Fall, solange der Parameter Name nicht verwendet wird um ausdrücklich einen Spaltennamen (z. B. COUNTRY_ZIP) zuzuweisen. |
Beispiele
Typischer Anwendungsfall: Feldwerte verketten
Im Kontext einer CSV-Suche für Benutzer sollen die Felder "Benutzername" (username) und "ID" (id) über einen Unterstrich (_) als Trennzeichen verkettet werden, um eine Spalte "proUser" zu befüllen.
Konfiguration:
Der Screenshot rechts zeigt die Konfiguration für die Textverkettungsprojektion:
|
|
Laufzeitbeispiel:
proUser
admindent_4151
adent2_2653
adent_2651
...
Besonderer Anwendungsfall: Typumwandlung zu Zeichenfolge (String)
Im Allgemeinen referenzieren die Felder "Erstellt von" (creatorId) und "Zuletzt geändert von ID" (lastModifierId) einer Entität eines beliebigen Typs direkt den Wert im Feld "ID" (id) des betreffenden Benutzerkontos.
Das jeweilige Long-Feld (creatorId bzw. lastModifierId) muss allerdings nicht nur Benutzer referenzieren können, sondern auch Gastbenutzer. Schließlich können diese, wenn ausreichend berechtigt, auch für das "Erstellen" oder "Ändern" einer Entität verantwortlich sein.
Die "ID"-Werte für Benutzer und Gastbenutzer sind nur innerhalb des jeweiligen Entitätstyps eindeutig. Beim Referenzieren (creatorId bzw. lastModifierId) wird die "ID" eines Gastbenutzers deshalb als negativer Long-Wert abgebildet.
Wenn im Kontext einer Suche Detaildaten für referenzierte Gastbenutzer einbezogen werden sollen, erfordert die "Vorzeichenumkehr" in der Referenz besondere Vorkehrungen.
Im konkreten Anwendungsfall soll eine Subselect Projektion den "Login Token" des Gastbenutzers ermitteln, der im Feld "Erstellt von" durch einen negativen Referenzwert "indirekt" referenziert wird.
Dabei ist zu berücksichtigen:
Für normale Benutzer liefert die rechts abgebildete Feld Einschränkung in der Bedingung einer Subselect Projektion das passende Benutzerkonto (id) zur Referenz im Feld "Erstellt von"(_parentQuery.creatorId) der Entität, auf die sich die übergeordneten Suche bezieht. Der Verglecih bezieht sich hier auf beiden Seiten (Prüfwert/Vergleichswert) auf Long-Werte. |
|
Für Gastbenutzer muss in der Bedingung der Subselect Projektion für eine der beiden Seiten (Prüfwert/Vergleichswert) ein "Vorzeichenwechsel" erfolgen, da die interne "ID" für einen Gastbenutzer ja nicht wirklich negativ ist. Leider stellt Lobster Data Platform / Orchestration über Projektionen keine Berechnungsfunktionen bereit. Stattdessen müssen wir buchstäblich "vergleichbare" Werte mit anderen Mitteln fabrizieren, um Referenzen für Gastbenutzer auflösen zu können. |
Konfiguration:
Die folgende Konfiguration zielt darauf ab, ...
... negative Werten im Feld "Erstellt von" (creatorId) in eine Zeichenfolge umzuwandeln und ...
... ausgehend von den positiven Werten für die "ID" (id) der referenzierten Gastbenutzer vergleichbare Zeichenfolgen herzustellen.
Beide Aufgaben können per Textverkettungsprojektion gelöst werden, wie die folgende Konfiguration für die Bedingung zeigt:
Auf der linken Seite (Prüfwert) wird die Textverkettungsprojektion verwendet, um der positiven "ID" (id) in der Subselect Projektion zu bewertenden Gastbenutzer-Kontos ein Minuszeichen (-) voranzustellen. Der Long-Wert wird dabei mi Zuge der Verkettung automatisch in einen String umgewandelt.
Auf der rechten Seite (Vergleichswert) dient die Textverkettungsprojektion ausschließlich dazu, den negativen Wert aus der Referenz formal in einen String umzuwandeln. Dies wird dadurch erreicht, dass der Rückgabewert der Feldprojektion für das "Erstellt von"-Feld (_parentQuery,.creatorId) eine zweite Verkettungsprojektion mit einem statischen Leerstring ("") verkettet wird.
►ANMERKUNG◄ Abhängig vom verwendeten Datenbanksystem sind Vergleiche zwischen String- und Long-Werten auch ohne ausdrückliche Typumwandlung möglich. Dann könnte man diese Konfiguration etwas vereinfachen. Allerdings funktioniert die Bedingung dann ggf. nicht mehr, wenn ein Wechsel des Datenbanksystems vorgenommen bzw. die Konfiguration auf ein Lobster Data Platform / Orchestration-System übertragen wird, das ein anderes Datenbanksystem verwendet. Mit der ausdrücklichen Typumwandlung zu String über die Textverkettungsprojektion sollte die Bedingung übergreifend einsetzbar sein.