Auf Elemente im Nachrichtenhauptteil zugreifen

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. Folgen Sie den relevanten übergeordneten und untergeordneten Beziehungen im Baum abwärts, bis Sie das erforderliche Element erreicht haben.

Wenn Sie Feldverweise erstellen, müssen die Namen, die Sie dabei verwenden, gültige ESQL-IDs sein, die den ESQL-Regeln entsprechen. Alles, was Sie in Anführungszeichen setzen, wird von ESQL als ID interpretiert. Alles, was Sie in einfache Anführungszeichen setzen, wird von ESQL als Zeichenliteral interpretiert. Sie müssen alle Zeichenfolgen (Zeichenfolge, Bytefolgen oder binäre Zeichenfolgen), wie in den nachfolgenden Beispielen gezeigt, in Anführungszeichen setzen. Um ein einfaches oder doppeltes Anführungszeichen in einer Zeichenfolge einzuschließen, schließen Sie zwei aufeinanderfolgende einfache oder doppelte Anführungszeichen ein.
Wichtig: Eine vollständige Beschreibung der Feldverweissyntax finden Sie unter Feldverweise in ESQL.
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). Wenn Sie nun beispielsweise das Element CardType aus einem Rechenknoten abfragen möchten, verwenden Sie dazu folgende Anweisung:

IF InputBody.Invoice.Payment.CardType='Visa' THEN
DO;
-- weitere ESQL --
END IF;

Wenn Sie denselben Test in einem Datenbank- oder Filterknoten ausführen möchten (mit Verweis auf eine einzelne Eingabenachricht), verwenden Sie folgenden Code:

IF Body.Invoice.Payment.CardType='Visa' THEN
DO;
-- weitere ESQL --
END IF;

Wenn Sie ein Element aus einer XML-Eingabenachricht in eine Ausgabenachricht im Rechenknoten kopieren möchten, ohne es zu verändern, verwenden Sie folgende ESQL:

SET OutputRoot.XML.Invoice.Customer.FirstName = 
InputBody.Invoice.Customer.FirstName;

Wenn Sie ein Element aus einer XML-Eingabenachricht in eine Ausgabenachricht kopieren und aktualisieren möchten, beispielsweise durch Umsetzen in Großbuchstaben oder durch Berechnen eines neuen Wertes, verwenden Sie folgenden Code:

SET OutputRoot.XML.Invoice.Customer.FirstName = 
UPPER(InputBody.Invoice.Customer.FirstName);  
SET OutputRoot.XML.Invoice.InvoiceNo = InputBody.Invoice.InvoiceNo + 1000;  

Wenn Sie für ein STRING-Element einen konstanten Wert angeben möchten, verwenden Sie folgenden Code:

SET OutputRoot.XML.Invoice.Customer.Title = 'Hr';

Sie können auch die entsprechende Anweisung verwenden:

SET OutputRoot.XML.Invoice.Customer.Title VALUE = 'Hr.';  

Wenn Sie den Datentyp INTEGER oder DECIMAL ändern möchten, beispielsweise das Element TillNumber mit dem Wert 26, verwenden Sie folgende Zuordnung (nur gültig im Rechenknoten):

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. Sie können für Ganzzahlen sowohl die Hexadezimalschreibweise als auch das normale Ganzzahl-Literalformat angeben. Die hexadezimalen Buchstaben A bis F können groß oder klein geschrieben werden, desweiteren das X nach der ersten Null, was erforderlich ist. Das nachfolgende Beispiel erzeugt dasselbe Ergebnis wie das oben gezeigte Beispiel:

SET OutputRoot.MRM.Invoice.TillNumber= 0x1A;  

Die folgenden Beispiele zeigen SET-Anweisungen für Elementtypen, die nicht in der Rechnungs-Beispielnachricht vorkommen.

Sie setzen ein FLOAT-Element mit folgendem Code auf einen nicht-Integer-Wert:

SET OutputRoot.MRM.FloatElement1 = 1.2345e2;  

Sie setzen ein BINARY-Element mit folgendem Code auf einen konstanten Wert:

SET OutputRoot.MRM.BinaryElement1 = X'F1F1';  

Bei BINARY-Werten müssen Sie das Anfangszeichen X (groß oder klein geschrieben) verwenden und die hexadezimalen Zeichen (ebenfalls groß oder klein geschrieben) wie gezeigt in einfache Anführungszeichen setzen.

Verwenden Sie folgenden Code, um ein BOOLEAN-Element auf einen konstanten Wert zu setzen (der Wert 1 ergibt "true" (wahr), 0 ergibt "false" (falsch)):

SET OutputRoot.MRM.BooleanElement1 = true;

oder

SET OutputRoot.MRM.BooleanElement1 = 1;

Sie können mit der SELECT-Anweisung Datensätze aus Eingabenachrichten filtern, ohne sie dabei neu zu formatieren und ohne das vollständige Format jedes Datensatzes zu kennen. Beispiel:

-- Lokale Variable deklarieren
DECLARE CurrentCustomer CHAR 'Schmidt';
-- Schleifendurchlauf durch die Eingabenachricht
SET OutputRoot.XML.Invoice[] = 
(SELECT I FROM InputRoot.XML.Invoice[] AS I
WHERE I.Customer.LastName = CurrentCustomer
);

Dieser Code schreibt alle Datensätze aus der Rechnungs-Eingabenachricht in die Ausgabenachricht, wenn die WHERE-Bedingung (LastName = Schmidt) erfüllt wird. Sämtliche Datensätze, die die Bedingung nicht erfüllen, werden nicht von der Eingabe in die Ausgabe kopiert. "I" wird als Alias für den Korrelationsnamen "InputRoot.XML.Invoice[]" verwendet.

Die deklarierte CurrentCustomer-Variable wird mit der DECLARE-Anweisung initialisiert. Dies ist die effizienteste Methode, eine Variable zu deklarieren, deren Anfangswert bekannt ist.

Sie können diese Alias-Technik für andere SELECT-Anweisungen verwenden. Wenn Sie beispielsweise alle Datensätze der Rechnungs-Eingabenachricht auswählen und einen weiteren Datensatz erstellen möchten:

-- Schleifendurchlauf durch die Eingabenachricht
SET OutputRoot.XML.Invoice[] = 
(SELECT I, 'Kunde' || I.Customer.LastName AS ExtraField
FROM InputRoot.XML.Invoice[] AS I
);

Sie könnten auch eine AS-Klausel einschließen, um Datensätze in einem Unterordner in der Nachrichtenbaumstruktur zu speichern:

-- Schleifendurchlauf durch die Eingabenachricht
SET OutputRoot.XML.Invoice[] = 
(SELECT I AS Order
FROM InputRoot.XML.Invoice[] AS I
);

Wenn Sie Elemente abfragen oder festlegen, die (möglicherweise) Nullwerte enthalten, sollten Sie folgende Überlegungen berücksichtigen:

Nullwerte abfragen
Wenn Sie ein Element mit dem ESQL-Schlüsselwort NULL vergleichen, wird getestet, ob das Element in der logischen Baumstruktur vorhanden ist, die der Parser aus der Eingabenachricht erstellt hat.

Sie können beispielsweise mit folgender Anweisung überprüfen, ob eine Rechnungsnummer in der aktuellen Rechnungsnachricht enthalten ist:

IF InputRoot.XML.Invoice.InvoiceNo IS NULL THEN
DO;
-- weitere ESQL --
END IF;

Sie können auch eine ESQL-Referenz verwenden, wie das folgende Beispiel zeigt.

DECLARE cursor REFERENCE TO InputRoot.MRM.InvoiceNo;
IF LASTMOVE(cursor) = FALSE THEN 
SET OutputRoot.MRM.Analysis = 'Rechnungsnummer nicht in logischer Baumstruktur vorhanden';
ELSEIF FIELDVALUE(cursor) IS NULL THEN
SET OutputRoot.MRM.Analysis = 
'Rechnungsnummer nicht in logischer Baumstruktur vorhanden, aber als MRM-NULL-Wert definiert';
       ELSE
SET OutputRoot.MRM.Analysis = 'Rechnungsnummer 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 Funktion FIELDTYPE.

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
Nachrichtenfluss entwerfen
Nachrichtenflussinhalt definieren
Zugriff auf Elemente in einer Nachricht in der MRM-Domäne
Zugehörige Verweise
Rechenknoten
Datenbankknoten
Filterknoten
ESQL-Referenz
DECLARE-Anweisung
IF-Anweisung
Funktion FIELDVALUE
Funktion LASTMOVE
Funktion SELECT
SET-Anweisung
Feldverweise in ESQL
Reservierte ESQL-Schlüsselwörter
Musternachricht
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 18.05.2006
ac06010_