Compartir a través de


Operaciones de asignaciones básicas y complejas

El Asignador de BizTalk proporciona soluciones para una serie de escenarios de asignaciones que van desde simples operaciones de tipo árbol primario-secundario hasta operaciones complejas y detalladas en las que hay registros de bucles y jerarquías. La complejidad de un escenario de asignación depende de sus preferencias y necesidades empresariales: el lenguaje de definición de esquema XML (XSD) proporciona una flexibilidad considerable en la definición de formatos estructurados. Casi todos los escenarios de asignación se dividen en una de estas dos categorías: asignación básica y asignación compleja.

Asignación básica

La asignación básica es el tipo más común de asignación que se puede crear. En una asignación básica, los elementos de entrada y salida tienen una relación de uno a uno. Un elemento de entrada se asigna a un único elemento de salida. Aunque muchos tipos de transformaciones y traducciones son posibles con una asignación básica, como el uso de varios functoids y functoids en cascada para manipular el valor que se va a copiar, el escenario subyacente sigue siendo relativamente sencillo. Las operaciones de asignación básica también incluyen la asignación de campos de dos registros primarios diferentes (que solo ocurren una vez) a campos bajo un solo registro primario en el esquema de destino.

Asignación compleja

La asignación compleja implica registros o campos que se producen varias veces para una sola instancia del nodo Record o Field Element del árbol de esquema. Estos nodos tienen su propiedad Max Occurs establecida en un valor mayor que uno (1), lo que indica que puede haber más de un elemento correspondiente en un mensaje de instancia. Cuando un mapa de BizTalk usa este tipo de asignación de recuento de variables (también conocida como bucle), el compilador de hojas de estilos extensible stylesheet Language (XSL) debe ser capaz de determinar la ruta de acceso de bucle adecuada sobre la que se itera para generar la salida necesaria.

En general, puede vincular un campo de un registro de bucle del esquema de origen con un campo de un registro de bucle del esquema de destino. El número de elementos correspondientes en un mensaje de instancia de entrada determina el número de elementos que se han creado en el mensaje de instancia de salida. Fíjese en los siguientes fragmentos XSD de esquemas de ejemplo de origen y destino.

Fragmento de esquema de origen

<xs:element minOccurs="1" maxOccurs="5"  
            name="SrcLoopingRecord">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element name="" type="xs:string" />   
      <xs:element name="" type="xs:integer" />   
    </xs:sequence>  
  </xs:complexType>  
</xs:element>  
  

Fragmento de esquema de destino

<xs:element minOccurs="0" maxOccurs="unbounded"  
            name="DstLoopingRecord">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element name="" type="xs:string" />   
      <xs:element name="" type="xs:integer" />   
      </xs:sequence>  
    </xs:complexType>  
  </xs:element>  
  

En estos fragmentos:

  • SrcLoopingRecord, un nodo Record en los mensajes de instancia de entrada, puede producirse de uno a cinco veces. También contiene los nodos elemento de campo secundarios Field1 (una cadena) y Field2 (un entero) que se producen una vez para cada instancia de su elemento primario.

  • DstLoopingRecord, un nodo Record en los mensajes de instancia de salida, puede producirse cero (0) o más veces, sin enlazar. También contiene los nodos field ElementSecundarios FieldA (una cadena) y FieldB (un entero) que se producen una vez para cada instancia de su elemento primario.

    Suponiendo que Field1 está enlazado con FieldA y Field2 está enlazado con FieldB, y que el siguiente fragmento de un mensaje de instancia de entrada ha procesado esas asignaciones, se creará el siguiente fragmento de un mensaje de instancia de salida.

Fragmento de mensaje de instancia de entrada

<SrcLoopingRecord>  
    <Field1>A string</Field1>  
    <Field2>10</Field2>  
</SrcLoopingRecord>  
<SrcLoopingRecord>  
    <Field1>Another string</Field1>  
    <Field2>11</Field2>  
</SrcLoopingRecord>  
<SrcLoopingRecord>  
    <Field1>A ball of string</Field1>  
    <Field2>12</Field2>  
</SrcLoopingRecord>  

Fragmento de mensaje de instancia de salida

<DstLoopingRecord>  
    <FieldA>A string</FieldA>  
    <FieldB>10</FieldB>  
</DstLoopingRecord>  
<DstLoopingRecord>  
  <FieldA>Another string</FieldA>  
  <FieldB>11</FieldB>  
</DstLoopingRecord>  
<DstLoopingRecord>  
    <FieldA>A ball of string</FieldA>  
    <FieldB>12</FieldB>  
</DstLoopingRecord>  

El número de repeticiones del elemento SrcLoopingRecord en el mensaje de instancia de entrada (3) determina el número de repeticiones del elemento DstLoopingRecord en el mensaje de instancia de salida.

Disponer de varias rutas de bucle es un tipo de asignación que no admite el Asignador de BizTalk. Este tipo de asignación trabaja con campos de dos o más registros de bucle en el esquema de origen que está asignando a los campos dentro de un registro de bucle simple en el esquema de destino. Esto presenta un problema: no hay ninguna manera eficaz de determinar el número de elementos que se van a generar en el mensaje de instancia de salida. Varias rutas de bucle dan como resultado una advertencia de compilación de asignación que indica que el nodo de destino tiene varias rutas de bucle de origen. Sin embargo, esto no es más que una advertencia, y el número de iteraciones en la primera ruta del bucle de origen se utiliza para determinar el número de elementos que se producen en el mensaje de instancia de salida. Puede tomar el control explícito del comportamiento de bucle mediante el functoid Bucle .

Microsoft BizTalk Server introdujo un nuevo tipo de bucle denominado bucle controlado por tablas. El bucle controlado por tablas es útil cuando el mensaje de instancia de salida necesita basarse en datos del mensaje de instancia de entrada en combinación con una o más constantes, vínculos del esquema de origen o functoids. En tales casos, el mensaje de instancia de salida puede tener varios registros basándose en los datos de un registro simple en el mensaje de instancia de entrada que se combina con distintas constantes o basándose en datos procedentes de varios registros en el mensaje de instancia de entrada. Para obtener más información sobre el bucle controlado por tablas mediante los functoids Bucle de tabla y Extractor de tablas, vea Bucles de tabla y Functoids extractores de tablas.

Consulte también

Mapas
Crear asignaciones con el Asignador de BizTalk