Ao referir-se a ou criar o conteúdo de mensagens, é muito provável que os dados contenham campos de repetição. Se souber quantas instâncias existem de um campo de repetição, e desejar acessar uma instância específica de tal campo, será possível utilizar um índice de matriz como parte de uma referência de campo.
Por exemplo, talvez você queira filtrar a primeira linha de um endereço para encaminhar a entrega de um pedido. Três instâncias do elemento Billling.Address estão sempre presentes na mensagem de amostra. Para testar a primeira linha, grave uma expressão, tal como:
IF Body.Invoice.Customer.Billing.Address[1] = 'Patent Office' THEN DO; -- mais ESQL -- END IF;
O índice da matriz [1] indica que esta é a primeira instância do campo de repetição de seu interesse (os índices da matriz começam com 1). Um índice da matriz como esse pode ser utilizado em qualquer ponto em uma referência de campo, portanto, você pode, por exemplo, filtrar o seguinte teste:
IF Body.Invoice."Item"[1].Quantity > 2 THEN DO; -- mais ESQL -- END IF;
Você pode fazer referência à última instância de um campo de repetição, utilizando o índice de matriz especial [<] e as instâncias relativas à última (por exemplo, a penúltima), da seguinte forma:
Você também pode utilizar o índice da matriz [>] para representar o primeiro elemento e elementos relativos ao primeiro elemento de forma semelhante.
Os exemplos a seguir se referem à mensagem Invoice utilizando estes índices:
IF Body.Invoice.Customer.Billing.Address[<] = 'Hampshire' THEN DO; -- mais ESQL -- END IF; IF Body.Invoice.Customer.Billing.Address[<2 ] = 'Southampton' THEN DO; -- mais ESQL -- END IF;
Você também pode utilizar esses índices especiais para elementos que se repetem um número de vezes desconhecido.
Se você transmitir uma mensagem com várias repetições de um elemento através de um fluxo de mensagens e desejar excluir algumas delas, lembre-se de que a numeração das repetições é reordenada após cada exclusão. Por exemplo, se você tiver uma mensagem com cinco repetições de um elemento específico e tiver o seguinte ESQL no fluxo de mensagens:
SET OutputRoot.MRM.e_PersonName[1] = NULL; SET OutputRoot.MRM.e_PersonName[4] = NULL;
Você pode esperar que os elementos um e quatro sejam excluídos. No entanto, como os elementos de repetição estão armazenados em uma pilha, quando você exclui um, o que está acima dele fica em seu lugar. Isso significa que, no exemplo acima, os elementos um e cinco serão excluídos. Para evitar esse problema, é recomendável fazer exclusões na ordem inversa, ou seja, excluir o elemento quatro primeiro, em seguida, excluir o elemento um.