Typprüfung

Prev Next


Regeltypen - Kurzfassung

Zweck: Gilt als "bestanden", wenn der Typ des Bezugsobjekts (oder als Fallback ein Typhinweis laut Variable entityClass) den parametrierten Prüfkriterien ("Typ" und/oder "Ist Liste von") entspricht.

Tooltip

  • Verwendung: Die Typprüfung prüft, ob das Bezugsobjekt oder (bei ausgewählter Option Typhinweis bei leeren Wert prüfen) als Fallback die Variable entityClass mit der Parametrierung für Typ und Ist Liste von "kompatibel" ist.

  • Parameter:

    • Der Parameter Typ definiert per Auswahlfeld statisch den Objekttyp dem das akzeptierte Bezugsobjekt bzw. die entityClass als "Typhinweis" entsprechen muss.

    • Die Option Typhinweis bei leerem Wert prüfen regelt, ob im Kontext einer Übersicht ohne Auswahl die entityClass als "Typhinweis" geprüft werden soll.

    • Die Option Ist Liste von regelt, ob eine Liste von Objekten des per Auswahl bestimmten oder unbestimmten Typs als Bezugsobjekt akzeptiert werden soll.

  • Hinweis: Für den Parameter Typ können auch übergeordnete Typen (z. B. "Entität" oder "Schnittstelle > Benutzer") ausgewählt werden, die unterschiedliche konkrete Entitätstypen abdecken.

Eine Typprüfung-Regel führt einen Vergleich zwischen dem Eingangsobjekt und einem innerhalb der Konfiguration der Regel per Einfachauswahl festgelegten Typ aus.

images/download/attachments/200672601/image-2025-2-12_8-3-23-version-1-modificationdate-1739343802477-api-v2.png

►HINWEIS◄ Dasselbe Objekt kann unterschiedlichen Typen entsprechen, wenn zwischen diesen eine entsprechende Beziehung in der Klassenhierarchie besteht.

Beispiele:

  • Ein Objekt vom Typ "Benutzer" (s. Benutzer) besteht nicht nur eine Typprüfung auf den konkreten Typ "Benutzer" (User) sondern z. B. auch für den Typ "Schnittstelle > Benutzer" (IUser), dem auch die Gastbenutzer angehören, sowie den übergeordneten Typ "Entität" (Entity) für alle Entitätstypen.

  • Eine Typprüfung auf den Typ "Schnittstelle > Benutzer" (IUser) akzeptiert Entitäten der Typen "Benutzer" (User) und "Gastbenutzer" (GuestUser), während z. B. ein "Firmenkonto" (CompanyAccount) diese Prüfung nicht besteht.

Wenn eine Typprüfung in einer Regel-Konfiguration verwendet wird, beeinflusst ihre Parametrierung (Typ und Ist Liste von) im Allgemeinen den im Kontext der Regel-Konfiguration anwendbaren und ggf. angezeigten Typhinweis mit vielfältigen Auswirkungen für die nachgelagerte Konfiguration ("abwärts" in der Visualisierung):

Der Screenshot rechts zeigt die Regel-Konfiguration für ein "Zuordnungskriterium" (s. Zuordnungskriterien):

  • Als einzige Regel ist eine Typprüfung auf den Typ "Benutzer" (User) konfiguriert.

  • Unterhalb der Typprüfung-Regel erscheint in der Konfiguration daraufhin der Hinweis auf den in der Regel ausgewählten Typ "Benutzer".

  • Abwärts von der Typprüfung angeordnete Regeln würden aufgrund der UND-Verknüpfung mit der Typprüfung nur ausgeführt, wenn im Datenkontext ein Bezugsobjekt vorliegt, das dem "geprüften" Typ entspricht.

images/download/attachments/200672601/image-2025-2-12_8-28-10-version-1-modificationdate-1739345290181-api-v2.png

Der Screenshot rechts zeigt eine ODER-Verknüpfung mit zwei Instanzen der Typprüfung, durch die zwei alternative Typen - "Benutzer" (User) und "Gastbenutzer" (GuestUser) - alternativ als Bezugsobjekt zulässig sind:

  • Unterhalb der Verknüpfung erscheint in dieser Konfiguration automatisch ein Hinweis auf den Typ "Schnittstelle > Benutzer" (IUser), dem beide oberhalb geprüften Typen angehören.

images/download/attachments/200672601/image-2025-2-12_8-37-44-version-1-modificationdate-1739345864285-api-v2.png

Wie im Screenshot rechts gezeigt, könnte man den Typ "Schnittstelle > Benutzer" (IUser) auch direkt in einer einzigen Typprüfung auswählen, wenn sowohl Benutzer als auch Gastbenutzer als Bezugsobjekt für den Datenkontext akzeptiert werden sollen.

WICHTIG◄ Diese Konfiguration ist nur gleichwertig zur vorherigen, wenn die ODER-Verknüpfung (oben) sämtliche Typen abdeckt, die der "Schnittstellentyp" (hier: IUser) zusammenfasst.

images/download/attachments/200672601/image-2025-2-12_8-47-25-version-1-modificationdate-1739346444974-api-v2.png

Der Screenshot rechts zeigt zunächst wieder eine ODER-Verknüpfung mit zwei Instanzen der Typprüfung, die den Typ "Benutzer" (User) und den Typ "Rolle" (Role) als Alternativen kombiniert.

  • Unterhalb der Regel (ganz unten im Bild) erscheint hier der Hinweis auf den Typ "Entität" (Entity), dem die beiden geprüften Entitätstypen zusammen mit allen anderen Entitätstypen angehören.

  • Innerhalb der in einer UND-Verknüpfung nachfolgenden Objekt-Feld-Regel bietet das Dropdown für die Feldauswahl nur die Felder an, die dem Typ "Entität" (Entity) als übergreifendes Datenmodell für alle Entitätstypen zugeordnet sind.


HINWEIS◄ Die Typprüfung wandelt das zur Laufzeit vorliegende Bezugsobjekt nicht in den geprüften Typ (hier: "Entität") um. Zur Laufzeit liegt also im gegebenen Fall immer ein Bezugsobjekt mit seinem konkreten Typ (z. B. "Benutzer" oder "Rolle") und allen Feldern vor. Auch eine Typprüfung auf "Entität" (Entity) anstelle der ODER-Verknüpfung würde daran nichts ändern.


ANMERKUNG◄ Um Felder, die der Typ "Entität" nicht beinhaltet, per Dropdown auswählen zu können, könnte man vorübergehend eine weitere Instanz der Typprüfung unterhalb der ODER-Verknüpfung einfügen, in der dann der relevante Typ (hier: "Benutzer" oder "Rolle") ausgewählt wird. Nach der Feldauswahl für beide Typen kann man diese zusätzliche Typprüfung wieder entfernen.


Im Screenshot rechts wurde die Objekt-Feld-Regel so ausgestaltet, dass als Prüfwert (links) entweder das Feld "Benutzername" (username) oder das Feld "Rollenname" (roleName) genutzt wird.

Die "Rolle" wird dabei über den Standardwert-Wertauflöser ins Spiel gebracht, falls das username-Feld "Kein Wert" ($null) liefert. Das ist immer der Fall, wen eine "Rolle" als Bezugsobjekt vorliegt, da das Datenmodell für diesen konkreten Typ kein username-Feld vorsieht.

ANMERKUNG◄ Wie im Screenshot zu sehen, zeigen die Auswahlfeld/Combobox-Elemente im Objekt-Feld-Wertauflöser jeweils nur den ausgewählten internen Feldnamen (roleName, username) an und nicht die zugehörige Lokalisierung. Beide Felder sind für den Typ "Entität" nicht definiert. Daher erfolgt keine Lokalisierung und auch kein Typhinweis für den Rückgabewert, der String lauten sollte, wo jetzt der Standardwert "Objekt" erscheint. Wenn man die Feldnamen (username, roleName) als Freitext im Auswahlfeld/Combobox-Element das Objekt-Feld-Wertauflösers eingibt, kommt man zu demselben Ergebnis.

images/download/attachments/200672601/image-2025-2-12_11-25-15-version-1-modificationdate-1739355914608-api-v2.png

images/download/attachments/200672601/image-2025-2-12_14-58-43-version-1-modificationdate-1739368722826-api-v2.png

Der Screenshot rechts zeigt, wie die Konfiguration aus dem vorherige Beispiel mit zwei Instanzen des Eingabeobjekt (Typsicher)-Wertauflösers sauberer, transparenter und sogar robuster gemacht werden kann:

  • Vor jedem Zugriff mit dem Objekt-Feld-Wertauflöser wird ein expliziter Bezug zu einem konkreten Typen hergestellt. In dieser Konstellation impliziert der Eingabeobjekt (Typsicher)-Wertauflöser eine "Typprüfung" gegen den ausgewählten Typ: Besteht der Eingabewert diese Prüfung, gilt er als Rückgabewert. Sonst: "Kein Wert" ($null).

  • Auch in Bezug auf den Konfigurationskontext wirkt der Eingabeobjekt (Typsicher)-Wertauflöser ähnlich wie eine Typprüfung: Die Auswahl für den Typ beeinflusst den Typhinweis und die Nachschlagefunktion für den verketteten Objekt-Feld-Wertauflöser wie gewüscht, sodass zugehörige Felder inkl. Lokalisierung im Dropdown erscheinen und der zur Auswahl passende Typhinweis (hier: String) für den Rückgabewert angezeigt wird.

images/download/attachments/200672601/image-2025-2-12_15-25-46-version-1-modificationdate-1739370345415-api-v2.png

Konfiguration

Für die Typprüfung können zwei Optionen gesetzt werden:

  • Die Option Typhinweis bei leerem Wert prüfen soll eine indirekte Typprüfung in dem Fall ermöglichen, dass kein Objekt übergeben wurde aber der Aufrufkontext Hinweise auf einen bestimmten Objekttyp beinhaltet.

  • Mit der Option Ist Liste von kann anstelle eines einzelnen Objekts eine Liste von Objekten einer Typprüfung unterzogen werden.

Abhängig von der Auswahl für die beiden Optionen sind die folgenden Varianten für die Konfiguration einer Prüfung zu unterscheiden:

Auswahl
"Typ"

Option
"Typhinweis [...] prüfen"

Option
"Ist Liste von"

Prüfbedingung für "Regel bestanden"

<Typauswahl>
(erforderlich)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg

Das übergebene Objekt entspricht dem Typ <Typauswahl>. Die Auswahl eines Typs ist dabei erforderlich.

<Typauswahl>
(optional)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg

Das übergebene Objekt ist eine Liste, die kein Objekt enthält, das nicht dem ausgewählten Typ entspricht. Die Auswahl eines Typs ist dabei optional. Ohne eine Auswahl werden Einträge beliebiger Typen akzeptiert.

►HINWEIS◄ Die Prüfbedingung klingt etwas umständlich, wurde aber mit Blick auf die folgenden Sonderfälle gezielt so formuliert:

  • Eine Liste mit Objekten unterschiedlicher Typen besteht eine Typprüfung nur ohne <Typauswahl> oder wenn ein weniger spezifischer (übergeordneter) Typ ausgewählt wird, z. B. "Benutzer > Schnittstelle" für eine Liste, die Benutzer und Gastbenutzer enthält.

  • Eine Liste ohne Einträge besteht jede Typprüfung mit der Option Ist Liste von unabhängig von einer <Typauswahl>.

<Typauswahl>
(erforderlich)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg

Das übergebene Objekt entspricht dem Typ <Typauswahl>
ODER es wurde kein Objekt übergeben ABER der Kontext (z. B. eine Übersicht) bezieht sich auf den Objekttyp.

Als Typhinweis wird die Variable entityClass ausgewertet, die abhängig vom Kontext automatisch mit einer "Klasse" (s. Statische Werte) befüllt wird.

Beispiel im Kontext einer Übersicht für Benutzer:

<core:Storage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:base="SCM.BASE" xmlns:core="CORESYSTEM">
   <data>
      <entry>
         <key xsi:type="xsd:string">entityClass</key>
         <value type="base:User" xsi:type="ClassValue"/>
      </entry>
   </data>
</core:Storage>

►HINWEIS◄ Wird ein Eigenes Aktionsevent per Ereignisaktion ausgelöst (Eigenes Aktionsevent auslösen (Aktion)), dann wird die Variable entityClass im Unterschied zu anderen Variablen nicht in den zugehörigen Ausführungskontext übergeben, sondern ausgehend vom übergebenen Objekt spezifisch für diesen Kontext ermittelt. Bezieht sich der Wertauflöser für das Datenobjekt in der Konfiguration der Ereignisaktion auf eine Variable, für die zur Laufzeit kein Wert vorliegt, bestimmt die Parametrierung dieses Wertauflösers den "Typhinweis" (über die Variable entityClass).

Beispiel:

images/download/attachments/200672601/image-2025-2-12_16-28-46-version-1-modificationdate-1739374126110-api-v2.png

  • Im Kontext einer Ereignisbehandlung, die auf das ausgehend von dieser Konfiguration ausgelöste Eigene Aktionsevent reagiert, verweist der "Typhinweis" (via Variable entityClass) auch dann auf den Typ "Benutzer" (User), falls die Variable "newUser" keinen Wert ($null) enthält.

<Typauswahl>
(optional)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg

Das übergebene Objekt ist eine Liste, die kein Objekt enthält, das nicht dem Typ <Typauswahl> entspricht
ODER es wurde kein Objekt übergeben ABER der Kontext liefert Anhaltspunkte für die Übergabe einer Liste.

►HINWEIS◄ Die Prüfung für den "Typhinweis bei leerem Wert" bezieht sich ausdrücklich nicht auf die <Typauswahl>. Ohne ein konkretes Objekt kann also nur unspezifisch festgestellt werden, ob die Variable entityClass einen Typ ausweist, der als Liste gilt.

Beispiel:

images/download/attachments/200672601/image-2025-2-12_16-31-37-version-1-modificationdate-1739374296720-api-v2.png

  • Diese Typprüfung gilt als bestanden, wenn als Eingangsobjekt eine Liste übergeben wird, die ausschließlich Benutzer enthält.

  • Eine Liste ohne Einträge besteht die Prüfung, auch wenn es nicht um den Typ "Benutzer" (User) geht (s. a. Hinweise zum zweiten Fall oben). Die Option Typhinweis bei leerem Wert prüfen hat darauf keinen Einfluss, weil eine Liste ohne Einträge als Eingabewert übergeben wird und nicht "Kein Wert" ($null).

  • Die Option Typhinweis bei leerem Wert prüfen ist allerdings relevant, wenn keine Liste übergeben wird, aber der Kontext auf eine Liste hindeutet.
    Das ist z. B. der Fall, wenn das Datenobjekt für ein Eigenes Aktionsevent durch einen Regel-Listen Resolver mit der Option Alle Werte als Liste definiert wird, der zur Laufzeit keine Treffer als Ergebnis zurückgibt:

    images/download/attachments/200672601/image-2025-2-13_13-4-23-version-1-modificationdate-1739448263086-api-v2.png  


      • Im Beispiel bündelt ein Erzeuge Liste-Wertauflöser Benutzer als Einträge einer Liste, die über je eine Variable (creator , modifier) bereitgestellt werden.

        • Über das ausgelöste Eigenes Aktionsevent "Send Email" (SEND_EMAIL) sollen alle aufgelisteten Personen benachrichtigt werden, sofern es sich nicht um den angemeldeten Benutzer handelt.

          • Der verkettete Regel-Listen Resolver in der Wert-Konfiguration für das Datenobjekt unterdrückt" Listeneinträge, die sich per "ID" (id) auf den Benutzer der Session beziehen.

            • Falls sich beide Variablen (creator und lastModifier) auf den Benutzer der Session beziehen, gibt der Regel-Listen Resolver nicht etwa eine leere Liste ([]) zurück, sondern "Kein Wert" ($null).

            • Für eine Ereignisbehandlung, die durch das "Send Email" auusgelöst wird und deren Typprüfung wie oben konfiguriert ist (Typ "Benutzer", Typhinweis bei leerem Wert prüfen ausgewählt, Ist Liste von ausgewählt), bedeutet das:

              • Der Rückgabewert "Kein Wert" ($null) entspricht zwar nicht dem Typ ("Benutzer"), aber er gilt als "leerer Wert". Da die Option Typhinweis bei leerem Wert prüfen ausgewählt ist, gibt der Typhinweis den Ausschlag.

              • Als Typhinweis (s. a. Wert der Variable entityClass im Kontext der ausgelösten Ereignisses) gilt "Liste" (List), weil im Regel-Listen Resolver die Option Alle Werte als Liste ausgewählt ist.

              • Die Typprüfung gilt als bestanden, weil der Eingabewert leer ist und der Typhinweis geprüft werden soll und dieser Typhinweis "Liste" (List) lautet, was zur ausgewählten Option Ist Liste von passt.

                • Die Auswahl für den Typ innerhalb der Typprüfung ("Benutzer") spielt keine Rolle, wenn nur der Typhinweis geprüft wird, weil kein Wert vorliegt.