Copiar campos de resolicitud

Puede configurar un nodo con ESQL para copiar campos de resolicitud de varios modos.

Acerca de esta tarea

Imagine un mensaje XML de entrada que contiene una estructura de resolicitud:

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

No puede copiar este campo de estructura completo con la sentencia siguiente:

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

Esta sentencia sólo copia la primera resolicitud y, por consiguiente, produce el mismo resultado que esta sentencia:

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

Puede copiar los campos en un bucle, controlando las iteraciones con la cardinalidad (CARDINALITY) del campo de entrada:

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

Es posible que esto sea apropiado si desea modificar cada campo del mensaje de salida mientras lo copia del campo de entrada (por ejemplo, añadirle un número o convertir el contenido a mayúsculas) o después de haberlo copiado. Si el mensaje de salida ya contiene más campos Field1 de los que existían en el mensaje de entrada, el bucle no modificará los campos sobrantes y éstos permanecerán en el mensaje de salida.

La siguiente sentencia individual copia las iteraciones de los campos de entrada en los campos de salida y suprime los campos sobrantes del mensaje de salida.

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

El ejemplo siguiente le muestra cómo puede redenominar los elementos cuando los copia en el árbol de salida. Esta sentencia no copia en el nombre del elemento de origen, por lo tanto, cadafield1se convierte en unTarget.

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

El ejemplo siguiente muestra un procedimiento diferente para realizar la misma operación; produce el mismo resultado final.

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

El ejemplo siguiente copia el nombre de elemento de origen. Cadafield1se retiene como un elementofield1bajo el elementoTarget.

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

Este ejemplo es una forma alternativa de lograr el mismo resultado, confield1elementos creados bajo elTarget.

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

Estos ejemplos muestran que hay varios procedimientos que se pueden utilizar para codificar ESQL a fin de copiar campos de resolicitud del origen en el destino. Seleccione el método más apropiado para obtener los resultados que necesita.

Los principales que se muestran aquí se aplican igualmente a todas las áreas del árbol de mensajes en las que puede grabar datos, no sólo al árbol de mensajes de salida.