Typisiertes-Attribut-Join

Prev Next

images/download/attachments/167860598/image-2024-2-1_7-19-56-version-1-modificationdate-1706768396914-api-v2.png

Ein Typisiertes-Attribut-Join liefert analog zur Typisiertes-Attribut-Projektion ausgehend von der Haupt-Entität der Suche oder einem abweichenden Attributbesitzerpfad alle oder per Join Bedingung ausgewählte Attributwerte für den als Typ ausgewählten Subtyp des per Parameter Attribut ausgewählten Attributtyps.

Konfiguration

Parameter

Datentyp

Beschreibung

Spezifische Parameter

Attributbesitzerpfad

Entität
(Projektion)

Ein Attributbesitzerpfad muss nur explizit durch die Konfiguration einer Projektion (s. Projektionen) definiert werden, wenn die Entität im Kontext der Suche nicht der Besitzer der Attribute ist, die ausgewertet werden sollen.

Dies ist z. B. in den folgenden Fällen relevant:

  • Der Attributbesitzer ist eine per Datenobjekt Join in die Suche einbezogene Entität.

  • Der Attributbesitzer ist eine Position einer Entität im Kontext der Suche.

  • Beim Attributbesitzer handelt es sich um eine in die Daten der Entität im Kontext der Suche eingebettete Entität, z. B. die "Adresse" (address) eines Kontos (s. Benutzer, Firmen/Mandanten).

Attribut

Klasse
(Attributtyp)

Im Auswahlfeld/Combobox-Element für den Parameter Attribut muss eine Auswahl aus den per Dropdown angebotenen Optionen für den Attributtyp erfolgen.

Hier stehen nur Attributtypen für Typisierte Attribute zur Auswahl, die der Entitätstyp des anwendbaren Attributbesitzers per Implementierung unterstützt.

HINWEIS◄ Stehen für das Attribut keine Optionen zur Auswahl oder werden Optionen vermisst, dann wurde eventuell versäumt den Attributbesitzerpfad passend zu setzen (z. B. die "Adresse" eines Kontos, für das keine Attribute implementiert sind).

Typ

Dynamischer Aufzählungswert
(Subtyp)

Das Auswahlfeld/Combobox-Element für den Parameter Typ ermöglicht eine Einfachauswahl für einen Subtyp aus der Dynamischen Aufzählung für das ausgewählte Typisierte Attribut.

HINWEIS◄ Die im Kontext der Konfiguration verfügbaren Optionen können durch Aufzählungsfilter eingeschränkt sein.

ANMERKUNG◄ Rein technisch ist die Auswahl optional. Wird kein Typ ausgewählt, wird auf Attributwerte ohne Subtyp geprüft, die nicht existieren können.

Generische Parameter

Join Alias, Join Typ, Optional, Join Bedingung

s. Datenobjekt Join

Beispiele

Einfacher Anwendungsfall: Zugriff auf "Geschäftsführer"-Adresskontakt(e) für ein Firmenkonto

In einer Tupel-Suche für Firmen/Mandanten soll eine Ausgabespalte Adressdetails für den Geschäftsführer angeben, soweit unter den "Adresskontakten" der Firmenadresse überhaupt ein Eintrag mit dem Kontakttyp "Geschäftsführer" (CEO) angelegt ist.

Firmen ohne Adresskontakt vom Typ "Geschäftsführer" (CEO) soll die Suche nicht als Treffer berücksichtigen.

Konfiguration:

Die rechts abgebildete Konfiguration für einen Typisiertes-Attribut-Join schafft die Grundlage für den Zugriff auf die Adressdaten des Geschäftsführers, wenn ein entsprechender Adresskontakt angelegt ist:

  • Der Attributbesitzerpfad verweist auf das address-Feld des Firmenkontos, da die Adresskontakte der Firmenadresse zugeordnet sind.

  • Im Parameter Attribut ist der Attributtyp "Adresskontakt" (AddressContact) ausgewählt.

  • Der Parameter Typ legt den gesuchten Kontakttyp "Geschäftsführer" (CEO) fest.

  • Als Join Alias ist willkürlich der Name ceo zugewiesen.

  • Der Join Typ "Inner" sorgt dafür, dass nur Firmen/Mandanten aufgelistet werden, für die ein CEO-Adresskontakt angegeben ist.

images/download/attachments/167860598/image-2024-2-1_11-36-40-version-1-modificationdate-1706783800818-api-v2.png

Wie rechts abgebildet benötigt die Tupel-Suche genau zwei Projektionen:

  • Die erste Feldprojektion greift auf das Feld "Name" in der Adresse (address.name1) der Firma zu.

  • Die zweite Feldprojektion greift auf das contactAddress-Feld im per Join Alias ceo gelieferten Adresskontakt-Attribut zu, das eine komplette Adresse referenziert.

images/download/attachments/167860598/image-2024-2-1_11-49-58-version-1-modificationdate-1706784598702-api-v2.png

HINWEIS◄ Ob eine Firma über mehrere Adresskontakte mit Kontakttyp "Geschäftsführer" (CEO) verfügen kann oder nicht, steuert die Option "Plurales Attribut" in der Definition für den Aufzählungswert. Sind mehrere "Geschäftsführer" zugeordnet, Die Tupel-Suche listet dieselbe Firma mehrfach auf, wenn mehrere "CEO-Kontakte" vorhanden sind.

Laufzeitbeispiel:

   <core:TupleSearchResult maxResults="100" count="24">
      <columns>
         <name>address.name1</name>
         <name>ceo.contactAddress</name>
      </columns>
      <result>
         <row>
            <item xsi:type="xsd:string">Mueller GmbH</item>
            <item id="12314" ... salutation="MR" name1="Alfonso" name2="Romeo" name3="Dicaprio" xsi:type="base:Address">
               ...
            </item>
         </row>
         <row>
            <item xsi:type="xsd:string">Xflow AG</item>
            <item id="22501" ... salutation="MS" name1="Wiebke" name2="Cramer" xsi:type="base:Address">
               ...                  
            </item>
         </row>
         <row>
            <item xsi:type="xsd:string">Xflow AG</item>
            <item id="22501" ... salutation="MR" name1="Carsten" name2="Viereck" xsi:type="base:Address">
               ...                  
            </item>
         </row>         ...
      </result>

Komplexeres Beispiel: Selektiver Zugriff auf Geschäftsführerin(nen)

Eine Variante der Tupel-Suche aus dem vorherigen Beispiel soll nur noch Adresskontakte für den Kontakttyp "Geschäftsführer" (CEO) zulassen, die über das Adressfeld "Anrede" (salutation) durch die Auswahl der Anrede "Frau" (MS) als weiblich gekennzeichnet sind.

Naheliegend wäre für diesen Zweck die folgende Join Bedingung:

images/download/attachments/167860598/image-2024-2-1_12-47-44-version-1-modificationdate-1706788064707-api-v2.png

Allerdings ergibt diese eine Fehlermeldung (s. a. Joins), wenn man sie im bestehenden Typisiertes-Attribut-Join (ceo) ergänzt.


A join within a on condition is not possible


Das Problem besteht darin, dass die Join Bedingung sich auf ein Feld der "Adresse"-Entität bezieht, die das contactAdress-Feld ins Spiel bringt.

Der Zugriff auf die contactAddress impliziert einen weiteren Join, der explizit formuliert werden muss, damit für ihn eine Join Bedingung angewendet werden kann.

Konfiguration:

Der Typisiertes-Attribut-Join mit dem Join Alias ceo wird wie oben gezeigt (ohne Join Bedingung) beibehalten.

Der rechts abgebildete Mapped Join muss als Bezugspunkt für die Join Bedingung hinzugefügt werden:

  • Als Join Property wird das contactAdress-Feld aus dem ceo-Join angegeben, das sich auf eine Adresse bezieht.

  • Als Join Alias ist willkürlich der Name ceo_addr zugewiesen.

  • Als Join Typ ist "Inner" ausgewählt, damit die Join Bedingung einschränkend wirkt. Es sollen nur Firmen mit weiblichem Geschäftsführer aufgelistet werden.

  • Die Optional-Option ist abgewählt, damit die einschränkende Wirkung der Join Bedingung auch dann gewährleistet ist, wenn die Projektionen für Ausgabespalten unverändert beibehalten werden
    (s. Hinweis unten).

  • Als Join Bedingung dient die in der Info-Box oben gezeigte Feld Einschränkung für die Anrede.

images/download/attachments/167860598/image-2024-2-1_13-26-11-version-1-modificationdate-1706790371678-api-v2.png

HINWEIS◄ Solange sich keine der Projektionen für Ausgabespalten auf den zusätzlichen Join Alias ceo_addr bezieht, entfaltet der Join Typ "Inner" seine einschränkende Wirkung nicht, solange die Optional-Option ausgewählt ist.

Der Screenshot rechts zeigt eine Variant für die Konfiguration der Projektionen:

  • Die erste Feldprojektion gilt unverändert.

  • Die zweite Feldprojektion bezieht sich nun direkt auf den Join Alias ceo_addr für den hinzugefügten Mapped Join zur ceo-Adresse, anstelle diese wie zuvor aus dem Pfad ceo.contactAdress des Adresskontakt-Attributs zu lesen.

Mit dieser Anpassung kann für den Mapped Join die Optional-Option wieder ausgewählt werden, ohne dass der Join Typ "Inner" seine einschränkende Wirkung verliert.

images/download/attachments/167860598/image-2024-2-1_13-6-28-version-1-modificationdate-1706789188516-api-v2.png