E' possibile utilizzare una variabile di tipo REFERENCE come riferimento dinamico per navigare in una struttura ad albero del messaggio. Tale riferimento funziona allo stesso modo di un cursore del messaggio oppure di un puntatore della variabile. Generalmente, è più semplice ed efficiente utilizzare le variabili di riferimento rispetto agli indici di array quando si accede a strutture ripetute. Le variabili di riferimento sono accettate ovunque. I riferimenti di campo vengono accettati e forniti con una serie di istruzioni e funzioni per consentire la manipolazione dettagliata delle strutture ad albero del messaggio.
E' necessario dichiarare un riferimento dinamico prima di poterlo utilizzare. Un riferimento dinamico è dichiarato ed inizializzato in una singola istruzione. L'esempio riportato di seguito illustra come creare ed utilizzare un riferimento.
-- 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;
Questo esempio dichiara un riferimento dinamico, myref, che punta al primo elemento nell'array all'interno di Purchases. Il valore nel primo elemento è incrementato di uno ed il puntatore (riferimento dinamico) viene spostato all'elemento successivo. Ancora una volta, il valore dell'elemento viene incrementato di uno. Tale processo continua fino a quando il puntatore si sposta all'esterno dell'ambito dell'array del messaggio (tutti gli elementi in questo array sono stati elaborati) e la funzione LASTMOVE restituisce FALSE.
Gli esempi riportati di seguito illustrano ulteriori casi.
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;
Nel secondo esempio, ref2 è impostato in modo da puntare a InputBody perché il campo specificato non esiste.
Ad eccezione dell'istruzione MOVE, che modifica la posizione del riferimento dinamico, è possibile utilizzare un riferimento dinamico in qualsiasi punto in cui è possibile utilizzare un riferimento statico. Il valore del riferimento dinamico in qualsiasi espressione o istruzione è il valore del campo o variabile a cui punta. Ad esempio, utilizzando il messaggio in Messaggio di esempio, il valore di Invoice.Customer.FirstName è Andrew. Se il riferimento dinamico myref è impostato in modo da puntare al campo FirstName, come riportato di seguito:
DECLARE myref REFERENCE TO Invoice.Customer;
il valore di myref è Andrew. E' possibile estendere tale riferimento dinamico nel modo riportato di seguito:
SET myref.Billing.Address[1] = 'Oaklands';
In questo modo, l'indirizzo nell'esempio viene modificato in Oaklands Hursley Village Hampshire SO213JR.
La posizione di un riferimento dinamico resta fissa anche se la struttura ad albero viene modificata. Per illustrare tale punto, i passi riportati di seguito utilizzano il messaggio in Messaggio di esempio come relativo messaggio di input e creano una versione modificata di tale messaggio come un messaggio di output: