xsd mapping biztalk biztalk-2010

Biztalk 2010: mapeo de una xsd con muchos elementos con el mismo nombre



mapping biztalk-2010 (2)

Una forma más sencilla de obtener el xlst generado (y generalmente la forma recomendada que ha funcionado desde al menos bts2006) es hacer clic derecho en el archivo btm en el explorador de soluciones y elegir "validar mapa". El resultado de esto le proporciona los objetos xslt y de extensión en archivos independientes (ciertos functoids y referencias de clase externas usan un archivo de objetos de extensión).

Desde aquí puede guardar y modificar el resultado de xslt - no necesita analizar el archivo .btm.cs o preocuparse por los problemas de codificación de cadenas como la pérdida de una comilla doble escapada alrededor de un atributo o un espacio de nombres ...

En Bitzalk 2010 debería mapear desde una entrada a un XML con la siguiente estructura:

<REQUEST> <PROGRAM name="PROGRAM123"> <INPUT> <INSTRUCT name="INSTR1"> <FIELD name="FIELD11">VALUE1</FIELD> <FIELD name="FIELD12">VALUE2</FIELD> <FIELD name="FIELD13">VALUE3</FIELD> </INSTRUCT> <INSTRUCT name="INSTR2"> <FIELD name="FIELD21">VALUE4</FIELD> <FIELD name="FIELD22">VALUE5</FIELD> <FIELD name="FIELD23">VALUE6</FIELD> <FIELD name="FIELD24">VALUE7</FIELD> </INSTRUCT> <INSTRUCT name="INSTR2"> <FIELD name="FIELD21">VALUE8</FIELD> <FIELD name="FIELD22">VALUE9</FIELD> <FIELD name="FIELD23">VALUE10</FIELD> <FIELD name="FIELD24">VALUE11</FIELD> </INSTRUCT> </INPUT> </PROGRAM> </REQUEST>

El XSD generado fue así:

<?xml version="1.0" encoding="utf-8"?> <xs:schema id="REQUEST" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="REQUEST" msdata:IsDataSet="true" msdata:Locale="en-US"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="PROGRAM"> <xs:complexType> <xs:sequence> <xs:element name="INPUT" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="INSTRUCT" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="FIELD" nillable="true" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent msdata:ColumnName="FIELD_Text" msdata:Ordinal="1"> <xs:extension base="xs:string"> <xs:attribute name="name" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="name" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="name" type="xs:string" /> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>

La estructura generada era solo "general" y tendría que usar el functoid de bucle de tabla para mapearlo en Biztalk. Obtuve la información de esta solución: http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html Pero esto me parece muy engorroso (tengo 40 campos con algunos valores constantes).

Otra posibilidad sería usar XSLT. Pero no tengo ninguna experiencia con él y preferiría asignarlo directamente en Biztalk (sin XSLT)

¿Existe la posibilidad de crear un esquema XSD, así que tendría todos los campos en el editor de mapas y crearía la asignación allí (sin usar el functoid de bucle de tabla).

Cualquier idea / comentario sería apreciado (incluso si la respuesta es: "use XSLT")


FWIW generalmente terminamos usando XSLT para mapas no triviales de todos modos.

Y BizTalk crea el XSLT para usted de todos modos :)

Entonces recomendaría:

  • Haz lo mejor que puedas con el asignador de BizTalk (parece que SOLICITUD, PROGRAMA, ENTRADA e INSTRUCCIÓN son asignables)
  • Compila tu proyecto
  • Haga clic en su archivo .btm en el Explorador de soluciones en Visual Studio y luego seleccione "Mostrar todos los archivos" en la parte superior. Ahora debería ver un archivo oculto SameFileName.btm.cs . En este archivo está el XSLT que genera BizTalk. Copie este XSLT y péguelo en un nuevo archivo; guárdelo como .xslt. Deberá reemplazar las comillas dobles con comillas simples.
  • Abra el .btm original (mapa) nuevamente. Haga clic en el área gris del mapa entre los esquemas (Propiedades de la cuadrícula). En la propiedad ''Ruta de XSLT personalizada'', seleccione su archivo .XSLT recién creado.

El asignador de BizTalk le ha dado una ventaja en su XSLT, y debería poder elegir el XSLT básico con bastante facilidad. Una gotcha: asegúrese de recordar el prefijo de alias del espacio de nombres (generalmente s1)

Editar: Tenga en cuenta que lo anterior es para BizTalk 2009

Editar

Como una precaución de cordura, en el mapa visual del btm, sugiero que elimine manualmente todas las líneas de mapeo y functoides del área de mapeo gris, en caso de que olvide que ahora está utilizando xslt personalizado. Si prueba un mapa con xslt personalizado, el asignador emite un recordatorio de que se utiliza el archivo xslt y se ignora el mapa visual.