Mapped Join
Ein Mapped Join ermöglicht den Zugriff auf Daten für ein Datenfeld einer Entität innerhalb der Suche, die datenbankseitig in einer eigenen Tabelle zu finden sind.
Im Unterschied zum Datenobjekt Join berücksichtigt der Mapped Join beim Zuordnen von Feldwerten Einschränkungen für den impliziten Join für die (1:1)- oder (1:n)-Relation hinter dem als Join Property ausgewählten Datenfeld-Pfad.
Sowohl über die generische Join Bedingung als auch den generischen Parameter Treat kann die Zuordnung zusätzlich eingeschränkt werden. Beide Parameter erlauben die optionale Definition von Einschränkungen, die in einer UND-Verknüpfung mit der impliziten Join Bedingung zusammengefasst werden. Diese Möglichkeiten zum Einschränken sind ein typischer Grund, einen Mapped Join einzusetzen. Unbeschränkter Zugriff auf Feldwerte wäre über den als Join Property ausgewählten Pfad auch direkt über eine Feldprojektion gegeben.
Konfiguration
Parameter |
Datentyp |
Beschreibung |
|
Spezifische Parameter |
|||
Join Property |
Datenfeldpfad |
Das Auswahlfeld/Combobox Join Property unterstützt für die Angabe eines im Kontext der Suche gültigen Datenfeldpfads alternativ die Auswahl per Dropdown oder die Direkteingabe, die Per Klick auf das +-Symbol oder die Eingabetaste abgeschlossen werden muss.
|
|
Treat |
Suchaufbereitung |
Der Parameter Treat sieht optional die Konfiguration einer "Suchaufbereitung" (Treat) vor:
Erst nach dem Hinzufügen der "Suchaufbereitung" im Kontextmenü der Wert-Konfiguration (links) erscheint die zugehörige Benutzeroberfläche (rechts) mit den Parametern Als und Bedingung. |
|
└ Als |
Entitätstyp |
Im Auswahlfeld/Combobox für Als kann ein Entitätstyp ausgewählt werden, der für den Kontext der Definition des Bedingung-Parameters den aus der Definition für das Join Property abgeleiteten Entitätstyp für den Join Alias übersteuert. |
|
└ Bedingung |
Einschränkung |
|
Für die Definition der Bedingung gilt für den Join Alias der unter Als ausgewählte Entitätstyp. Im Beispiel links wurde für Als der übergreifende Typ "Entität" (Entity) ausgewählt. Danach wurde unter Bedingung eine Einfache Feld-Einschränkung ausgewählt. Das Auswahlfeld/Combobox-Element für die Projektion zeigt daraufhin für den Join Alias a nur Pfade für Felder an, die die ausgewählte (übergeordnete) Klasse "Entität" unterstützt. |
Generische Parameter |
|||
Join Alias, Join Typ, Optional, Join Bedingung |
Beispiele
Typischer Anwendungsfall: (1:n)-Relation
Der Entitätstyp "E-Mail" (Mail, s. E-Mails) verwendet ein Listenfeld involved, um unterschiedliche "E-Mail-Beteiligte" ("Von", "An", "CC", "BCC") aufzulisten.
Eine Tupel-Suche für E-Mails soll in einer Spalte "Empfänger" ausschließlich die sichtbaren Empfängeradressen (Typ "An" oder "CC") ausgeben.
Konfiguration:
Der Screenshot rechts zeigt die Konfiguration für einen Mapped Join, der die selektive Auflistung von "E-Mail-Beteiligten" ermöglicht:
|
|
Der Mapped Join mit dem Alias recipient liefert die Einzelwerte für Adressaten, die für die Ausgabespalte recipients wie rechts abgebildet per Collection Projektion als Listenwert aufbereitet werden können:
|
|
►HINWEIS◄ Falls eine weitere Ausgabespalte nur den Absender (E-Mail-Beteiligter-Typ "Von"/SEND_FROM) angeben soll, muss zu diesem Zweck ein zusätzlicher Mapped Join mit einem eigenständigen Join Alias (z. B. sender) für dasselbe Join Property (involved) eingerichtet werden. Da jede E-Mail nur genau einen Absender haben sollte, kann dieser direkt über eine Feldprojektion (sender.involved) als Ausgabespalte definiert werden.
Besonderer Anwendungsfall: (1:1)-Relation mit Nebenbedingung
Die Konten für Benutzer beziehen sich über das Feld "Addresse" (address) auf eine Entität vom Typ "Adresse", sodass die Adressfelder aus der Datenbanktabelle für Adressen (base_address) einbezogen werden müssen, wenn diese in Projektionen im Kontext einer Suche für Benutzer adressiert werden. Die Auswahl eines Datenfeldpfads wie address.name1 impliziert dabei den Join von der Benutzertabelle zu Adresstabelle.
Im folgenden Beispiel soll anstelle des impliziten Joins ein Mapped Join mit einer Nebenbedingung verwendet werden, damit Adressdaten nicht grundsätzlich sondern genau dann "hinzugebunden" werden, wenn eine Nebenbedingung erfüllt ist.
Eine CSV Suche für Benutzer soll neben dem "Benutzernamen" (username) immer das Adressfeld "Name" (name1.address) ausgeben, aber weitere Adressdaten (hier: "Stadt"/city und "Land"/countryCode) nur dann, wenn das Adressfeld "Kontonummer" (address.accNumber) mit der Ziffer 1 beginnt.
Konfiguration:
Der rechts abgebildete Mapped Join dient als Basis für die bedingten Zugriffe auf die Adresse eines Benutzers:
|
|
Der Screenshot rechts zeigt die Projektionen für die Ausgabespalten der CSV Suche:
|
|