WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Zugriff auf Elemente im Nachrichtenhauptteil

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.

Beim Erstellen von Feldverweisen müssen für die Namen gültige ESQL-IDs verwendet werden, die mit den ESQL-Regeln kompatibel sind. Wenn Sie ein Element in Anführungszeichen setzen, wird es von ESQL als ID interpretiert. Wenn Sie ein Element in einfache Anführungszeichen setzen, wird es von ESQL als Zeichenliteral interpretiert. Setzen Sie alle Zeichenfolgen wie in den folgenden Beispielen 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 Übersicht über 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 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:

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.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.

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

  2. Wenn Sie den Wert dieses Elements wie folgt auf NULL setzen:
    SET OutputRoot.XMLNS.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.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.

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:19:56


TaskthemaTaskthema | Version 8.0.0.5 | ac06010_