Dynamische Feldverweise erstellen

Variablen des Typs REFERENCE können als dynamische Referenzen für den Zugriff auf eine Nachrichtenbaumstruktur verwendet werden. Sie arbeitet ähnlich wie ein Nachrichten-Cursor oder Variablenzeiger. Im Allgemeinen ist es einfacher und effizienter, für den Zugriff auf Strukturen mit vielen Wiederholungen Verweisvariablen anstelle von Bereichsindexen zu verwenden. Verweisvariablen werden überall akzeptiert. Feldverweise werden akzeptiert und benötigen eine Gruppe von Anweisungen und Funktionen, um die detaillierte Bearbeitung von Nachrichtenbaumstrukturen zu ermöglichen.

Dynamische Verweise müssen vor ihrer Verwendung deklariert werden. Dynamische Verweise werden mit einer einzigen Anweisung deklariert und initialisiert. Das folgende Beispiel veranschaulicht die Erstellung und Verwendung eines Verweises.

-- Dynamische Referenz deklarieren
DECLARE myref REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1];
-- Jedes Element im Bereich verarbeiten
WHILE LASTMOVE(myref)=TRUE 
DO  
-- Zu jedem Element im Bereich 1 hinzufügen
SET myref = myref + 1;
-- Dynamischen Verweis auf nächstes Element im Bereich setzen
MOVE myref NEXTSIBLING;
END WHILE;

In diesem Beispiel wird eine dynamischer Referenz, myref, deklariert, der auf das erste Element der Nachrichtenstruktur in 'Purchases' verweist. Der Wert des ersten Elements wird um 1 erhöht, anschließend geht der Zeiger (die dynamische Referenz) zum nächsten Element. Auch der Wert dieses Elements wird um 1 erhöht. Dieser Vorgang wird fortgesetzt, bis sich der Zeiger aus der Nachrichtenstruktur bewegt (alle Elemente in dieser Nachrichtenstruktur wurden verarbeitet) und die Funktion LASTMOVE den Wert FALSE zurückgibt.

Im Folgenden finden Sie zwei weitere Beispiele.

DECLARE ref1 REFERENCE TO InputBody.Invoice.Purchases.Item[1];
DECLARE ref2 REFERENCE TO 
InputBody.Invoice.Purchases.NonExistentField;
DECLARE scalar1 CHARACTER;
DECLARE ref3 REFERENCE TO scalar1; 

Im zweiten Beispiel zeigt ref2 auf InputBody, da das angegebene Feld nicht vorhanden ist.

Mit Ausnahme der MOVE-Anweisung, die die Position dynamischer Referenzen, können dynamische Referenzen überall dort verwendet werden, wo auch statische Referenzen verwendet werden. Bei dem Wert einer dynamischen Referenz in einem beliebigen Ausdruck oder in einer beliebigen Anweisung handelt es sich um den Wert des Felds oder der Variable, auf das bzw. die die dynamische Referenz momentan zeigt. Bei der unter Musternachricht aufgeführten Nachricht hat Invoice.Customer.FirstName den Wert 'Andrew'. Wird die dynamische Referenz myref so gesetzt, dass er auf das Feld 'FirstName' zeigt:

DECLARE myref REFERENCE TO Invoice.Customer;

so hat myref den Wert 'Andrew'. Es ist auch möglich, diese dynamische Referenz wie folgt zu erweitern:

SET myref.Billing.Address[1] = 'Oaklands';

Dadurch wird die Adresse in unserem Beispiel in 'Oaklands Hursley Village Hampshire SO213JR' geändert.

Die Position einer dynamischen Referenz ändert sich nicht, auch wenn eine Baumstruktur geändert wird. Um dies zu veranschaulichen, wird für die nächsten Schritte die unter Musternachricht angeführte Nachricht als Eingabenachricht verwendet und eine veränderte Version dieser Nachricht in Form einer Ausgabenachricht erstellt.

  1. Kopieren Sie die Eingabenachricht in die Ausgabenachricht.
  2. Ändern Sie die Ausgabenachricht, indem Sie zunächst die dynamischen Referenz ref1 deklarieren, der auf das erste Element, "The XML Companion", zeigt.
    DECLARE ref1 REFERENCE TO 
    OutputRoot.XML.Invoice.Purchases.Item[1];
    Die dynamische Referenz entspricht jetzt der statischen Referenz OutputRoot.XML.Invoice.Purchases.Item[1].
  3. Fügen Sie mit einer CREATE-Anweisung ein neues erstes Element für diesen Kaufvorgang (Purchase) ein.
    CREATE PREVIOUSSIBLING OF ref1 VALUES 'Item'; 
    Die dynamische Referenz entspricht jetzt der statischen Referenz OutputRoot.XML.Invoice.Purchases.Item[2].
Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Nachrichten modellieren
Zugehörige Tasks
Nachrichtenfluss entwerfen
Nachrichtenflussinhalt definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Rechenknoten
Datenbankknoten
Filterknoten
ESQL-Referenz
DECLARE-Anweisung
IF-Anweisung
Funktion LASTMOVE
MOVE-Anweisung
SET-Anweisung
WHILE-Anweisung
Musternachricht
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 18.05.2006
ak04864_