Acceso a varias apariciones conocidas de un elemento

Cuando haga referencia al contenido de mensajes o lo cree, es muy probable que los datos contengan campos repetidos. Si sabe cuántas instancias hay de un campo repetido y desea acceder a una instancia específica de un campo de este tipo, puede utilizar un índice de matriz como parte de una referencia de campo.

Por ejemplo, tal vez desee filtrar la primera línea de una dirección para acelerar la entrega de un pedido. Tres instancias del elemento Billling.Address están siempre presentes en el mensaje de ejemplo. Para probar la primera línea, escriba una expresión como, por ejemplo:

IF Body.Invoice.Customer.Billing.Address[1] = 'Patent Office' THEN
   DO;
     -- más ESQL --
END IF;   

El índice de matriz [1] indica que es la primera instancia del campo repetido en la que está interesado (los índices de matriz empiezan por 1). Un índice de matriz como éste puede utilizarse en cualquier punto de una referencia de campo, así que, por ejemplo, podría filtrar la prueba siguiente:

IF Body.Invoice."Item"[1].Quantity > 2 THEN
   DO;
     -- más ESQL --
END IF;   

Puede hacer referencia a la última instancia de un campo repetido mediante el índice de matriz especial [<] y a instancias relativas a la última (por ejemplo, la antepenúltima) como se indica a continuación:

También puede utilizar el índice de matriz [>] para representar el primer elemento, y los elementos relativos al primer elemento de manera similar.

Los ejemplos siguientes hacen referencia al mensaje Invoice que utiliza estos índices:

IF Body.Invoice.Customer.Billing.Address[<] = 'Hampshire' THEN 
      DO;
     -- más ESQL --
END IF;   
IF Body.Invoice.Customer.Billing.Address[<2 ] = 'Southampton' THEN
   DO;
     -- más ESQL --
END IF;   

También puede utilizar estos índices especiales para elementos que se repiten en un número desconocido de veces.

Supresión de campos repetidos

Si pasa un mensaje con varias repeticiones de un elemento a través de un flujo de mensajes y quiere suprimir algunas repeticiones, tenga en cuenta que la numeración de las repeticiones se reordena después de cada supresión. Por ejemplo, si tiene un mensaje con cinco repeticiones de un elemento en particular y en el flujo de mensajes tiene el siguiente ESQL:

SET OutputRoot.MRM.e_PersonName[1] = NULL;
SET OutputRoot.MRM.e_PersonName[4] = NULL;

Podría esperar que se suprimieran los elementos uno y cuatro. Sin embargo, dado que los elementos repetidos se almacenan en una pila, cuando se suprime uno, el que está encima ocupa su lugar. Esto quiere decir que, en el ejemplo anterior, se suprimen los elementos uno y cinco. Para evitar este problema, realice la supresión en orden inverso, es decir, suprima primero el elemento cuatro y luego el elemento uno.

Conceptos relacionados
Flujos de mensajes
ESQL
Diseño de mensajes

Tareas relacionadas
Acceso a varias ocurrencias desconocidas de un elemento
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Gestión de archivos ESQL

Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Sentencia IF
Sentencia SET
Mensaje de ejemplo