Creación de referencias de campo dinámicas

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:

  1. Copie el mensaje de entrada en el mensaje de salida.
  2. Para modificar el mensaje de salida, en primer lugar declare una referencia dinámica ref1 que apunte al primer elemento, el compañero XML.
    DECLARE ref1 REFERENCE TO 
    	OutputRoot.XML.Invoice.Purchases.Item[1];
    La referencia dinámica es ahora equivalente a la referencia estática OutputRoot.XML.Invoice.Purchases.Item[1].
  3. Utilice una sentencia CREATE para insertar un primer elemento nuevo para esta compra.
    CREATE PREVIOUSSIBLING OF ref1 VALUES 'Item'; 
    La referencia dinámica es ahora equivalente a la referencia estática OutputRoot.XML.Invoice.Purchases.Item[2].
Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Sentencia DECLARE
Sentencia IF
Función LASTMOVE
Sentencia MOVE
Sentencia SET
Sentencia WHILE
Mensaje de ejemplo
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak04864_