Einfache Feld-Einschränkung

Siehe auch: Feld Einschränkung

Einschränkung - Kurzfassung

Zweck: Die Einfache Feld-Einschränkung definiert ein Suchkriterium, das einer geeigneten Projektion einen statischen Vergleichswert oder $null gegenüberstellt.

images/download/attachments/162410170/image-2023-12-18_15-1-2-version-1-modificationdate-1702908072206-api-v2.png

Die Einfache Feld-Einschränkung kann eine Feld Einschränkung ersetzen, wenn folgende Bedingungen erfüllt sind:

  1. Der Prüfwert ist im Kontext der Suche direkt per Feldprojektion (Projektion) erreichbar.

  2. Die Projektion liefert einen simplen Wert mit einem der folgenden Datentypen:

    • Text (String)

    • Ganzzahl (Long oder Integer)

    • Boolescher Wert (Boolean)

  3. Als Vergleichswert soll ein statischer Wert desselben Datentyps gegenübergestellt werden.

  4. Der Vergleichstyp wird für den auszuwertenden Datentyp unterstützt (s. Feld Einschränkung).

Außerdem kann die Einfache Feld-Einschränkung in folgenden Sonderfällen eingesetzt werden.

Sonderfall: Prüfung ohne Vergleichswert


Sofern sich die Projektion sich auf ein geeignetes Feld bezieht, kann überprüft werden, ob dieses mit einem beliebigen Wert gefüllt ist (!=$null) oder leer (==$null).

Für den Vergleich darf keinem der Vergleichwert-Parameter (Zeichenfolge, Long-Wert, Int-Wert, Boolean-Wert) ein Wert zugeordnet sein.
HINWEIS◄ Der Screenshot oben zeigt den Neutralzustand (==$null) der Checkbox für den Boolean-Wert, der hier ausdrücklich von $false unterschieden wird.

Grundsätzlich sind Felder aller simplen Datentypen geeignet für eine Prüfung auf "gefüllt" oder "leer", soweit der als Projektion angegebene Pfad datenbankseitig interpretiert werden kann.

Für Felder mit komplexem Datentyp, die nicht komplette Entitäten referenzieren - hierzu zählt bereits ein "Datum/Uhrzeit" (DateTime) mit den Feldern "Datumswert" (dateValue) und "Zeitzone" (timeZone) - wird die Prüfung gegen $null datenbankseitig je Feld ausgeführt.

Verknüpfte Entität-Felder werden datenbankseitig auch dann nur als Long-Referenz auf die "ID" der Entitätsinstanz persistiert, wenn die Option "Nur referenzieren" abgewählt ist. Eine Prüfung ohne Vergleichswert bezieht sich damit auf ein simples Long-Feld.

In Bezug auf plurale Inhalte sind folgende Fälle zu unterscheiden:

  • Bezieht sich ein "Listenfeld" auf eine Wiederholbare Entität, z. B. auch das Feld "Positionen" (lineItems) für ein Hierarchisches Geschäftobjekt, sollte als Prüfwert ein konkretes Feld des als Listeneintrag" wiederholten Entitätstyps adressiert werden, das per Definition "Kein Wert" ($null) als Wert ausschließt.

    • Für alle Entitätstypen kann das Feld "ID" (id) der wiederholten Entität mit $null verglichen werden, um zu prüfen ob die "Liste" mindestens einen Eintrag enthält oder nicht.

  • Vordefinierte Entitätstypen können plurale Felder für Referenzen auf andere Entitäten - z. B. "Übergeordnete Firmen" (parentCompanies) für Firmen - vorsehen, die oberflächlich als Mehrfachauswahl (Multi-Combobox) und im Datenobjekt als Liste von Long-Werten abgebildet sind.

    • In diesem Fall kann als Projektion nur der Pfad für das "Listenfeld" (z. B. parentCompanies) ausgewählt werden. Als Prüfwert werden damit die als Einträge vorhandenen Long -Werte herangezogen. Ein Vergleich mit "Kein Wert" (==$null) gilt genau dann als bestanden, wenn kein Eintrag vorliegt. Die Umkehrung der Prüfbedingung (!=$null) ist erfüllt, wenn die "Liste" mindestens einen Long-Wert enthält.

    • ANMERKUNG◄ Für Eigene Typdefinitionen (bzw. Eigene Felder) steht kein generisches Konstrukt für eine plurale Referenz zur Verfügung. Insofern stellt dies einen Sonderfall dar.

  • Ein "Listenfeld", das wie das attributes-Feld im Objektmodell Einträge unterschiedlicher Datentypen zusammenfasst, scheidet kategorisch als Prüfwert für eine Einschränkung aus.

    • Ein Vergleich kann in einer Datenbankabfrage nur als Einschränkung interpretiert werden, wenn die adressierte "Liste" mit genau einer konkreten Datenbanktabelle in Beziehung steht.


Sonderfall: Aufzählungswerte prüfen


Die Konfiguration für die Einfache Feld-Einschränkung sieht kein Auswahlfeld vor, über das Aufzählungswerte als Vergleichswert ausgewählt werden könnten.

Trotzdem werden für eine Projektion, die einen Aufzählungswert als Prüfwert liefert, abhängig vom gewählten Vergleichstyp in bestimmten Fällen Vergleiche mit einer statischen Zeichenfolge als Vergleichswert unterstützt:

  • Bezieht sich die Projektion auf ein Feld einer Entität, deren Datenstruktur einen eindeutigen Bezug zu einer statischen oder Dynamischen Aufzählung herstellt, wird für Vergleiche mit Vergleichstyp == , =,!= ,<, <=, > oder >= versucht, die als Vergleichswert angegebene Zeichenfolge in einen Wert der Aufzählung umzuwandeln. Sofern dies gelingt, wird als Prüfwert und als Vergleichswert der numerische Wert im Feld "Ordinal" (ordinal) für den jeweiligen Dynamischen Aufzählungswert herangezogen.

    • Die Typumwandlung gelingt, wenn eine statische Zeichenfolge angegeben ist, die exakt (inkl. Groß–/Kleinschreibung) mit dem internen Namen (name) eines Werts aus der betreffenden statischen oder Dynamischen Aufzählung übereinstimmt.

    • Scheitert die Typumwandlung, gelten Prüfwert und Vergleichswert für den Vergleichstyp ==, = oder != als nicht übereinstimmend. Für andere Vergleichstypen tritt ein Fehler auf.

  • Bezieht sich die Projektion auf das Feld "Einheit" (unit) für ein Zahl mit Einheit Feld, wird für Vergleiche mit Vergleichstyp == , =,!= ,<, <=, > oder >= versucht, die als Vergleichswert angegebene Zeichenfolge in den Aufzählungswert für die entsprechende Einheit (s. Einheiten) umzuwandeln. Sofern dies gelingt, wird als Prüfwert und als Vergleichswert der Wert im Feld "Alias" (alias) für den zugehörigen Dynamischen Aufzählungswert herangezogen.

    • Die Typumwandlung gelingt, wenn eine statische Zeichenfolge angegeben ist, die exakt (inkl. Groß-/Kleinschreibung) mit dem Alias (alias) der Einheit (s. Einheiten) übereinstimmt.

    • Scheitert die Typumwandlung wird $null als Vergleichswert herangezogen und abhängig vom Vergleichstyp ausgewertet.

  • Bezieht sich die Projektion auf das Feld einer Entität, deren Datenstruktur einen eindeutigen Bezug zu einer Dynamischen Aufzählung herstellt, wird mit Vergleichstyp like , not like, ilike oder not ilike die als Vergleichswert angegebene Zeichenfolge als Pattern für einen Mustervergleich herangezogen.

    • Für den Mustervergleich wird als Prüfwert die im Ausführungskontext anwendbare Lokalisierung für den von der Projektion bereitgestellten Dynamischen Aufzählungswert verwendet.

    • Der Mustervergleich interpretiert in der Zeichenfolge enthaltene Wildcard-Zeichen (_ und %). Ob die Groß-/Kleinschreibung berücksichtigt wird, entscheidet der Vergleichstyp.
      HINWEIS Sofern für einen Dynamischen Aufzählungswert keine Lokalisierung existiert (weder für die Aktuelle Sprache noch für die Fallback-Sprache "Englisch"), wird der interne Name (name) als Prüfwert für den Mustervergleich herangezogen.


►WICHTIG◄ Die hier beschriebenen Szenarien beschreiben Konfigurationsmöglichkeiten, die zwar technisch machbar aber nur sehr eingeschränkt empfehlenswert sind.

  • In einer Feld Einschränkung können Aufzählungswerte als Vergleichswerte über Wertauflöser der Kategorie Statische Werte "sauber" bereitgestellt werden (s. Jede statische Aufzählung, Jede dynamische Aufzählung und Einheit, ohne dass eine Typumwandlung ausgehend von einer Zeichenfolge beansprucht werden muss.

  • Relative Vergleiche (mit Vergleichstyp < , <= , > oder >= ) mit Aufzählungswerten, die sich auf "Ordinal"-Werte beziehen sind generell kritisch zu beurteilen, da die Ordinals sich zwischen System (z. B. Test/Produktiv) unterscheiden können. Ander als bei einer Prüfung auf Übereinstimmung (mit Vergleichstyp ==, = oder !=) kann die "Sortierreihenfolge" und damit das Ergebnis eines Vergleichs also je System unterschiedlich ausfallen.

  • Ein Mustervergleich (mit Vergleichstyp like , not like, ilike oder not ilike), der für Dynamische Aufzählungswerte obligatorisch auf die Lokalisierungstexte abzielt, funktioniert nur stabil, wenn zum Konfigurationszeitpunkt bekannt ist, welche Aktuelle Sprache zur Laufzeit gilt. Oder es wird konsequent auf Lokalisierungen für die betreffende Aufzählung verzichtet bzw. ausschließlich die Fallback-Sprache Englisch lokalisiert. Oder es werden nur Patterns geprüft, für die die verwendeten Lokalisierungen in allen Sprachen entweder treffen oder nicht. Solche Konventionen sind aber immer verletzlich und können erfahrungsgemäß nur durch große Disziplin oder erheblichen Regulierungsaufwand "in der Spur gehalten" werden.



HINWEIS◄ Es ist nicht grundsätzlich ein Vorteil, eine Einfache Feld-Einschränkung zu verwenden, wenn diese Bedingungen erfüllt sind. Das Einsparpotenzial für den Aufwand bei der interaktiven Konfiguration ist begrenzt und spätestens dann neutralisiert, falls nachträglich zur Feld Einschränkung gewechselt werden muss. Allerdings profitiert man ggf. von der einfacheren internen Struktur, wenn die Einschränkung in einem Profil (s. Beispiel unten) verwendet oder im Kontext einer Suche (Ereignisaktion) nachträglich angepasst werden muss.


Die folgende Tabelle vergleicht eine Einfache Feld-Einschränkung mit einer sinngemäß identischen Feld Einschränkung am Beispiel einer typischen Konfiguration für eine Bedingung in einer Suche mit dem Entitätstyp "Benutzer" (s. Benutzer).

Einfache Feld-Einschränkung

Feld Einschränkung

Konfiguration in der Benutzeroberfläche

images/download/attachments/162410170/image-2023-12-18_16-55-16-version-1-modificationdate-1702914925699-api-v2.png

images/download/attachments/162410170/image-2023-12-18_17-0-6-version-1-modificationdate-1702915216263-api-v2.png


HINWEIS◄ Der Aufwand für die interaktive Konfiguration einer Feld Einschränkung unterscheidet sich nur minimal von dem für die Einfache Feld-Einschränkung mit demselben Inhalt, zumal beim Hinzufügen einer Feld Einschränkung bereits eine Feldprojektion für den Prüfwert (oben links) vorgeschlagen wird. Strenggenommen betrifft die Vereinfachung nur die Auswahl des Wertauflösers (oben rechts) für den statischen Vergleichswert (s. Statische Werte).

Definition der Bedingung in der XML-Struktur der Suche

<core:SimplePropertySearch projection="username" compareType="ilike" stringValue="ad%"/>

HINWEIS◄ Hinsichtlich der Komplexität der XML-Struktur unterscheidet sich die Einfache Feld-Einschränkung deutlich von der rechts abgebildeten gleichwertigen Feld Einschränkung.

Typischerweise wird die Einfache Feld-Einschränkung deshalb bevorzugt verwendet, wenn die betreffende Einschränkung im Kontext eines Lobster_data-Profils verwendet werden soll (s. unten). Der vereinfachte Aufbau im XML verbessert - soweit abhängig vom Einsatzkontext überhaupt relevant - die "Lesbarkeit" der Struktur und vereinfacht ggf. das Mapping, falls z. B. der Vergleichstyp oder der - rein technisch weiterhin "statische" - Vergleichswert abhängig von Quelldaten beim Import dynamisch zugewiesen werden soll.

<core:PropertySearch>
<core:PropertyProjection property="username"/>
<compareType>ilike</compareType>
<value typeHint="text" xsi:type="core:LiteralValueResolver">
<value xsi:type="xsd:string">ad%</value>
</value>
</core:PropertySearch>

Erscheinungsbild der Einschränkung im Mapping (Beispiel Import, s. Integration Lobster_data)

images/download/attachments/162410170/image-2023-12-18_17-50-31-version-1-modificationdate-1702918240803-api-v2.png


Die oben konfigurierte Einschränkung kann z. B. ausgehend von einer zu Testzwecken angelegten Konfiguration im Abfragekonfigurator im XML-Tab kopiert und über die Zwischenablage in die Zielstruktur eines Import-Profils übertragen werden. Die Screenshots oben und rechts belegen den Unterschied in der Komplexität deutlich.

Die oben gezeigte Struktur für eine Einfache Feld-Einschränkung (SimplePropertySearch) erscheint fast direkt "lesbar", sofern man die Spalten für Datentyp und Fixwert in der Zielstruktur aktiviert hat. Dagegen fällt es deutlich schwerer nachzuvollziehen, dass die Feld Einschränkung (PropertySearch) rechts dieselbe Einschränkung "codiert".

images/download/attachments/162410170/image-2023-12-18_17-48-16-version-1-modificationdate-1702918105411-api-v2.png

Konfiguration

Parameter

Beschreibung

Projektion

Der Parameter Projektion muss als Pflichtfeld einen validen Pfad zu einem Datenfeld im Kontext der Suche definieren, der durch Direkteingabe (ggf. mit dem [+]-Symbol) oder per Auswahl im Dropdown (mit Suchfunktion) festgelegt werden kann.

Das Dropdown stellt Pfade zu allen Feldern bereit, die direkt oder indirekt den Entitätstyp im Kontext der Suche oder eine über Joins zusätzlich einbezogene Entität betreffen.

WICHTIG◄ Das Dropdown schränkt die Auswahlmöglichkeiten nicht auf Pfade zu Feldern ein, deren Datentyp eine Einfache Feld-Einschränkung unterstützt. Es können also auch Pfade ausgewählt werden, für die der Vergleich zur Laufzeit eine Fehlermeldung ergibt.

Vergleichstyp

Für den Parameter Vergleichstyp bietet das Dropdown alle Vergleichstypen zur Auswahl an, die auch für die Feld Einschränkung verfügbar sind (Details s. dort).

Vergleichswert-Parameter (optional und zur alternativen Verwendung - s. Hinweise unten)

Zeichenfolge

Statischer Textwert für Text-Vergleiche (u. a. like/not like und ilike/not ilike)

Long-Wert

Statischer Long-Wert für numerische Vergleiche

Int-Wert

Statischer Integer-Wert für numerische Vergleiche

Boolean-Wert

Statischer Boolean-Wert für Vergleiche mit Wahrheitswerte

HINWEIS◄ Wird keinem der Vergleichswert-Parameter ein Wert zugewiesen, dann wird das per Projektion adressierte Feld ggf. auf gefüllt/leer geprüft (s. oben, Sonderfall: "Prüfung ohne Vergleichswert")

HINWEIS◄ Jede Änderung am Wert für der Vergleichswert-Parameter bewirkt, dass eine bestehende Angabe für einen der anderen Vergleichswert-Parameter gelöscht wird.

Beispiele

Einfacher Anwendungsfall: "Aktive" Benutzerkonten identifizieren

Eine Tupel-Suche für Benutzer sollt auf "aktive" Konten eingeschränkt werden, also nur solche, für die das Boolean-Feld "Aktiv" (active) den Wert true enthält.

Konfiguration:

Eine Einfache Feld-Einschränkung definiert die geforderte Bedingung für die Tupel-Suche:

  • Als Projektion wird das Feld "Aktiv" (active) im Benutzerkonto ausgewählt.

  • Als Vergleichstyp wird die vorbelegte Standardauswahl (==) beibehalten.

  • Die Checkbox für den Parameter Boolean-Wert wird durch Anklicken mit dem Wert true belegt.

ANMERKUNG◄ Dass das Feld "Aktiv" (active) vom Datentyp Boolean ist, müssen wir schlicht "wissen". Das System bietet während der Konfiguration keinerlei Anhaltspunkte zum Datentyp der Projektion. Im Unterschied dazu würde beim Konfigurieren derselben Bedingung als Feld Einschränkung für den Vergleichswert automatisch der passende Wertauflöser (Boolescher Wert) vorgeschlagen.

Allerdings könnte man hier auch den Textwert "true" als Zeichenfolge oder eine von 0 verschiedene Ganzzahl als Long-Wert oder Int-Wert angeben, um dasselbe Ergebnis zu erzielen, da Lobster Data Platform / Orchestration dann eine automatische Typumwandlung für den Vergleichswert in den Typ des Prüfwerts versucht.

images/download/attachments/162410170/image-2024-1-12_8-3-17-version-1-modificationdate-1705042997370-api-v2.png

Variante:

Eine Einschränkung auf "inaktive" Benutzer kann mit unterschiedlichen Konfigurationen erreicht werden:

Wenn die Checkbox Boolean-Wert abgewählt ist, enthält das Suchergebnis nur Benutzerkonten, für die das Feld "Aktiv" (active) explizit den Wert false enthält.

HINWEIS◄ Dabei ist es wichtig zu wissen, dass das Datenmodell für Benutzer festlegt, dass das Feld "Aktiv" den Wert $null nicht enthalten darf (s. Boolesches Feld - Option "Darf null sein"). Nur dann listet die rechts abgebildete Einschränkung zuverlässig alle Benutzer auf, die nicht als "Aktiv" definiert sind.

images/download/attachments/162410170/image-2024-1-12_8-30-1-version-1-modificationdate-1705044601449-api-v2.png

Die rechts abgebildete Variante verwendet den Vergleichstyp != in Verbindung mit ausgewählter Checkbox Boolean-Wert.

Falls als Projektion ein Boolesches Feld ausgewählt wäre, das $null als Wert zulässt, würde diese Einfache Feld-Einschränkung sowohl mit dem Wert false als auch mit dem Wert $null als bestanden gelten.

images/download/attachments/162410170/image-2024-1-12_8-30-30-version-1-modificationdate-1705044630677-api-v2.png


Die rechts abgebildete Variante wurde ausgehend von der ursprünglichen Lösung durch Auswahl der Menüoption nicht erstellt:

images/download/attachments/162410170/image-2024-1-12_8-51-21-version-1-modificationdate-1705045881353-api-v2.png

Die Einfache Feld-Einschränkung mit der Bedingung active == true wird dadurch insgesamt negiert, also "verneint".

Durch die Auswahl der Verneinung wird die Einfache Feld-Einschränkung automatisch in eine übergeordnete Such-Verknüpfung eingefügt, die als Träger der Verneindung benötigt wird.

Auch mit dieser Variante könnte die Suche "Treffer" mit den Werten false und $null liefern, wenn die Projektion $null als Wert zuließe.

images/download/attachments/162410170/image-2024-1-12_8-47-41-version-1-modificationdate-1705045661572-api-v2.png