Wenn Sie zum Lesen oder Schreiben auf den Inhalt einer Nachricht zugreifen möchten, verwenden Sie Struktur und Anordnung der Elemente in der Baumstruktur, die der Parser aus dem Eingabebitstrom 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 Filter-Knoten nur auf eine Nachricht verwiesen werden kann. Die Erstellung einer Ausgabenachricht in diesen Knoten ist nicht möglich. Verwenden Sie zur Erstellung einer Ausgabenachricht einen Compute-Knoten.
Angenommen, Sie haben einen Nachrichtenfluss erstellt, der die Nachricht "Invoice" verarbeitet (siehe Abbildung in ESQL schreiben). Soll beispielsweise das Element CardType von einem Compute-Knoten 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 Filter-Knoten 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 Compute-Knoten unverändert in eine Ausgabenachricht kopiert werden, verwenden Sie folgende ESQL-Anweisung:
SET OutputRoot.XMLNS.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.XMLNS.Invoice.Customer.FirstName =
UPPER(InputBody.Invoice.Customer.FirstName);
SET OutputRoot.XMLNS.Invoice.InvoiceNo = InputBody.Invoice.InvoiceNo + 1000;
Soll ein Zeichenfolgeelement auf einen konstanten Wert gesetzt werden, verwenden Sie folgende Anweisung:
SET OutputRoot.XMLNS.Invoice.Customer.Title = 'Mr';
Alternativ ist die folgende Anweisung möglich:
SET OutputRoot.XMLNS.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 Compute-Knoten):
SET OutputRoot.MRM.Invoice.TillNumber=26;
Der Datentyp INTEGER speichert Zahlen unter Verwendung der 64-Bit-Zweierkomplementform. Gültige Zahlen liegen dabei zwischen -9223372036854775808 und 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 auf 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 Beispielnachricht 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 müssen 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. Beispiel:
-- Deklaration der lokalen Variablen
DECLARE CurrentCustomer CHAR 'Smith';
-- Schleifendurchlauf durch die Eingabenachricht
SET OutputRoot.XMLNS.Invoice[] =
(SELECT I FROM InputRoot.XMLNS.Invoice[] AS I
WHERE I.Customer.LastName = CurrentCustomer
);
Hiermit werden alle Datensätze aus der Eingabenachricht 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 Alias für den Korrelationsnamen "InputRoot.XMLNS.Invoice[]" verwendet.
Die deklarierte Variable 'CurrentCustomer' wird mithilfe der DECLARE-Anweisung initialisiert. Dies ist 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 auswählen und einen zusätzlichen Datensatz erstellen möchten:
-- Schleifendurchlauf durch die Eingabenachricht
SET OutputRoot.XMLNS.Invoice[] =
(SELECT I, 'Kunde' || I.Customer.LastName AS ExtraField
FROM InputRoot.XMLNS.Invoice[] AS I
);
Auch die Verwendung einer AS-Klausel zum Ablegen der Datensätze in einem Unterordner der Baumstruktur ist möglich:
-- Schleifendurchlauf durch die Eingabenachricht
SET OutputRoot.XMLNS.Invoice[] =
(SELECT I AS Order
FROM InputRoot.XMLNS.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.XMLNS.Invoice.InvoiceNo IS NULL THEN
DO;
-- weiterer ESQL-Code -- END IF;
Wie in dem folgenden Beispiel gezeigt, können Sie auch eine ESQL-Referenz verwenden:
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.XMLNS.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.XMLNS.Invoice.Customer.Title VALUE = NULL;
SET OutputRoot.XMLNS.Invoice.Customer.Title = NULL;
Befindet sich die Nachricht in der MRM-Domäne, hängt der Inhalt des Ausgabebitstroms von den Einstellungen der Eigenschaften zur Nullwertbehandlung 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.