Zugriff auf Elemente im Nachrichtenhauptteil

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.

Beim Erstellen von Feldverweisen müssen für die Namen gültige ESQL-IDs verwendet werden, die mit den ESQL-Regeln kompatibel sind. Alles, was in Anführungszeichen gesetzt wird, wird von ESQL als ID interpretiert. Alles, was in einfache Anführungszeichen gesetzt wird, wird von ESQL als Zeichenliteral interpretiert. Setzen Sie alle Zeichenfolgen wie in den Beispielen weiter unten in Anführungszeichen (Zeichenfolgen, Bytefolgen oder Bitfolgen). Enthält eine Zeichenfolge ein einfaches oder doppeltes Anführungszeichen, setzen Sie zwei aufeinander folgende einfache bzw. doppelte Anführungszeichen.
Wichtig: Eine vollständige Beschreibung der Feldverweissyntax finden Sie unter ESQL-Feldreferenzen.
Weitere Informationen zu den ESQL-Datentypen finden Sie unter ESQL-Datentypen in Nachrichtenflüssen.

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:

Nullwerte abfragen
Vergleichen Sie ein Element mit dem ESQL-Schlüsselwort NULL, um zu überprüfen, ob das Element in der logischen Baumstruktur vorhanden ist, die ausgehend von der Eingabenachricht vom Parser erstellt wurde.

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.

Nullwerte festlegen
Sie können Nullwerte mit zwei Anweisungen festlegen.
  1. Wenn Sie das Element mit folgender Anweisung auf NULL setzen, wird es in der Nachrichtenbaumstruktur gelöscht:
    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.

  2. Wenn Sie den Wert dieses Elements wie folgt auf NULL setzen:
    SET OutputRoot.XML.Invoice.Customer.Title VALUE = NULL;  
    wird das Element nicht in der Nachrichtenbaumstruktur gelöscht. Stattdessen wird dem Element ein Sonderwert von NULL zugewiesen.
    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.

Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Korrelationsnamen
Nachrichten modellieren
Zugehörige Tasks
Einen Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
Zugriff auf Elemente in einer Nachricht in der MRM-Domäne
Zugehörige Verweise
Rechenknoten (Compute)
Datenbankknoten (Database)
Filterknoten
ESQL-Referenz
DECLARE-Anweisung
IF-Anweisung
FIELDVALUE-Funktion
Funktion LASTMOVE
SELECT-Funktion
SET-Anweisung
ESQL-Feldreferenzen
Reservierte ESQL-Schlüsselwörter
Beispielnachricht
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac06010_