Mapped Join

images/download/attachments/167859654/image-2024-1-23_8-49-11-version-1-modificationdate-1705996151571-api-v2.png

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.

images/download/attachments/167859654/image-2024-1-23_9-42-1-version-1-modificationdate-1705999321350-api-v2.png

Treat

Suchaufbereitung

Der Parameter Treat sieht optional die Konfiguration einer "Suchaufbereitung" (Treat) vor:

images/download/attachments/167859654/image-2024-1-23_10-26-26-version-1-modificationdate-1706001986592-api-v2.pngimages/download/attachments/167859654/image-2024-1-23_9-58-23-version-1-modificationdate-1706000303977-api-v2.png

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

images/download/attachments/167859654/image-2024-1-23_10-47-21-version-1-modificationdate-1706003242014-api-v2.png

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

s. Datenobjekt Join

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:

  • Als Join Property wird das Listenfeld involved ausgewählt.

  • Der Parameter Treat wird nicht verwendet.

  • Als Join Alias wird willkürlich der Name recipient festgelegt.

  • Für den Join Typ wird der Standard "Left" verwendet, damit ggf. auch E-Mails ohne Adressaten aufgelistet werden.

  • Für die Optional Option wird der Standard ausgewählt beibehalten, weil die recipient-Werte in einer Collection Projektion (s. u.) zusammengefasst werden sollen, sodass nur eine Ausgabezeile pro E-Mail gewünscht ist.

  • Als Join Bedingung dient hier eine Such-Verknüpfung, die zwei Instanzen der Feld Einschränkung ver-ODER-t, von denen jede die Übereinstimmung mit einem der erwünschten "E-Mail-Beteiligter-Typen" ("An", "CC") prüft.

    ANMERKUNG◄ Anstelle der ODER-Verknüpfung könnte man hier auch eine einzelne Feld Einschränkung mit dem "In"-Vergleichstyp verwenden, wenn man eine statische Liste von Typen als Vergleichswert (z. B. per Erzeuge Liste-Wertauflöser) bereitstellt.

images/download/attachments/167859654/image-2024-1-24_8-34-52-version-1-modificationdate-1706081692666-api-v2.png

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:

  • Als Feld der Collection wird der Pfad zum involved-Feld des recipient-Werts ausgewählt.

    ANMERKUNGinvolved.involved würde an dieser Stelle alle Beteiligten (auch "BCC" und "Von") am Mapped Join vorbei auflisten.

images/download/attachments/167859654/image-2024-1-24_8-53-27-version-1-modificationdate-1706082807554-api-v2.png

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:

  • Als Join Property wird das address-Feld ausgewählt.

  • Ein Treat wird nicht benötigt.

  • Als Join Alias wurde willkürlich der Name addr zugewiesen.

  • Der Join Typ "Left" stellt sicher, dass die CSV Suche auch Benutzer auflisten kann, für die die Adress aufgrund der Join Bedindung nicht erfüllt ist oder für die keine Adresse angegeben ist.

  • Für die Optional-Option wird der Standard (ausgewählt) beibehalten.

  • In der Join Bedingung vergleicht eine Feld Einschränkung das Adressfeld "Kontonummer" (accNumber) über den Vergleichstyp like mit dem statischen Text 1%. Diese Bedingung ist erfüllt, wenn die Kontonummer mit dem Zeichen 1 beginnt oder nur dieses Zeichen enthält.

    ANMERKUNG◄ Da eine (1:1)-Relation vorliegt, könnte man im Prüfwert als Feldpfad auch address.accNumber auswählen oder eintragen. Der Bezug zum Join Alias ist rein formal aber präziser.

images/download/attachments/167859654/image-2024-1-24_13-42-41-version-1-modificationdate-1706100162055-api-v2.png

Der Screenshot rechts zeigt die Projektionen für die Ausgabespalten der CSV Suche:

  • Die erste Feldprojektion liest das Feld "Benutzername" (username) direkt im Benutzerkonto.

  • Die zweite Feldprojektion greift direkt auf das Adressfeld "Name" (address.name1) zu. Diese Spalte wird also immer befüllt.

  • Die dritte und vierte Spalte adressieren über je eine Feldprojektion die Felder "Stadt" (city) und "Land" (countryCode) in der Adresse über den Join Alias addr, der genau dann Daten bereitstellt, wenn die Join Bedingung erfüllt ist.

images/download/attachments/167859654/image-2024-1-24_13-43-23-version-1-modificationdate-1706100203633-api-v2.png