Criando Referências de Campos Dinâmicos

Você pode utilizar uma variável de tipo REFERENCE como uma referência dinâmica para navegar por uma árvore de mensagens. Isso atua de maneira semelhante a um cursor de mensagem ou ponteiro de variável. Geralmente, é mais simples e mais eficiente utilizar variáveis de preferência em vez de índices matriciais ao acessar estruturas repetitivas. As variáveis de referência são aceitas em qualquer lugar. As referências de campos são aceitas e são fornecidas com um conjunto de instruções e funções para permitir a manipulação detalhada de árvores de mensagens.

Você deve declarar uma referência dinâmica antes de utilizá-la. Uma referência dinâmica é declarada e inicializada e uma única instrução. O exemplo a seguir mostra como criar e utilizar uma referência.

-- 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;

Esse exemplo declara uma referência dinâmica, myref, que aponta para o primeiro item na matriz em Purchases. O valor no primeiro item é incrementado em um e o ponteiro (referência dinâmica) é movido para o próximo item. Mais uma vez o valor do item é incrementado em um. Esse processo continua até o ponteiro mover para fora do escopo da matriz da mensagem (todos os itens dessa matriz foram processados) e a função LASTMOVE retornar FALSE.

O exemplo abaixo mostra exemplos adicionais.

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; 

No segundo exemplo, ref2 está definido para apontar para InputBody, porque o campo especificado não existe.

Com exceção da instrução MOVE, que altera a posição da referência dinâmica, você pode utilizar uma referência dinâmica em qualquer local em que utiliza uma referência estática. O valor da referência dinâmica em qualquer expressão ou instrução é o valor do campo ou variável para o qual ela aponta. Por exemplo, utilizando a mensagem em Mensagem de Exemplo, o valor de Invoice.Customer.FirstName será Andrew. Se a referência dinâmica myref for definida para apontar para o campo FirstName da seguinte maneira:

DECLARE myref REFERENCE TO Invoice.Customer;

o valor de myref é Andrew. Você também pode estender essa referência dinâmica da seguinte forma:

SET myref.Billing.Address[1] = 'Oaklands';

Isso altera o endereço no exemplo para Oaklands Hursley Village Hampshire SO213JR.

A posição de uma referência dinâmica permanece fixa mesmo se uma árvore for modificada. Para ilustrar esse ponto, as etapas a seguir utilizam a mensagem em Mensagem de Exemplo como mensagem de entrada e criam uma versão modificada dessa mensagem como uma mensagem de saída:

  1. Copie a mensagem de entrada na mensagem de saída.
  2. Para modificar a mensagem de saída, primeiro declare uma referência dinâmica ref1 que aponte para o primeiro item, The XML Companion.
    DECLARE
    ref1 REFERENCE TO
    	OutputRoot.XML.Invoice.Purchases.Item[1];
    A referência dinâmica agora é equivalente à referência estática OutputRoot.XML.Invoice.Purchases.Item[1].
  3. Utilize uma instrução criar para inserir um novo primeiro item para essa compra.
    CREATE PREVIOUSSIBLING OF ref1 VALUES 'Item'; 
    A referência dinâmica agora é equivalente à referência estática OutputRoot.XML.Invoice.Purchases.Item[2].
Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Modelagem de Mensagens
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL
Referências relacionadas
Nó Compute
Nó Database
Nó Filter
Referência de ESQL
Instrução DECLARE
Instrução IF
Função LASTMOVE
Instrução MOVE
Instrução SET
Instrução WHILE
Mensagem de Exemplo
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak04864_