Soll zum Lesen oder Schreiben auf den Inhalt einer Nachricht zugegriffen werden, verwenden Sie die Struktur und Anordnung der Elemente in der Baumstruktur, die der Parser auf Grundlage des Eingabebitstroms erstellt. Navigieren Sie in der Baumstruktur abwärts durch die Beziehungen zwischen über- und untergeordneten Elementen, bis Sie auf das erforderliche Element stoßen.
Die Verwendung dieser unterschiedlichen Korrelationsnamen ist erforderlich, da in einem Datenbank- oder Filterknoten nur auf eine Nachricht verwiesen werden kann. Die Erstellung einer neuen Ausgabenachricht in diesen Knoten ist nicht möglich. Verwenden Sie einen Rechenknoten, um eine neue Ausgabenachricht zu erstellen.
Angenommen, Sie haben einen Nachrichtenfluss erstellt, der die Nachricht "Invoice" verarbeitet (siehe Abbildung in ESQL schreiben). Soll beispielsweise das Element CardType von einem Rechenknoten aus abgefragt werden, verwenden Sie folgende Anweisung:
IF InputBody.Invoice.Payment.CardType='Visa' THEN DO; -- weiterer ESQL-Code -- END IF;
Soll dieselbe Abfrage in einem Datenbank- oder Filterknoten vorgenommen werden (wobei auf eine einzige Eingabenachricht verwiesen wird), verwenden Sie folgende Anweisung:
IF Body.Invoice.Payment.CardType='Visa' THEN DO; -- weiterer ESQL-Code -- END IF;
Soll ein Element aus einer XML-Eingabenachricht im Rechenknoten unverändert in eine Ausgabenachricht kopiert werden, verwenden Sie folgende ESQL-Anweisung:
SET OutputRoot.XML.Invoice.Customer.FirstName = InputBody.Invoice.Customer.FirstName;
Soll ein Element aus einer XML-Eingabenachricht aktualisiert in eine Ausgabenachricht kopiert werden, beispielsweise mit Großschreibung oder mit einem neu berechneten Wert, verwenden Sie folgende Anweisung:
SET OutputRoot.XML.Invoice.Customer.FirstName = UPPER(InputBody.Invoice.Customer.FirstName); SET OutputRoot.XML.Invoice.InvoiceNo = InputBody.Invoice.InvoiceNo + 1000;
Soll ein Zeichenfolgeelement auf einen konstanten Wert gesetzt werden, verwenden Sie folgende Anweisung:
SET OutputRoot.XML.Invoice.Customer.Title = 'Hr';
Alternativ ist die folgende Anweisung möglich:
SET OutputRoot.XML.Invoice.Customer.Title VALUE = 'Mr';
Soll eine ganze oder eine Dezimalzahl aktualisiert werden, z. B. das Element TillNumber auf den Wert 26, verwenden Sie folgende Anweisung (gilt nur für den Rechenknoten):
SET OutputRoot.MRM.Invoice.TillNumber=26;
Ganze Zahlen werden in Form von 64-Bit-Zweierkomplementen gespeichert, dies ermöglicht ganze Zahlen von -9223372036854775808 bis 9223372036854775807. Für ganze Zahlen ist sowohl die Hexadezimalschreibweise als auch die normale Schreibweise mit ganzen Zahlen möglich. Die hexadezimalen Zeichen A bis F können in Groß- oder Kleinschreibung angegeben werden. Dies gilt auch für das an die führende 0 folgende X, das unbedingt erforderlich ist. Das nachfolgende Beispiel führt zum gleichen Ergebnis wie das oben aufgeführte:
SET OutputRoot.MRM.Invoice.TillNumber= 0x1A;
Die folgenden Beispiele enthalten SET-Anweisungen für Elementtypen, die nicht in der Beispielsnachricht "Invoice" vorhanden sind.
Verwenden Sie folgende Anweisung, um ein FLOAT-Element auf eine nicht ganze Zahl zu setzen:
SET OutputRoot.MRM.FloatElement1 = 1.2345e2;
Soll ein BINARY-Element auf einen konstanten Wert gesetzt werden, verwenden Sie folgende Anweisung:
SET OutputRoot.MRM.BinaryElement1 = X'F1F1';
Bei Binärwerten muss ein führendes X (in Groß- oder Kleinschreibung) verwendet und die hexadezimalen Zeichen (in Groß- oder Kleinschreibung) in einfache Anführungszeichen gesetzt werden, wie im Beispiel dargestellt.
Verwenden Sie folgende Anweisung, um ein Boolesches Element auf einen konstanten Wert zu setzen (1 entspricht "true", 0 entspricht "false"):
SET OutputRoot.MRM.BooleanElement1 = true;
oder
SET OutputRoot.MRM.BooleanElement1 = 1;
Mit der SELECT-Anweisung können Sie Datensätze aus einer Eingabenachricht herausfiltern, ohne dass die Datensätze erneut formatiert werden müssen und das Format der einzelnen Datensätze bekannt sein muss. Beachten Sie folgendes Beispiel:
-- Deklaration der lokalen Variablen DECLARE CurrentCustomer CHAR 'Smith'; -- Schleifendurchlauf durch die Eingabenachricht SET OutputRoot.XML.Invoice[] = (SELECT I FROM InputRoot.XML.Invoice[] AS I WHERE I.Customer.LastName = CurrentCustomer );
Hiermit werden alle Datensätze aus der Eingabenachricht "Invoice" in die Ausgabenachricht geschrieben, sofern die WHERE-Bedingung (LastName = Smith) erfüllt wird. Datensätze, die die Bedingung nicht erfüllen, werden nicht von der Eingabe- in die Ausgabenachricht kopiert. "I" wird als Aliasname für den Korrelationsnamen InputRoot.XML.Invoice[] verwendet.
Die deklarierte Variable 'CurrentCustomer' wird mit Hilfe der DECLARE-Anweisung initialisiert. Es handelt sich hierbei um die effizienteste Weise, eine Variable zu deklarieren, deren Anfangswert bekannt ist.
Die Verwendung dieses Aliasverfahrens ist auch im Zusammenhang mit anderen SELECT-Anweisungen möglich. Wenn Sie zum Beispiel alle Datensätze der Eingabenachricht "Invoice" auswählen und einen zusätzlichen Datensatz erstellen möchten:
-- Schleife durch die Eingabenachricht SET OutputRoot.XML.Invoice[] = (SELECT I, 'Kunde' || I.Customer.LastName AS ExtraField FROM InputRoot.XML.Invoice[] AS I );
Auch die Verwendung einer AS-Klausel zum Ablegen der Datensätze in einem Unterordner der Baumstruktur ist möglich:
-- Schleife durch die Eingabenachricht SET OutputRoot.XML.Invoice[] = (SELECT I AS Order FROM InputRoot.XML.Invoice[] AS I );
Wenn Sie versuchen, Elemente abzufragen oder zu setzen, die (möglicherweise) Nullwerte enthalten, berücksichtigen Sie Folgendes:
Sie können beispielsweise mit der nachfolgenden Anweisung überprüfen, ob eine Rechnungsnummer in der aktuellen Rechnungsnachricht vorhanden ist:
IF InputRoot.XML.Invoice.InvoiceNo IS NULL THEN DO; -- weitere ESQL -- END IF;
Sie können auch eine ESQL-Referenz verwenden. Siehe hierzu das nachfolgende Beispiel.
DECLARE cursor REFERENCE TO InputRoot.MRM.InvoiceNo; IF LASTMOVE(cursor) = FALSE THEN SET OutputRoot.MRM.Analysis = 'InvoiceNo nicht in der logischen Baumstruktur vorhanden; ELSEIF FIELDVALUE(cursor) IS NULL THEN SET OutputRoot.MRM.Analysis = 'InvoiceNo ist in der logischen Baumstruktur vorhanden, ist aber als Wert MRM NULL definierte'; ELSE SET OutputRoot.MRM.Analysis = 'InvoiceNo ist vorhanden und hat einen Wert'; END IF;
Weitere Informationen zum Deklarieren und Verwenden von Referenzen finden Sie unter Dynamische Feldverweise erstellen. Eine Beschreibung der Funktionen LASTMOVE und FIELDVALUE erhalten Sie unter Funktion LASTMOVE und FIELDTYPE-Funktion.
Befindet sich die Nachricht in der MRM-Domäne, müssen Sie weitere Überlegungen zum Abfragen von Nullelementen, die vom physischen Format abhängen, berücksichtigen. Ausführliche Informationen hierzu finden Sie unter Nullwerte in einer Nachricht in der MRM-Domäne abfragen.
SET OutputRoot.XML.Invoice.Customer.Title = NULL;
Befindet sich die Nachricht in der MRM-Domäne, müssen Sie weitere Überlegungen bezüglich Nullwerten, die vom physischen Format abhängen, berücksichtigen. Ausführliche Informationen hierzu finden Sie unter Nullwerte in einer Nachricht in der MRM-Domäne festlegen.
Man nennt dies implizite Nullverarbeitung.
SET OutputRoot.XML.Invoice.Customer.Title VALUE = NULL;
SET OutputRoot.XML.Invoice.Customer.Title = NULL;
Befindet sich die Nachricht in der MRM-Domäne, hängt der Inhalt des Ausgabebitstroms von den Einstellungen der Eigenschaften zum Null-Handling des physischen Formats ab. Ausführliche Informationen hierzu finden Sie unter Nullwerte in einer Nachricht in der MRM-Domäne festlegen.
Man nennt dies explizite Nullverarbeitung.
Wenn Sie ein komplexes MRM-Element oder ein übergeordnetes XML-, XMLNS- oder JMS-Element ohne das VALUE-Schlüsselwort auf NULL setzen, werden das Element und alle untergeordneten Elemente in der logischen Baumstruktur gelöscht.