Copiando Campos de Repetição

Você pode configurar um nó com ESQL para copiar campos de repetição de diversas maneiras.

Considere uma mensagem XML de entrada que contém uma estrutura de repetição:

...
	<Field_top>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
	</Field_top>
.....

Você não pode copiar o campo de estrutura inteiro com as seguintes instrução:

SET OutputRoot.XML.Output_top.Outfield1 =
InputRoot.XML.Field_top.field1;

Essa instrução copia apenas a primeira repetição e, portanto, produz o mesmo resultado dessa instrução:

SET
OutputRoot.XML.Output_top.Outfield1[1] =
InputRoot.XML.Field_top.field1[1];

Você pode copiar os campos dentro do loop, controlando as iterações com o CARDINALITY do campo de entrada:

SET I = 1;
SET J = CARDINALITY(InputRoot.XML.Field_top.field1[]);
WHILE I <= J DO
	SET OutputRoot.XML.Output_top.Outfield1[I] =
InputRoot.XML.Field_top.field1[I];
        SET I = I + 1;END WHILE;

Isso pode ser apropriado se você deseja modificar cada campo na mensagem de saída conforme o copia do campo de entrada (por exemplo, incluir um número ou colocar seu conteúdo em maiúsculas) ou depois que tiver sido copiado. Se a mensagem de saída já continha mais campos Field1 que os existentes na mensagem de entrada, os campos excedentes não seriam modificados pelo loop e permaneceriam na mensagem de saída.

A seguinte instrução única copia as iterações dos campos de entrada para os campos de saída e exclui todos os campos excedentes na mensagem de saída.

SET
OutputRoot.XML.Output_top.Outfield1.[] =
InputRoot.XML.Field_top.field1[];

O exemplo abaixo mostra como você pode renomear os elementos ao copiá-los para a árvore de saída. Essa instrução não copia o nome do elemento de origem, portanto, cada elemento field1 se torna um elemento Target.

SET OutputRoot.XML.Output_top.Outfield1.Target[] =
    (SELECT I FROM InputRoot.XML.Field_top.field1[] AS I );

O próximo exemplo mostra uma maneira diferente de se fazer a mesma operação; ele produz o mesmo resultado final.

SET OutputRoot.XML.Output_top.Outfield2.Target[]
              = InputRoot.XML.Field_top.field1[];  

O seguinte exemplo copia pelo nome do elemento de origem. Cada elemento field1 é retido como um elemento field1 no elemento Target.

SET OutputRoot.XML.Output_top.Outfield3.Target.[]
              = InputRoot.XML.Field_top.field1[];  

Esse exemplo é uma maneira alternativa de atingir o mesmo resultado, com os elementos field1 criados sob o elemento Target.

SET OutputRoot.XML.Output_top.Outfield4.Target.*[]
              = InputRoot.XML.Field_top.field1[];  

Esses exemplos mostram que existem várias maneiras pelas quais você pode codificar o ESQL para copiar campos de repetição da origem para o destino. Selecione o método mais apropriado para alcançar os resultados necessários.

Os principais mostrados aqui se aplicam igualmente a todas as áreas da árvore de mensagens na qual você pode gravar os dados, não apenas a árvore de mensagens de saída.

Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Gerenciando Arquivos ESQL
Referências relacionadas
Nó Compute
Nó Database
Nó Filter
Referência de ESQL
Instrução SET
Instrução WHILE
Função CARDINALITY
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac20420_