Wertauflöser - Kurzfassung
Zweck: Erzeugt ein Änderungsprotokoll, das die Unterschiede zwischen einem als Eingabewert übergebenen Objekt und einem parametrierten Vergleichsobjekt ermittelt und in strukturierter Form - als "Änderungsprotokoll" - ausgibt.
Tooltip
Verwendung: Das Objekt im Eingabewert wird mit dem abhängig vom Parameter Vergleichswert ermittelten Vergleichsobjekt verglichen.
Sofern Unterschiede festgestellt werden, erscheinen diese in einem Änderungsprotokoll im Rückgabewert, dessen Typ vom Typ des Eingabewerts abhängt.
Werden keine anhand der Parametrierung relevanten Unterschiede festgestellt, lautet der Rückgabewert "Kein Wert" (
$null).
Parameter:
Die Option Entitätsattribute ignorieren ist per Standard ausgewählt. Soweit als Eingabewert eine Entität vorliegt, werden deren Entitätsattribute (
created,creatorId,lastModified,lastModifierId,ownerId, usw.) beim Vergleich ignoriert, wenn die Option ausgewählt ist.Die Option Änderungen auch für gelöschte und erstellte Werte ist per Standard abgewählt. Für gelöschte und erstellte Werte (Objekte) erscheint dann im Rückgabewert nur der minimale Informationsumfang.
Eine Konfiguration für den Vergleichswert ist optional.
Für eine Entität als Eingabewert wird ohne Konfiguration das "Originalobjekt" als Standard-Vergleichsobjekt verwendet.
Für alle anderen Objekttypen sollte ausdrücklich ein Vergleichswert konfiguriert werden, sonst wird "Kein Wert" (
$null) zurückgegeben.
Warnung: In Verbindung mit hierarchischen Objekten kann das Erzeugen eines Änderungsprotokolls einen erheblichen "Rechenaufwand" bedingen und umfangreiche Datenmengen erzeugen.

►WICHTIG◄ Dieser Wertauflöser ist in einem Client Workflow nicht verfügbar!
Der Änderungsprotokoll-Wertauflöser erzeugt ein Änderungsprotokoll, das die Unterschiede zwischen einem als Eingabewert übergebenen Objekt und einem per Parameter Vergleichswert definierten Vergleichsobjekt ermittelt und in strukturierter Form - als "Änderungsprotokoll" - ausgibt.
Der Typ des Rückgabewerts hängt dabei vom Typ des Eingabewerts ab:
Eingabewert-Typ | Beispiele | Rückgabewert-Typ | Spezifische Felder |
|---|---|---|---|
Simpler Wert | Textwerte, Zahlenwerte, Aufzählungswerte, usw. | "Änderungsprotokoll > Einfacher Wert" ( |
|
Collection | Liste, Eindeutige Liste, usw. | "Änderungsprotokoll > Collection" ( |
|
Entität | Geschäftsobjekt, Eigene Typdefinitionen, Position, Konfiguration, | "Änderungsprotokoll > Entität" ( |
|
andere Objekte | Client-Objekt, Datumswert, Datumsbereich, Attribut (s. a. nachfolgende Tabelle), usw. | "Änderungsprotokoll > Objekt" ( |
|
►WICHTIG◄ Technisch bietet jeder Änderungsprotokoll-Typ die Felder fromIndex und toIndex an, die sich auf die Reihenfolgenposition innerhalb einer Collection beziehen. Diese Felder enthalten den Wert -1, falls der Index (mangels Bezug zu einer Collection) nicht anwendbar ist.
►HINWEIS◄ Änderungen an Attributen einer Entität können auf unterschiedlichen Wegen ermittelt werden. Der Rückgabewert-Typ variiert dabei:
Eingabewert für das Änderungsprotokoll | Eingabewert-Typ | Rückgabewert-Typ | Spezifische Felder |
|---|---|---|---|
Attributbesitzer Übergeordnete Entität des Attributs | Entität | "Änderungsprotokoll > Entität" (
|
|
Attribut-Implementierung | Entität | "Änderungsprotokoll > Entität" ( | keine bzgl. Attribut |
Attribut | Objekt | "Änderungsprotokoll > Objekt" ( | keine bzgl. Attribut |
Vergleichslogik:
Werden keine Unterschiede zwischen dem Eingabewert und dem Vergleichsobjekt festgestellt, lautet der Rückgabewert "Kein Wert" (
$null).Falls kein Vergleichswert konfiguriert ist (Standard) und zur Laufzeit eine Entität als Eingabewert vorliegt, wird auf deren Original-Objekt (also den serverseitigen Stand für die Entität) als Vergleichsobjekt zurückgegriffen. Dies ist der typische Anwendungsfall für den Wertauflöser.
Die Option Entitätsattribute ignorieren wirkt nur in diesem Anwendungsfall. Sie regelt, ob Veränderungen an den Entitätsattributen ("Besitzer", "Erstellt von", "Erstelldatum", usw.) beim Vergleich ignoriert werden (Standard) oder berücksichtigt.
Beinhaltet die Entität im Eingabewert andere Entitäten (z. B. Positionen oder Attribute), wird für diese - ggf. rekursiv - ein Änderungsprotokoll erzeugt, das zusammen mit anderen "Änderungen" als Bestandteil des übergeordneten Änderungsprotokolls erscheint.
Handelt es sich beim Eingabewert nicht um eine Entität, sondern z. B. um einen simplen Wert, eine Liste oder ein "Client-Objekt", dann sollte der Vergleichswert explizit konfiguriert sein, sonst gilt er Eingabewert auch als Vergleichsobjekt und der Wertauflöser gibt "Kein Wert" (
$null) zurück.Falls als Eingabewert eine Liste von Entitäten vorliegt, werden diese nicht automatisch mit dem jeweiligen Original-Objekt verglichen, wenn kein Vergleichswert konfiguriert ist. Allerdings kann das bei Bedarf durch eine explizite Konfiguration für den Vergleichswert erreicht werden (s. Besonderer Anwendungsfall im Abschnitt "Beispiele").
Die Option Änderungen auch für gelöschte und erstellte Werte erzeugen steuert, wieviel Information das Änderungsprotokoll über Objekte bereitstellt, die im Kontext des Vergleichs als erzeugt oder gelöscht eingestuft werden:
Für erstellte oder gelöschte Werte erscheint per Standard (Option abgewählt) nur ein minimaler Informationsumfang.
Wird die Option ausgewählt, gibt das Änderungsprotokoll mehr Daten des betreffenden Objekts aus:
Ein als "gelöscht" eingestuftes Objekt werden "zum Abschied" komplett alle Details wiedergegeben.
Für ein als "erstellt" eingestuftes Objekt werden dessen Daten durch ein "Änderungsprotokoll" mit "Kein Wert" (
$null) als Vergleichsobjekt wiedergegeben.
►WICHTIG◄ Welche Art von "Änderungen" beschreibt das Änderungsprotokoll?
Beim Änderungsprotokoll handelt es sich nicht um ein chronologisches Verzeichnis der an einem konkreten Objekt tatsächlich vorgenommenen Manipulationen. Tatsächlich werden zwei Objekte (der Eingabewert und das Vergleichsobjekt) miteinander verglichen, bei denen es sich um unterschiedliche Versionen desselben Objekts handeln kann aber nicht muss. Allgemein formuliert beschreibt das "Änderungsprotokoll" eine oder mehrere "Änderungen", durch die das Vergleichsobjekt in den Eingabewert überführt werden könnte. Das Änderungsprotokoll beschreibt also eine mögliche Transformation vom Vergleichsobjekt zum Eingabewert, ohne den Anspruch zu erheben, dass die beschriebenen "Änderungen" überhaupt und, wenn genau so stattgefunden haben.
Beispiele zur Veranschaulichung der Bewertungslogik im Änderungsprotokoll:
Im Eingabewert liegt ein volatiler Datenstand für eine beliebige Entität vor, die über ein Feld "Name" (
name) verfügt. Der serverseitige Datenstand (s. Original-Objekt) weist für dasname-Feld den Text "foo" aus. Im volatile Datenstand wurde im Verlauf der aktuellen Transaktion der Text "bar" als "Name" zugewiesen.
Solange in der Transaktion keine anderen Änderungen an der Entität vorgenommen wurden, gilt die Entität damit effektiv als geändert und der Änderungsprotokoll-Wertauflöser weist für das Feld "Name" die Wertänderung von "foo" nach "bar" aus.
Als Erweiterung zum vorherigen Szenario wird der "Name" der Entität nach der Änderung von "foo" nach "bar" wieder zurück auf den Originalwert, also "foo", geändert.
Solange in der Transaktion keine anderen Änderungen an der Entität vorgenommen wurden, gilt die Entität damit als effektiv unverändert und der Änderungsprotokoll-Wertauflöser gibt "Kein Wert" (
$null) zurück.Im Eingabewert liegt eine Liste mit drei Textzeichen (JSON-Abbild:
["O","X","O"]) vor, der als Vergleichswert eine Liste mit dem JSON-Abbild["O","O","O"]gegenübergestellt wird.
Intuitiv würde man vielleicht erwarten, dass der zweite Wert der Liste als "von "O" auf "X" verändert" gewertet wird. Dagegen weist der Änderungsprotokoll-Wertauflöser sinngemäß folgende "Änderungen" aus:
Das "O" an der dritten Listenposition im Vergleichswert wurde in ein "X" umgewandelt und an die zweite Position verschoben.
Das "O" an der zweiten Listenposition wurde an die dritte Listenposition verschoben.
Das Endergebnis dieser Operationen entspricht ebenso dem Eingabewert wie die oben als "intuitiv" beschriebene Änderung der zweiten Listenposition. Warum so kompliziert? Der Wertauflöser ermittelt die Änderungen an einer Liste nach einer Systematik, die die Liste im Eingabewert zuerst nach aus dem Vergleichsobjekt bereits "bekannten" Einträgen durchsucht und erst danach nicht zugeordnete Zielwerte "hinzugefügt" oder "geändert" bewertet. Die für den Menschen intuitive "Nebenbedingung", durch eine minimale Anzahl von "Änderungen" vom Vergleichswert zum Eingabewert zu gelangen, spielt für diesen Algorithmus keine Rolle.
Beispiel eines Änderungsprotokolls:
<?xml version="1.0" encoding="UTF-8"?>
<core:EntityChangeLog [...] fromIndex="-1" toIndex="-1" changeType="MODIFIED" fromClass="shp:Shipment" toClass="shp:Shipment" fromId="51"
toId="51">
<changeLogs>
<core:TypedAttributeChangeLog name="attributes" fromIndex="-1" toIndex="-1" changeType="MODIFIED" fromClass="shp:ShipmentText"
toClass="shp:ShipmentText" fromId="1" toId="1" attributeType="base:TextAttribute" type="base:TextType#DESCRIPTION">
<changeLogs>
<core:ObjectChangeLog name="value" fromIndex="-1" toIndex="-1" changeType="MODIFIED" fromClass="base:TextAttribute"
toClass="base:TextAttribute">
<changeLogs>
<core:SimpleValueChangeLog name="textValue" fromIndex="-1" toIndex="-1">
<fromValue xsi:type="xsd:string">Beschreibung (original)</fromValue>
<toValue xsi:type="xsd:string">Beschreibung (geändert)</toValue>
</core:SimpleValueChangeLog>
</changeLogs>
</core:ObjectChangeLog>
</changeLogs>
</core:TypedAttributeChangeLog>
</changeLogs>
</core:EntityChangeLog>Der Rückgabewert vom Typ "Änderungsprotokoll > Entität" (
EntityChangeLog) definiert über das FeldtoClassdass eine Sendung (s. Sendungen) als Eingabewert übergeben wurde und verweist auf deren ID (toId) mit dem Wert51.Da die Felder
fromClassund fromIdkeine vom Eingabewert abweichenden Daten angeben, betrifft der Vergleich offenbar zwei Datenstände für die Sendung mit der ID 51. Typischerweise dient dabei das Original-Objekt als Vergleichsobjekt, weil kein Vergleichswert konfiguriert wurde.
Das Listenfeld
changeLogsenthält im Beispiel genau ein Element vom Typ "Änderungsprotokoll > Typisiertes Attribut" (TypedAttributeChangeLog), dessen FeldchangeTypeden "Änderungstyp" alsMODIFIED(geändert) benennt.An den Feldern
fromClassundtoClassist erkennbar, dass dasTypedAttributeChangeLogein typisiertes Textattribut - genauer: dessen Implementierung - für eine Sendung (ShipmentText) betrifft.Das
attributeType-Feld verweist auf den als Wert verwendeten Attributtyp (TextAttribute) und das Feldtypeidentifiziert den als Wert aus der Dynamischen Aufzählung Texttyp (TextType) definierten Subtyp "Beschreibung" (DESCRIPTION).
Das Listenfeld
changeLogsinnerhalb desTypedAttributeChangeLog-Elements enthält ein "Änderungsprotokoll > Objekt" (ObjectChangeLog), das das Attribut (TextAttribute) als geändert (MODIFIED) klassifiziert.Das
name-Feld verweist hier auf den Namen desvalue-Felds im Datenmodell des übergeordnetenShipmentText-Objekts.
Das Listenfeld
changeLogsinnerhalb desObjectChangeLogsenthält ein "Änderungsprotokoll > Einfacher Wert" (SimpleValueChangeLog) für dastextValue-Feld (s.name) imTextAttribute-Objekt.Das
SimpleValueChangeLogdokumentiert die Änderung des Textwerts von "Beschreibung (original)" (fromValue) nach "Beschreibung (geändert)" (toValue)
ACHTUNG
Wie das Beispiel zeigt, erzeugt bereits eine simple Textwert-Änderung innerhalb eines bereits existierenden typisierten Attributs einer Sendung einen erheblichen Informationsumfang im Rückgabewert des Änderungsprotokoll-Wertauflösers. Beim Einsatz des Wertauflösers ist zu bedenken, dass multiple Änderungen innerhalb von komplexeren Objekten (etwa ein Geschäftsobjekt mit Positionshierarchie und Attributen auf allen Ebenen) einen erheblichen "Rechenaufwand" bedingen und entsprechende Datenmengen erzeugen können. Oft soll ein umfangreiches Änderungsprotokoll im Anschluss auch noch spezifisch ausgewertet werden, um relevante Informationen zu erhalten oder in leichter "lesbarer" Form aufzubereiten.
Konfiguration
Option "Entitätsattribute ignorieren"
Die Option Entitätsattribute ignorieren ist per Standard ausgewählt. Beim Vergleichen von "Entitätsdaten" werden die sogenannten Entitätsattribute dann nicht ausgewertet. Beispiel: Als Eingabewert liegen die volatilen Daten einer beliebigen Entität vor, die (ohne Konfiguration für den Vergleichswert) mit dem serverseitigen Datenstand abgeglichen werden sollen. In der rechts oben abgebildeten Standardkonfiguration für den Änderungsprotokoll-Wertauflöser ist die Option Entitätsattribute ignorieren ausgewählt. Falls die volatilen Daten der Entität als einzige Änderung einen "Besitzerwechsel" - also einen gegenüber dem Original-Objekt veränderten Wert für das Entitätsattribut "Besitzer" (Feld |
|
Wird die Option Entitätsattribute ignorieren abgewählt, dann bezieht der Vergleich zwischen Eingabewert und Vergleichsobjekt für das Änderungsprotokoll auch alle Entitätsattribute mit ein. Für das obige Beispiel bedeutet dies, dass auch ein "Besitzerwechsel" als Änderung gewertet wird, so dass im Rückgabewert des Änderungsprotokoll-Wertauflösers u. a. ein |
Option "Änderungen auch für gelöschte und erstellte Werte erzeugen"
Die Option Änderungen auch für gelöschte und erstellte Werte erzeugen ist per Standard abgewählt. Falls der Vergleich Werte als "erstellt" oder "gelöscht" klassifiziert, erscheint für diese im Rückgabewert des Änderungsprotokoll-Wertauflösers nur der minimale Funktionsumfang. Der jeweilige "Änderungstyp" ( Beispiel: Als Eingabewert liegen volatile Daten für ein Firmenkonto vor, in denen die serverseitig (noch) gespeicherte Adresse gelöscht wurde. Bei einem Vergleich mit abgewählter Option Änderungen auch für gelöschte und erstellte Werte erzeugen (s. Screenshot rechts oben) wird für das Feld |
|
Wird die Option Änderungen auch für gelöschte und erstellte Werte erzeugen ausgewählt (s. Screenshot rechts unten), dann liefert im oben beschriebenen Szenario der Vergleich detaillierte Informationen für die gelöschte Adresse, die zu diesem Zweck mit "Kein Wert" ( |
Vergleichswert-Konfiguration
Der optionale Parameter Vergleichswert kann verwendet werden, um dem Eingabewert ein Vergleichsobjekt gegenüberzustellen. Wird auf eine Konfiguration für den Vergleichswert komplett verzichtet (Standard, s. Screenshot rechts), dann wird als Vergleichsobjekt das "Originalobjekt" zum Eingabewert verwendet.
|
|
In der Konfiguration rechts soll die Adresse der Firma der Session (im Eingabewert) mit der für den Benutzer der Session angegebenen Adresse verglichen als Vergleichsobjekt verglichen werden.
►ANMERKUNG◄ Falls ein Gastbenutzer (s. Gastbenutzer) angemeldet ist, liefert der Benutzer der Session-Wertauflöser kein Benutzerkonto (s. Benutzer). Dann gibt der verkettete Eingabeobjekt (Typsicher)-Wertauflöser "Kein Wert" ( |
Beispiele
Änderungsprotokoll > Einfacher Wert
Die folgenden Beispiele verwenden das JSON-Format zur Beschreibung von Datenstrukturen.
Eingabewert | Vergleichswert | Änderungsprotokoll |
|---|---|---|
|
| |
| ||
|
| |
| ||
z. B. aus einem Long-Wertauflöser |
z. B. aus einem Ganzzahl-Wertauflöser | |
| ||
Aufzählungswert "Ost" (E) aus der benutzerdefinierten
s. a. Jede Aufzählung | Aufzählungswert "Nord" (N) aus der benutzerdefinierten s. a. Jede Aufzählung | |
| ||
Änderungsprotokoll > Collection
Die folgenden Beispiele verwenden das JSON-Format zur Beschreibung von Datenstrukturen.
Eingabewert | Vergleichswert | Änderungsprotokoll |
|---|---|---|
|
| |
| ||
|
| |
| ||
|
| |
►HINWEIS◄ Die "Eindeutige Liste" verwaltet keine Indexnummern für die Einträge. Die Felder | ||
|
| |
►ANMERKUNG◄ Der Wert 2 taucht im Feld | ||
Besonderer Anwendungsfall: Alle Entitäten in einer Liste vergleichen | ||
Eine mit dem Erzeuge Liste angelegte Collection enthält volatile Daten von unterschiedlichen Entitäten, die gegenüber dem serverseitigen Stand geändert sein können:
Beide Konten wurden bereits erstellt und wurden im aktuellen Kontext unter Umständen verändert. Der Änderungsprotokoll-Wertauflöser sollen alle "volatilen" Änderungen an den als Entitäten aufgelisteten Konten feststellen. |
Als Vergleichswert soll der Liste von Entitäten im Eingabewert eine Liste der zugehörigen "Originalobjekte" gegenübergestellt werden. Dies kann mit dem Sammle Werte-Wertauflöser erreicht werden, der hier als Wert zum Sammeln auf den Original-Objekt-Wertauflöser zurückgreift, um den serverseitigen Stand für jedes Element der als Eingabewert vorliegenden Liste von Entitäten abzurufen. | |
| ||
Änderungsprotokoll > Objekt
Die folgenden Beispiele verwenden das JSON-Format zur Beschreibung von Datenstrukturen.
Eingabewert | Vergleichswert | Änderungsprotokoll |
|---|---|---|
Ein als Relatives Datum mit Zeit ermitteltes "Datum mit Zeit"-Objekt:
|
| |
| ||
| | |
| ||
| | |
| ||
Änderungsprotokoll > Entität
Die folgenden Beispiele verwenden wahlweise das XML-Format und das JSON-Format zur Beschreibung von Datenstrukturen.
Eingabewert | Vergleichswert | Rückgabewert |
|---|---|---|
Eine Ereignisbehandlung wird durch das Ereignis "Ändern" (s. Allgemein (Ereignisse)) ausgelöst, so dass sie auf das Speichern bereits erstellter Entitäten reagiert. Eine Typprüfung stellt sicher, dass die Ereignisaktion nur im Kontext von Zuordnungskriterien aktiv wird. Als Eingabewert liegen also immer die ggf. geänderten volatilen Daten des Zuordnungskriteriums vor, das gespeichert werden soll. Vor dem Speichern von Änderungen soll ein Änderungsprotokoll erstellt werden, damit - abhängig von der Art der Änderungen - ggf. ein Administrator benachrichtigt werden kann. Beispiel:
| nicht konfiguriert, also das Original-Objekt zur betreffenden Entität | |
Ausgehend vom geänderten Stand des Zuordnungskriteriums im vorherigen Beispiel hat der benachrichtigte Administrator das Zuordnungskriterium überprüft und möchte es nun mit Änderungen wieder abspeichern. Die Ereignisbehandlung reagiert wiederum und ermittelt die Änderungen am Zuordnungskriterium über den Änderungsprotokoll-Wertauflöser. Beispiel:
| nicht konfiguriert, also das Original-Objekt zur betreffenden Entität | |










