Datenobjekt Join
Ein Datenobjekt Join bindet anhand der Join Bedingung zugeordnete Instanzen des als Datenobjekt ausgewählten Entitätstyps unter dem als Join Alias angegebenen Namen in eine Suche ein.
Im Unterschied zu allen anderen Joins stützt sich der Datenobjekt Join ausschließlich auf die im Join Alias explizit formulierte Bedingung. Anderweitige Beziehungen zwischen Entitäten in der Suche und den hinzugezogenen Instanzen werden dabei weder erwartet noch berücksichtigt.
Die Beziehung zum als Datenobjekt ausgewählten Entitätstyp kann über die Join Bedingung also völlig willkürlich definiert werden.
►WICHTIG◄ Für den Zugriff auf Instanzen des als Datenobjekt ausgewählten Entitätstyps greifen die für die Haupt-Entität einer Suche ggf. anwendbaren Zugriffsbeschränkungen aufgrund von Besitz, Beteiligung und Firmenfreigaben kategorisch nicht.
Konfiguration
Parameter |
Datentyp |
Beschreibung |
Spezifische Parameter |
||
Datenobjekt |
Entitätstyp |
Als Datenobjekt kann ein beliebiger Entitätstyp ausgewählt werden. Das Auswahlfeld/Combobox bietet dabei auch Optionen an, die als (Haupt-)"Entität" für eine Suche nicht auswählbar sind. Beispiel:
|
Generische Parameter |
||
Join Alias |
String |
Als Join Alias muss eine Zeichenfolge angegeben werden, die die Identifikation der durch den Join bereitgestellten Datenobjekts als Präfix im Datenfeldpfad eindeutig identifiziert.
Für einen Join Alias unzulässige Zeichen (etwa das Leerzeichen oder der Punkt) werden automatisch durch je einen Unterstrich ersetzt:
|
|
||
Join Typ |
Aufzählungswert |
Per Standard ist der Join Typ "Left" (LEFT) vorbelegt, sodass der Datenobjekt Join auch dann keine einschränkende Wirkung auf die Suche hat, falls die Join Bedingung keine Treffer liefert. Der Join Typ "Inner" (INNER) kann als Einschränkung für die Suche wirken, wenn die Option Optional abgewählt ist. Im Suchergebnis erscheinen dann nur Ergebnisse, für die der Datenobjekt Join anhand der Join Bedingung mindestens einen Treffer "beigesteuert" hat. |
Optional |
Boolean |
Per Standard ist die Option Optional ausgewählt. Dann wird der betreffende Join zur Laufzeit nur in die Datenbankabfrage übernommen, soweit Projektionen dies erfordern. |
►HINWEIS◄ Solange ein als Optional definierter Join mangels Notwendigkeit zur Laufzeit nicht ausgeführt wird, können auch ggf. vorhandene Fehler in seiner Konfiguration nicht auffallen. So kann der irreführende Eindruck entstehen, dass eine bestimmte Join Bedingung nur in einem optionalen Join "funktioniert". Tatsächlich findet der "optionale" Join datenbankseitig aber ggf. überhaupt nicht statt. |
||
Join Bedingung |
Einschränkung |
Die Join Bedingung definiert optional welches Kriterium (s. Einschränkungen) erfüllt sein muss, damit ein Join Daten zum Suchergebnis beisteuern kann. Typischerweise setzt die Join Bedingung Daten von Entitäten, die aus Sicht des Joins "Kandidaten" für eine Zuordnung sind, in Beziehung zu Daten von Entitäten, die ggf. das Ziel der Zuordnung sind. Projektionen für "Kandidaten" verwenden dabei den Join Alias als Präfix. Falls keine Join Bedingung angegeben wird, ordnet der Datenobjekt Join alle Instanzen des per Datenobjekt ausgewählten Entitätstyps zu. Abhängig von weiteren Parametern in der Suche kann deren Anzahl die Anzahl der Ergebniszeilen der Suche multiplikativ erhöhen. ►HINWEIS◄ Im Sprachgebrauch für den Join Typ (LEFT, INNER, RIGHT) stehen die "Kandidaten" immer auf der "rechten Seite" der durch den Join begründeten Beziehung. Die Positionierung innerhalb einer ggf. verwendeten Feld Einschränkung als Prüfwert oder Vergleichswert spielt diesbezüglich keine Rolle:
|
Beispiele
Einfacher Anwendungsfall: Zugriff auf das Besitzer-Konto eines Benutzers
Wie jeder Entitätstyp verwenden auch Benutzer ein Long-Feld "Besitzer" (ownerId), über das auf das Feld "ID" (id) einer Firma verwiesen werden kann, die als "Besitzer" eines bestimmten Benutzers gelten soll.
Das Datenmodell der Entität (hier: Benutzer) beinhaltet dabei nur den Long-Wert der Referenz, sodass Detaildaten zur Besitzer-Firma bei Bedarf per Join in eine Suche einbezogen werden müssen.
Konkret soll eine CSV-Suche die Felder "Benutzername" (username) und "Besitzer" (ownerId) aus dem Benutzerkonto mit dem Adressfeld "Kontonummer" (address.accNumber) der Besitzer-Firma kombinieren.
Konfiguration:
Der Screenshot rechts zeigt die Konfiugration für die CSV Suche mit Projektionen und Joins:
Die Zuordnung der "Besitzer"-Firma je Benutzer regelt der Datenobjekt Join:
|
|
Eine Besonderheit bei diesem Anwendungsfall ist, dass der Join für jeden Benutzer nur exakt einen oder keinen Treffer unter den Firmenkonten liefern kann und nicht mehrere,
Es gibt zwei Fälle, in denen der Join kein Firmenkonto liefert:
Das als "Besitzer" referenzierte Firmenkonto existiert nicht mehr, weil es gelöscht wurde.
Für einen Benutzer wird "kein Besitzer" referenziert. In diesem Fall wird dem Feld "Besitzer" (ownerId) automatisch der Wert -1 zugewiesen, den kein Firmenkonto verwenden kann.
In beiden Fällen kommt keine Zuordnung zustande, was hier (in Verbindung mit dem Join Typ "Inner") dazu führt, dass der betreffende Benutzer nicht in der Ergebnisliste erscheint.
Variante:
Anstelle einer CSV-Suche soll eine "normale" Suche ausgeführt werden, die komplette Benutzer-Instanzen auflistet, denen erfolgreich ein "Besitzer"-Konto zugeordnet wurde.
Im Abfragekonfigurator kann man für die bestehende Konfiguration den "Suchtyp" von CSV Suche auf Suche umstellen. Dadurch fallen die Projektionen weg und es verbleibt nur der rechts abgebildete Datenobjekt Join:
|
|
Besonderer Anwendungsfall: SELF JOIN zum Suchen von Duplikaten
Viele Konfigurationen wie Zuordnungskriterien oder Ereignisbehandlungen verfügen über ein Feld "Name" (name), in dem ein Text eintragen werden kann, der das betreffende Konfigurationselement angemessen präzise identifiziert sollte, um ein schnelle Identifikation (etwa in einer Übersicht oder einem Dropdown) zu ermöglichen.
Es ist dabei keineswegs zwingend notwendig, dass der zugewiesene "Name" innerhalb des jeweiligen Entitätstyps eindeutig ist, da diese Konfigurationen systemseitig - wie alle Entitäten - anhand ihrer eindeutigen und automatisch zugewiesenen "ID" (id) identifiziert werden.
Damit eine gewisse Transparenz gewahrt bleibt, kann es nicht schaden, z. B. periodisch oder anlassbezogen nach mehrfach vergebenen Namen im Kontext einer Implementierung zu suchen.
Im folgenden Beispiel soll eine CSV-Suche solche "Duplikate" für Zuordnungskriterien ermitteln.
Konfiguration:
Als minimalen Informationsumfang sollte die CSV-Suche drei Projektionen für Ausgabespalten beinhalten:
|
|
Der Screenshot rechts zeigt die Join Bedingung, die das Kriterium für für die Zuordnung von Duplikaten als Such-Verknüpfung, mit einer UND-Verknüpfung aus zwei Instanzen der Feld Einschränkung abbildet:
Nur wenn beide Bedingungen erfüllt sind soll der alias-Datensatz dem übergeordneten Datensatz zugeordnet werden. ►WICHTIG◄ Soweit die Suche in einem Kontext ausgeführt wird, in dem Zugriffsbeschränkungen für das Lesen (="Suchen") von Zuordnungskriterien anwendbar sind, ist zu berücksichtigen, dass diese nur die Hauptebene der Suche (also die "linke" Seite des Joins) betreffen. Der Abgleich erfolgt also nicht nach dem Schema "alle Zuordnungskriterien" vs. "alle (anderen) Zuordnungskriterien". Vielmehr wird nur geprüft, ob es für alle lesbaren Zuordnungskriterien irgendwelche Duplikate (alias) hinsichtlich des Namens gibt. Da für die alias-Seite des Vergleichs ("rechts" im Join) keine Zugriffseinschränkungen berücksichtigt werden, weist die Suche ggf. auch Duplikate aus, die "nicht lesbare" Zuordnungskriterien betreffen. |
|