Variablen des Typs REFERENCE können als dynamische Verweise 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.
-- Declare the dynamic reference DECLARE myref REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1]; -- Continue processing for each item in the array WHILE LASTMOVE(myref)=TRUE DO -- Add 1 to each item in the array SET myref = myref + 1; -- Move the dynamic reference to the next item in the array MOVE myref NEXTSIBLING; END WHILE;
In diesem Beispiel wird ein dynamischer Verweis, 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 (der dynamische Verweis) 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 Verweise ändert, können dynamische Verweise überall dort verwendet werden, wo auch statische Verweise verwendet werden. Bei dem Wert eines dynamischen Verweises in einem beliebigen Ausdruck oder in einer beliebigen Anweisung handelt es sich um den Wert des Felds oder der Variable, auf das bzw. die der dynamische Verweis momentan zeigt. Bei der unter Musternachricht aufgeführten Nachricht hat Invoice.Customer.FirstName den Wert 'Andrew'. Wird der dynamische Verweis 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, diesen dynamischen Verweis 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 eines dynamischen Verweises ä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.