Projektion - Kurzfassung
Zweck: Sammelte Werte für das Feld der Collection und bindet diese über das Feld für Join in die Suche ein.
Tooltip
Verwendung: Eine Collection Projektion liefert eine Liste von Werten aus der Projektion im Parameter Feld der Collection, die in einer über den Parameter Feld für Join definierten Beziehung zur Suche stehen.
Parameter:
Name definiert optional den Titel einer Ausgabespalte (soweit relevant). Per Standard wird der Name aus der Projektion für Feld der Collection bezogen.
Die Auswahl Feld für Join (Standard:
id) definiert den Pfad zu einem Schlüsselfeld, das steuert wie Teilmengen der gesammelten Werte als Listen in die Suche eingebunden werden.Die als Feld der Collection konfigurierte Projektion liefert die Werte, die "gesammelt" und als Liste in die Suche eingebunden werden sollen
Hinweis: Die Reihenfolge der Einträge innerhalb der per Collection Projektion bereitgestellten Liste ist "unsortiert" kann nicht per Konfiguration gesteuert werden.
Hinweis: Die Collection unterdrückt
$null-Werte aus der Projektion im Parameter Feld der Collection.

Eine Collection Projektion liefert eine Liste von Werten aus der Projektion im Parameter Feld der Collection, die in einer über den Parameter Feld für Join definierten Beziehung zur Suche stehen.
Liefert die als Feld der Collection konfigurierte Projektion "Kein Wert" (
$null), dann wird der Collection kein Eintrag hinzugefügt. Die Collection beinhaltet also ggf. weniger Einträge als die Datenquelle für das Feld für Join bereitstellt. Diese Charakteristik entspricht der für den Sammle Werte-Wertauflöser.
►HINWEIS◄ Weil die Collection$null-Werte ignoriert, kann eine Wenn ( Case ) Projektion kann im Kontext der Konfiguration für das Feld der Collection nützlich sein, um die folgenden Ziele (ggf. auch gleichzeitig) zu erreichen:Anstelle eines
$null-Werts in den Originaldaten kann ein konkreter Ersatzwert zugewiesen werden, der innerhalb der Collection "Leerstellen" (bzw. unbestimmte Werte) kennzeichnet.Umgekehrt können konkrete Werte abhängig von einer Bedingung durch "Kein Wert" (
$null) ersetzt werden, sodass die Collection nur eine Teilmenge der eigentlich verfügbaren Werte auflistet.
Als Feld für Join ist per Standard das Feld "ID" (id) vorbelegt, da die Collection Projektion typischerweise verwendet wird, um Daten zu sammeln, die in unmittelbarem Bezug zur gesuchten Entität stehen.
Um die Werte für die Collection zu "sammeln" erfolgt intern eine zusätzliche Datenbankabfrage, die Werte für das Feld der Collection in Verbindung mit Schlüsselwerten für das Feld für Join auflistet. Aus dieser "Master-Sammlung" wird über das Feld für Join jeder Entität in der Suche eine bestimmte Teilmenge als Wertliste zugeschlüsselt.
►WICHTIG◄ Die im Kontext der Collection Projektion ausgeführte Abfrage zum "Sammeln" von Werten erfolgt ohne Rücksicht auf Zugriffbeschränkungen, die im Kontext einer direkten Suche nach denselben Daten greifen würden. Intern besteht also (wie bei einem vollwertigen Join) Vollzugriff auf alle Instanzen der gesuchten Entität.
Was bedeutet das?
Solange für das Feld für Join der Standardwert "ID" (
id) ausgewählt ist oder keine Auswahl besteht, ist dies unkritisch, da die Collection Projektion effektiv nur Daten von Instanzen der gesuchten Entität "ausliefert", die auch direkt abgerufen werden könnten.Wenn ein anderes Feld für Join als "ID" (
id) ausgewählt wird, kann die Collection Projektion auch Daten von Instanzen "enthüllen", für die kein direkter Zugriff aber eine Beziehung zu einer abrufbaren Entität über das Feld für Join besteht.
Beispiel: Eine Suche für Firmen/Mandanten verwendet eine Collection Projektion, in der als Feld für Join das Feld "Besitzer" (ownerId) ausgewählt ist. Für jede direkt abrufbare Firma werden dann Werte (aus der als Feld der Collection definierten Projektion) als Liste zugeordnet, die in Verbindung mit irgendeiner Firma gesammelt wurden, die denselben "Besitzer" hat wie die direkt abrufbare Firma (mehr Details s. "Beispiele" unten).
Konfiguration
Parameter | Typ | Beschreibung |
|---|---|---|
Name |
| Der optionale Parameter Name kann verwendet werden, um der Projektion einen (Alias-)Namen zuzuweisen.
|
Feld für Join |
| Das Feld für Join bestimmt über welches Feld die als Collection bereitgestellten Werte in den Kontext der Suche eingebunden werden sollen. Der Parameter Feld für Join definiert einen Pfad zu einem Feld als Zeichenfolge, die per Direkteingabe oder Auswahl aus dem Dropdown festgelegt werden kann (Details s. Feldprojektion, Parameter "Feld"). Ohne Auswahl für das Feld für Join, wird das Feld "ID" ( |
Feld der Collection | Projektion | Für den Parameter Feld der Collection können beliebige Projektionen eingesetzt werden. Die Projektion bestimmt, welche Werte gesammelt und dann über das Feld für Join im Kontext der Suche zugeordnet werden. |
Beispiele
Einfaches Beispiel: Auflisten der zugeordneten Rollen je Benutzer
Eine Tupel-Suche für Benutzer soll für jeden Benutzer in Verbindung mit dem Feld "Benutzername" (username) eine Liste der im Benutzerkonto zugewiesenen Rollen ausgegeben werden.
Konfiguration:
Der Screenshot zeigt die Konfiguration für die Projektionen der Tupel-Suche:
►HINWEIS◄ Wir verzichten auf ausdrückliche Zuordnungen für den Parameter Name in beiden Projektionen, sodass die Feldnamen |
|
Laufzeitbeispiel:
Das Ergebnis der Tupel-Suche (rechts) zeigt neben dem Textwert ( ►ANMERKUNG◄ Mehr Information zur Rolle bietet das Benutzerkonto selbst nicht an. Per Datenobjekt Join könnten Detaildaten der Rolle einbezogen und dann auch in der Collection Projektion per Feld der Collection berücksichtigt werden. ►HINWEIS◄ Das XML-Format verdeutlicht auch, dass die Reihenfolge der | |
Einfaches Beispiel: Auflisten aller Benutzer mit demselben Besitzer
Eine Tupel-Suche für Benutzer soll in Verbindung mit dem Feld "Benutzername" (username) eine Liste der Benutzernamen aller Benutzer erscheinen, deren Konten sich auf dasselbe Firmenkonto als "Besitzer" (ownerId) beziehen, wie der betreffende Benutzer.
Der Screenshot rechts zeigt die Projektionen für eine Tupel-Suche:
|
|
Laufzeitbeispiel:
Das Ergebnis der Tupel-Suche (rechts) zeigt neben dem Textwert ( ►HINWEIS◄ Wie die Beispieldaten veranschaulichen sollen, taucht der in der Allerdings kann die Collection Projektion durchaus verwendet werden, um zu erreichen, dass in der | |
Komplexeres Beispiel: Auflisten aller anderen Benutzer mit demselben Besitzer
Abweichend vom vorherigen Beispiel soll erreicht werden, dass der in der username-Spalte ausgegebene "Benutzername" in der zugehörigen Liste in der SAME_OWNER-Spalte nicht erneut genannt wird. Die Liste soll also alle anderen Benutzer mit derselben "Besitzer"-Firma (ownerId) haben.
Konfiguration:
Da innerhalb der Collection Projektion keine beliebigen Bedingungen für die Zuordnung der gesammelten Daten formuliert werden können, müssen wir in unserer Suche einen Datenobjekt Join einrichten, der explizit dazu dient, die anderen Benutzer mit demselben Besitzer zu identifizieren. Der Datenobjekt Join wird wie rechts abgebildet konfiguriert:
|
|
Der Screenshot rechts zeigt, die Projektionen, mit denen das gewünschte Ergebnis erzielt werden kann:
|
|
Laufzeitbeispiel:
Mit denselben Beispieldaten wie im vorherigen Beispiel, enthält die in der Das Ergebnis erscheint in einer CSV-Suche deutlich übersichtlicher:
►HINWEIS◄ Auch in diesem Beispiel ist erkennbar, dass die Reihenfolge der Listeneinträge innerhalb des | |
Komplexeres Beispiel: Je Benutzer, die Kontonummern der Firmen auflisten, die beim Anmelden auswählbar sind
Eine Tupel-Suche für Benutzer soll in einer Listenspalte je Benutzer die Kontonummern aller beim Anmelden als Firma der Session auswählbaren Firmen angeben.
Konfiguration:
Die Benutzer-Suche verwendet einen Datenobjekt Join für die Entität "Firmenkonto", der unter dem Alias-Namen ca (für CompanyAccount) jedem Benutzerkonto die im Feld "Firmen" (companies) referenzierten Firmenkonten zuordnet.

Aus den Daten der per Datenobjekt Join zugeordneten Firmenkonten wird das Adressfeld "Kontonummer" (address.accountNumber) per Collection Projektion in eine Liste überführt:
Die rechts abgebildete Collection Projektion für die Listenspalte mit Name "CA_ACC_NUMBERS") greift über eine Feldprojektion mit dem im Parameter Feld für Join angegebenen Pfad Die Collection zeigt mit dieser Konfiguration keine Hinweise auf Firmen, für die keine Angabe zur "Kontonummer" vorliegt. |
|
Die Collection Projektion soll nun noch so angepasst werden, dass im Feld CA_ACC_NUMBERS der Text "UNIDENTIFIED_ACCOUNT" erscheint, falls einem Benutzer eine Firma ohne Kontonummer zugeordnet ist:
Konkret soll die "Kontonummer" als ausgefüllt gelten, wenn sie mindestens ein beliebiges Zeichen beinhaltet. Innerhalb einer Wenn ( Case ) Projektion für das Feld der Collection definiert eine Feld Einschränkung dafür die Bedingung "
like _%".Gilt die "Kontonummer" als ausgefüllt (linker Zweig der Fallunterscheidung), wird der Rückgabewert (wie oben bereits) direkt aus der Feldprojektion für den Pfad
ca.address.accNumberweitergegeben.Gilt die "Kontonummer" als nicht ausgefüllt (rechter Zweig der Fallunterscheidung), wird über eine Literale Projektion der statische Text
UNIDENTIFIED_ACCOUNTals Rückgabewert zugewiesen.

Ausgehend von der bestehenden Konfiguration soll nun noch verhindert werden, dass die Collection in der Listenspalte CA_ACC_NUMBERS Firmenkonten berücksichtigt, in deren Konto das Feld "Metatyp" auf den Firmen-Metatyp "Gruppe" (GROUP) verweist.
Die "Gruppen"-Firmenkonten soll hier ausdrücklich nicht schon im Datenobjekt Join ausgefiltert werden, damit deren Daten in der Collection Projektion für eine weitere Listenspalte gesondert ausgegeben werden können.
Der folgende Screenshot zeigt einen zusätzlichen Zweig in der Wenn ( Case ) Projektion für das Feld der Collection, in dem vor allen anderen Bedingungen der "Metatyp" der Firma (ca.metaType) ausgewertet wird, um "Kein Wert" ($null) zuzuweisen, wenn der Firmen-Metatyp "Gruppe" (GROUP) vorliegt.
Wenn "Kein Wert" (
$null) als Rückgabewert zugewiesen wird, taucht in der Collection weder eine ggf. zugeordnete "Kontonummer" noch der Hinweistext "UNIDENTIFIED_ACCOUNT" auf.





