Puede utilizar una variable de tipo REFERENCE como una referencia dinámica para navegar por un árbol de mensaje. Esto actúa de forma similar a un cursor de mensaje o un puntero de variable. Generalmente es más sencillo y eficaz utilizar variables de referencia antes que índices de matriz para acceder a estructuras que se repiten. Las variables de referencia se aceptan en todas partes. Las referencias de campo se aceptan e incluyen un conjunto de sentencias y funciones que permiten manipular detalladamente los árboles de mensajes.
Debe declarar una referencia dinámica antes de poder utilizarla. Una referencia dinámica se declara e inicializa en una sola sentencia. El ejemplo siguiente muestra cómo crear y utilizar una referencia.
-- Declarar la referencia dinámica DECLARE myref REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1]; -- Continuar el proceso para cada elemento de la matriz WHILE LASTMOVE(myref)=TRUE DO -- Añadir 1 a cada elemento de la matriz SET myref = myref + 1; -- Mover la referencia dinámica al siguiente elemento de la matriz MOVE myref NEXTSIBLING; END WHILE;
Este ejemplo declara una referencia dinámica, myref, que apunta al primer elemento de la matriz contenido en Purchases. El valor del primer elemento se aumenta en uno y el puntero (la referencia dinámica) se traslada al elemento siguiente. Una vez más el valor de elemento se aumenta en uno. Este proceso continúa hasta que el puntero sale del ámbito de la matriz de mensaje (todos los elementos de esta matriz se han procesado) y la función LASTMOVE devuelve FALSE.
Los ejemplos siguientes muestran ejemplos adicionales:
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;
En el segundo ejemplo, ref2 se establece de modo que apunte a InputBody debido a que el campo especificado no existe.
Con la excepción de la sentencia MOVE que cambia la posición de la referencia dinámica, puede utilizar una referencia dinámica en cualquier lugar que pueda utilizar una referencia estática. El valor de la referencia dinámica en cualquier expresión o sentencia es el valor del campo o variable al que apunta actualmente. Por ejemplo, al utilizar el mensaje en Mensaje de ejemplo, el valor de Invoice.Customer.FirstName es Andrew. Si la referencia dinámica myref se establece de modo que apunte al campo FirstName, como se indica a continuación:
DECLARE myref REFERENCE TO Invoice.Customer;
el valor de myref es Andrew. Puede ampliar esta referencia dinámica como se indica a continuación:
SET myref.Billing.Address[1] = 'Oaklands';
Esto modifica la dirección del ejemplo a Oaklands Hursley Village Hampshire SO213JR.
La posición de una referencia dinámica permanece fija incluso si se modifica un árbol. Para ilustrar este punto, los pasos que siguen utilizan el mensaje en Mensaje de ejemplo como su mensaje de entrada y crean una versión modificada de este mensaje como un mensaje de salida: