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.