Sub-Suche

Einschränkung - Kurzfassung

Zweck: Eine Sub-Suche prüft als Einschränkung, ob mindestens eine Instanz für die ausgewählte Entität existiert, die die konfigurierte Bedingung erfüllt.

images/download/attachments/162410478/image-2023-12-21_16-23-13-version-1-modificationdate-1703172193009-api-v2.png

Eine Sub-Suche prüft als Einschränkung, ob mindestens eine Instanz für die ausgewählte Entität existiert, die die konfigurierte Bedingung erfüllt.

  • Analog zur Subselect Projektion kann formal eine Tupel-Suche mit einer einzigen Projektion konfiguriert werden, die auch Joins und Kriterien für eine Gruppierung beinhalten kann.

    • Projektionen innerhalb der Sub-Suche beziehen sich primär auf die für die Sub-Suche ausgewählte Entität als Datenquelle.

    • Das Präfix _parentQuery ermöglicht Bezüge zur übergeordneten Suche. Es kann bei Bedarf kaskadierend (_parentQuery._parentQuery.[...]) eingesetzt werden, um eine bestimmte Ebene einer mehrstufigen Hierarchie zu adressieren.

  • Im Unterschied zu einer Subselect Projektion liefert die Sub-Suche allerdings, wie alle anderen Einschränkungen, nur einen Booleschen Rückgabewert und stellt keinerlei Details zum Suchergebnis bzw. dem Wert der ggf. konfigurierten Projektion bereit:

    • Der Rückgabewert lautet true, wenn mindestens eine Instanz für die Entität existiert, die die Bedingung erfüllt.

    • Der Rückgabewert lautet false, wenn keine Instanz für die Entität existiert, die die Bedingung erfüllt.


WICHTIG◄ Die Sub-Suche ignoriert Zugriffsbeschränkungen. Sie berücksichtigt sämtliche Instanzen der ausgewählten Entität ohne Rücksicht auf Besitz, Beteiligung oder Firmenfreigaben.


Konfiguration

Parameter

Typ

Beschreibung

Entität

Entitätstyp

Die Auswahl für den Parameter Entität bestimmt die primäre Datenquelle für die Sub-Suche. Es können nur die im Dropdown angebotenen Entitätstypen ausgewählt werden.

Für eine Sub-Suche können dabei auch Entitätstypen ausgewählt werden, die in der übergeordneten Suche nicht direkt als "Entität" verfügbar sind (z. B. Attribute).

HINWEISOptional können über Joins weitere Datenquellen in die Sub-Suche eingebunden werden.

Projektion

Projektion

Auf die Konfiguration einer Projektion kann verzichtet werden, da für die Sub-Suche als Einschränkung nur die Existenz einer "Ergebniszeile" ausschlaggebend ist.

  • Wenn keine Projektion definiert wird, wird die Sub-Suche datenbankseitig (in der EXISTS-Bedingung) mit dem statischen Long-Wert 1 als einzige Projektion umgesetzt.

Joins

Join

Der Sub-Suche können über Joins weitere Datenquellen hinzugefügt werden, die dann für Projektionen in anderen Bereichen innerhalb der Sub-Suche zur Verfügung stehen.

Bedingung

Einschränkung

Der Parameter Bedingung ermöglicht die Konfiguration von Einschränkungen für die Akzeptanz von Instanzen der Entität innerhalb der Sub-Suche.

  • Das Präfix _parentQuery in Feld-Pfaden der Konfiguration verweist - soweit erforderlich - auf die Entität aus der übergeordneten Suche.

  • Feld-Pfade ohne dieses Präfix beziehen sich auf den in der Sub-Suche gegebenen Kontext, also entweder auf Felder der Entität oder Pfade zu Feldern von über Joins eingebundenen weiteren Entitäten.

WICHTIG◄ Wird im Kontext einer Sub-Suche komplett auf die Konfiguration einer Bedingung verzichtet, dann wird die Sub-Suche beim Zusammenstellen der Datenbankabfrage komplett ignoriert.
Bei Bedarf sorgt eine pro forma konfigurierte ergebnisneutrale Bedingung (etwa: id > 0) dafür, dass eine Sub-Suche ausgeführt wird, die sich entweder auf alle Instanzen der Entität beziehen soll oder deren einschränkende Wirkung sich auf nicht-optionale Joins stützt.

Gruppierung

Projektion

Die Konfiguration von Kriterien für eine Gruppierung stellt für die Wirkung einer Sub-Suche als Einschränkung im Allgemeinen keinen Mehrwert dar, da diese nur die Existenz von mindestens einer Ergebniszeile überprüft.

Beispiele

Einfacher Anwendungsfall: Verwaiste schwache Referenzen erkennen

Als "schwache Referenz" werden Verweise auf Entitäten bezeichnet, deren Bestehen nicht als Hindernis für das Löschen der betreffenden Entität gewertet wird.

Alle Entitäten nutzen z. B. eine "schwache Referenz", um über das Feld "Besitzer" (ownerId) auf die ID (id) eines Firmenkontos zu verweisen. Ein Firmenkonto, das andere Entitäten "besitzt", kann also gelöscht werden, ohne dass die besessenen Entitäten zuvor einem neuen Besitzer zugeordnet werden müssten.

Eine Suche soll Benutzer auflisten, für die das als "Besitzer" (ownerId) referenzierte Firmenkonto nicht mehr exisitert.

Konfiguration:

In einer Suche für Benutzer wird die Bedingung wie rechts abgebildet als UND-Verknüpfung konfiguriert:

  • Die Feld Einschränkung prüft per Vergleich (>0), ob für das Benutzerkonto überhaupt ein "Besitzer" angegeben ist.

    HINWEIS◄ Für Entitäten ohne Besitzer erscheint im ownerId-Feld der Wert -1.

  • Die Sub-Suche unterhalb bezieht sich wie das "Besitzer"-Feld auf die Entität "Firmenkonto" (CompanyAccount).

    • Eine Projektion, Joins und Kriterien für die Gruppierung werden nicht benötigt.

    • Die Bedingung verwendet eine weitere Instanz der Feld Einschränkung, um auf eine Übereinstimmung (==) zwischen dem ownerId -Feld des Benutzerkontos aus der übergeordneten Suche (_parentQuery) mit dem Feld "ID" (id) zu prüfen.

  • Die Sub-Suche wurde hier insgesamt "verneint", was durch das Symbol (!) am unteren Rand der dadurch automatisch hinzugefügten Such-Verknüpfung signalisiert wird.

Effektiv wird die Bedingung der übergeordneten Suche also bestanden, wenn das "Besitzer"-Feld des Benutzerkontos eine ID angibt, zu der die Sub-Suche keinen Treffer untern allen Firmenkonten findet. Da die Sub-Suche jegliche Zugriffsbeschränkungen ignoriert, impliziert das, dass das als
"Besitzer" referenzierte Firmenkonto nicht (mehr) existiert.

images/download/attachments/162410478/image-2024-1-3_9-59-22-version-1-modificationdate-1704272362432-api-v2.png

Typischer Anwendungsfall: Eingehende Referenz(en) als Einschränkung

Eine Eigene Übersicht (s. Eigene Übersichten) soll nur solche Benutzer auflisten, denen mindestens ein Dokument (s. Dokumente) mit dem Dokumententyp "Lebenslauf" (CV) zugewiesen ist.

HINWEIS◄ Zugewiesene Dokumente verweisen auf das "Referenzierte Objekt" und nicht umgekehrt (s. Dokumente zuweisen). Deshalb müssen die für die Referenz relevanten Felder aller Dokumente ausgewertet werden, um "zugewiesene Dokumente" zu identifizieren.

Konfiguration:

Für die Eigene Übersicht wird als Einschränkung eine Sub-Suche wie rechts abgebildet konfiguriert:

  • Als auszuwertende Entität für die Sub-Suche wird der Entitätstyp "Dokument" (Document) ausgewählt, der nur verfügbar ist, wenn das zugehörige Modul installiert und lizenziert ist.

  • Als Bedingung müssen mehrere Instanzen der Feld Einschränkung innerhalb einer UND-Verknüpfung abgeprüft werden, um zu ermitteln, ob das zu bewertende Dokument dem Benutzerkonto aus der übergeordneten Suche (hier: die implizit erzeugte Tupel-Suche für die Eigene Übersicht) zugewiesen ist. Details zur Such-Verknüpfung sind unten ersichtlich:

    • Das Feld "Referenziertes Objekt" (referencedEntity) muss auf die Klasse "Benutzer" verweisen.

    • Das Feld "Referenziertes Objekt-ID" (referencedEntityId) muss die ID des Benutzerskontos aus der übergeordneten Suche (_parentQuery.id) angeben.

    • Das Feld "Referenz-Status" (referenceStatus) muss den Status "Referenziert" (REFERENCED) angeben.

    • Das Feld "Dokumenttyp" (documentType) muss den benutzerdefinierten Dokumententyp "Lebenslauf" (CV) angeben.

images/download/attachments/162410478/image-2024-1-3_8-8-27-version-1-modificationdate-1704265707588-api-v2.png

images/download/attachments/162410478/image-2024-1-3_8-30-51-version-1-modificationdate-1704267051177-api-v2.png

HINWEIS◄ Sofern im Ausführungskontext Zugriffbeschränkungen wirksam sind, berücksichtigt die Eigene Übersicht nur Benutzer, für die Lesezugriff gegeben ist. Entsprechend werden auch nur für diese die eingehenden Referenzen von Dokumenten geprüft. Ob im Ausführungskontext Zugriff auf das ggf. "qualifizierende" Lebenslauf-Dokument besteht, ist dagegen nicht entscheidend, da die Sub-Suche Zugriffsbeschränkungen ignoriert. Die Übersicht zeigt daher ggf. auch Benutzerkonten an, für deren "Lebenslauf"-Dokument kein Lesezugriff besteht.

Besonderer Anwendungsfall: Duplikate identifizieren

Eine Suche soll alle Firmen auflisten, deren Adresse eine "Kontonummer" (address.accNumber) verwendet, die "mehrdeutig" - also auch noch an mindestens eine andere Firma vergeben - ist.

Konfiguration:

Innerhalb einer Suche für Firmen wird als einzige Einschränkung in der Bedingung eine Sub-Suche wie rechts abgebildet konfiguriert:

  • Wie die übergeordnete Suche bezieht sich auch die Sub-Suche die Entität "Firmenkonto" (CompanyAccount).

  • Auf die Konfiguration einer Projektion wird verzichtet.

  • Joins werden nicht benötigt.

  • Die Bedingung der Sub-Suche verwendet eine UND-Verknüpfung mit zwei Instanzen des Typs Feld Einschränkung, die je ein Feld der per Sub-Suche geprüften Firma mit demselben Feld der Firma in der übergeordneten Suche (_parentQuery) vergleichen:

    • Die erste Feld Einschränkung fordert eine Übereinstimmung (==) für das Addressfeld "Kontonummer" (address.accNumber)

    • Die zweite Feld Einschränkung fordert zusätzlich einen Unterschied für das Feld "ID" (id).

  • Kriterien für die Gruppierung werden nicht benötigt.


HINWEISE

  • Hier betreffen die die übergeordnete Suche und die Sub-Suche ausnahmsweise dieselbe Entität. Typischerweise wertet die Sub-Suche einen anderen Entitätstyp aus als die übergeordnete Suche.

  • Dass hier beide Ebenen der Suche denselben Entitätstyp betreffen, verdeutlicht folgenden wichtigen Unterschied bzgl. der Zugriffsrechte auf Firmen:

    • Die übergeordnete Suche berücksichtigt nur Firmen, auf die im Ausführungskontext Zugriff besteht. Die Sub-Suche wird also auch nur für diese Teilmenge aller Firmen ausgeführt.

    • Allerdings vergleicht die Sub-Suche die Firmen in der durch den ggf. beschränkten Zugriff in der übergeordnete Suche bestimmten Teilmenge ohne Berücksichtigung von Zugriffsbeschränkungen mit sämtlichen Firmen, um nach einer anderen Firma zu suchen, die dieselbe Kontonummer verwendet, wie die aus der Teilmenge.

images/download/attachments/162410478/image-2024-1-3_7-13-19-version-1-modificationdate-1704262399962-api-v2.png

ANMERKUNG◄ Die Suche liefert in einem Ausführungskontext mit wirksamen Zugriffsbeschränkungen alle Firmen, deren "Kontonummer" mehrdeutig vergeben ist UND für die Lesezugriff besteht. Im Suchergebnis erscheinen deshalb nicht unbedingt immer alle Firmen, die sich auf dieselbe mehrdeutig vergebene Kontonummer beziehen, sondern nur diejenigen, für die außerdem im Ausführungskontext Lesezugriff besteht. Überschneidungen zwischen den Kontonummern von Firmen, für die im Ausführungskontext kein Lesezugriff besteht, werden nicht ausgewertet.