Objekt aus Server XML erzeugen
Wertauflöser - Kurzfassung
Zweck: Versucht eine als Eingabewert übergebene Zeichenfolge als als XML zu parsen und als Server-XML-Format zu interpretieren, um ein Objekt zurückzugeben.
Siehe auch: Server XML aus Objekt erzeugen
Der Objekt aus Server XML erzeugen-Wertauflöser versucht eine als Eingabewert übergebene Zeichenfolge als XML zu parsen und als Server-XML-Format (s. Server Datenencoder) zu interpretieren, um ein Objekt zurückzugeben.
Dabei sind folgende Fälle zu unterscheiden:
Eingabewert (abstrakt) |
Eingabewert (konkrete Beispiele) |
Rückgabewert |
Fehler |
kein Wert ($null) |
kein Wert ($null) |
kein Wert ($null) |
n/a |
Eine Zeichenfolge, die kein wohlgeformtes XML definiert |
leere Zeichenfolge ("") abcXYZ <missingSlashInClosingTag>XYZ<missingSlashInClosingTag> |
n/a |
ProcessException:Failed to unmarshal |
Eine Zeichenfolge, die ein wohlgeformtes XML ergibt, das sich auf ein für den Server unbekanntes root-Element bezieht |
<unknownRootElement>XYZ</unknownRootElement> |
n/a |
ProcessException: Failed to unmarshal |
Eine Zeichenfolge, die ein wohlgeformtes XML ergibt, das sich auf ein für den Server definierten root-Element-Typ (hier: any) bezieht, aber dessen Schema missachtet. ►HINWEIS◄ Im serverseitig angewendeten Schema nicht vorgesehene Inhalte werden ignoriert!1 |
<any>123</any> |
kein Wert ($null) |
n/a |
<any><value>123</value></any> |
Datenobjekt mit einem Feld value, das keinen Wert ($null) enthält |
n/a |
|
Eine Zeichenfolge, die ein wohlgeformtes XML ergibt, das sich auf einen für den Server definierten root-Element-Typ (hier: any) bezieht und erfolgreich gegen dessen Schema validiert werden kann. ►HINWEIS◄ Im serverseitig angewendeten Schema nicht vorgesehene Inhalte werden ignoriert! |
<any xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <value xsi:type="xsd:long">123</value></any> |
123 |
n/a |
<?xml version="1.0" encoding="UTF-8"?> |
Entität des Typs "Bestellung" (ord:Order); |
n/a |
Konfiguration
Der Wertauflöser verwendet keine Parameter.
Als Eingabewert wird die Zeichenfolge erwartet, die vom Server als XML für ein Datenobjekt geparst werden soll.
Beispiele
XML-Daten einer Entität per "Textverarbeitung" manipulieren
Das folgende Beispiel zeigt, wie der Objekt aus Server XML erzeugen-Wertauflöser in Verbindung mit dem Server XML aus Objekt erzeugen-Wertauflöser eingesetzt werden kann, um die Daten einer Entität - hier vom Typ "Bestellung" (s. Bestellungen) - so zu manipulieren, dass die manipulierten Daten eine neue Entität - hier vom Typ "Sendung" (s. Sendungen) definieren. Dabei sollen alle Merkmale der "Bestellung" auf die "Sendung" übertragen werden, die das XML-Schema für Sendungen unterstützt.
Laufzeitbeispiel:
Aus einer Bestellung mit den folgenden Angaben zu beteiligten Firmen und Positionen wird "per Knopfdruck" - genauer: indem ein Eigenes Aktionsevent per Ribbon Button ausgelöst wird - eine Sendung erstellt, die auf Sendungen abbildbaren Merkmale der Bestellung widerspiegelt:
Zur Demonstration wird die erstellte Sendung hier in einer ähnlich aufgebauten Erfassungsmaske wiedergegeben:
Das Feld "Bestelltyp" (orderType) ist im Schema für Sendungen nicht vorgesehen. Es entfällt in den Daten der erzeugten Sendung.
Die beteiligten Firmen und Positionen werden komplett übertragen. Für die Sendungspositionen sieht die Maske zusätzliche Felder vor, die natürlich leer bleiben.
ACHTUNG
Das Umwandeln eines Entitätstyps in einen anderen durch die Manipulation von XML-Daten sollte nicht als "gute Praxis" missverstanden werden. Es ist im Allgemeinen keine empfehlenswerte Methodik zur Datenmanipulation und dient hier nur als Demonstrationsbeispiel für den Einsatz des Objekt aus Server XML erzeugen-Wertauflösers. Ein Lobster_data-Profil (mit Mappings zwischen den zugehörigen Lobster_pro Vorlagen) oder eine Ereignisbehandlung mit einer konkreten Sequenz von Wertzuweisungen lösen die systematische Datentransformation zwischen zwei Entitätstypen sicher robuster, flexibler und wartungsfreundlicher als die folgende Konfiguration. Nur weil die Datenmodelle bzw. Schemas von Bestellungen und Sendungen weitgehend kompatibel sind, ist der Weg einer "Textverarbeitung" auf der Ebene der Server-XMLs überhaupt gangbar. Die beschriebene "Textverarbeitung" erhebt auch nicht den Anspruch jede für eine Bestellung denkbare "Datenlage" abzudecken.
Konfiguration:
Die Ereignisbehandlung, deren Ereignisaktionen rechts abgebildet sind, wird im Kontext einer Bestellung über ein Eigenes Aktionsevent (per Ribbon Button) ausgelöst. Eine Typprüfung in der "Prüfenden Regel" (nicht im Bild) stellt sicher, dass als Eingabewert eine Bestellung anliegt. Die Umwandlung von der Bestellung zur Sendung erfolgt im Kopf einer Ausführen mit-Ereignisaktion, in deren Kontext die zu erstellende Sendung als abweichendes Bezugsobjekt gilt. Eine Verkettung von Wertauflösern führt folgende Schritte aus:
Der Aktionsblock definiert folgende Aktionen im Kontext der neuen Sendung:
►HINWEIS◄ Das Entfernen der Entitätsattribute id und lastModified ist für alle Entitäten erforderlich, die im Kontext der Sendung neu erstellt werden sollen. Das betrifft Attribute, Positionen und den Kopf der Entität (das root-Element im XML). |
|
|
Das Namespace-Attribut xmlns:ord sollte nur im root-Element (ord:Order) des XMLs der Bestellung vorkommen. Es kann daher durch einfaches Text ersetzen identifiziert und durch den entsprechenden Eintrag für Sendungen (xmlns:shp="SCM.SHIPMENT") ersetzt werden. |
|
An allen Stellen, wo das XML der Bestellung auf den Namespace ord verweist muss für die Sendung der Namespace shp angegeben werden. In allen relevanten Fällen folgt auf den Namen des Namespaces auch ein Klassenname für das betreffende Element, der für Bestellungen mit Order und für Sendungen mit Shipment beginnt. Der Reguläre Ausdruck für die Ersetzung soll für öffnende und schließende Tags im XML greifen:
Der Suchtext (<[/]?)ord:Order identifiziert in unserem Beispiel alle relevanten Stellen. Beim Ersetzen wird die Einleitung des Tags ($1) beibehalten, die Kombination von Namespace und Klassenpräfix dagegen ersetzt. |
|
Das Entfernen der Entitätsattribute (id und lastModified) aus relevanten Elementen erfolgt in zwei separaten Schritten, um sicherzustellen, dass das Ersetzten unabhängig von der Reihenfolge der Attribute funktioniert. Der Reguläre Ausdruck ist dabei jeweils nach demselben Schema aufgebaut:
Als Wert für Ersetzen mit wird nur die erste Gruppe ($1) angegeben, die vom Beginn des Tags bis zum Leerzeichen vor dem zu eliminierenden Attribut reicht. Das unerwünschte Attribut wird also entfernt. Der nachfolgende Text bleibt unverändert erhalten. ►HINWEIS◄ Die Entitätsattribute (id und lastModified) dürfen nicht pauschal aus allen Tags entfernt werden, da die Struktur der Sendung eingebettete Entitäten enthalten kann, die unbedingt inklusive ihrer Entitätsattribute in die Sendung übernommen werden sollen. In unserem Beispiel betrifft das z. B. die Adressen, die in Firmen- und Adressattributen enthalten sind. |