Compartir a través de


Este artículo proviene de un motor de traducción automática.

BizTalk

Procesamiento por lotes de datos EDI en BizTalk Server 2010

Mark Beckner

 

Con la capa de intercambio de datos (EDI) expandedElectronic­capacidades disponibles en Microsoft BizTalk Server 2010, cada vez más empresas están mirando cómo aprovechar dentro de sus entornos. El procesamiento por lotes de datos EDI es parte de la funcionalidad más valiosa que puede proporcionar la plataforma, pero puede ser confuso y complejas de implementar. Mediante los pasos descritos en este artículo, aprenderá rápidamente y fácilmente extraer datos de una base de datos de origen y aplicar asignación y procesamiento por lotes utilizando varios escenarios. Información acerca de cómo configurar el adaptador de SQL para recuperar los datos mediante XML para está incluido en el debate.

Descripción general de la solución

Trabajar con datos por lotes en BizTalk Server 2010 puede ser bastante complejo, pero gran parte de esta complejidad puede eliminarse si creo que a través de su arquitectura y decidir el mejor lugar para manejar los diversos aspectos del procesamiento por lotes. Para entender los componentes primarios de procesamiento por lotes, vas a trabajar a través de la creación y configuración de cada uno. A empezar con la creación de un procedimiento almacenado que extrae los datos de origen en un formato fácilmente consumible por BizTalk — y en un formato que permite varias opciones de cómo desee procesar por lotes los datos. A continuación, miraremos a la creación de un esquema y opciones para asignar los datos al formato EDI de destino. Finalmente, podrá configurar procesamiento por lotes en un acuerdo de parte de BizTalk por lo que los datos se pueden crear y escritos a un archivo. A fin de trabajar a través de esta solución, necesitará BizTalk Server 2010, Visual Studio 2010 y SQL Server 2008 R2.

Extracción de datos de SQL Server utilizando para XML y XMLNAMESPACES

Existe una opción potente cuando consultas datos de SQL Server para utilizan en BizTalk. Esta opción es para XML, lo que permite que los datos se recuperen en un formato XML específico. XML es la base sobre la cual todos los datos de BizTalk. Cuando se extrae como XML, los datos desde un procedimiento almacenado pueden ser inmediatamente listos para el consumo por orquestaciones y mapas sin la necesidad de generar artefactos complejos que son generalmente necesarios cuando se comunican a través de los distintos adaptadores SQL. El enfoque de FOR XML tiene algunos grandes beneficios:

  • Permite que un desarrollador de SQL Server escribir piezas fundamentales de la arquitectura de integración sin tener que aprender BizTalk.
  • Campos adicionales pueden ser agregados a los resultados y incorporados componentes de BizTalk con relativa facilidad.
  • Es una manera eficaz de procesar los datos y reduce el número de componentes que deben ser desarrollados.
  • Puede dar formato para que coincidan con los esquemas de destino a fin de simplificar la asignación.

Hay una serie de opciones relacionadas con el uso de XML en SQL Server. La forma más apropiada para utilizarlo cuando se trabaja con datos creados para BizTalk es declarar un espacio de nombres específico utilizando XMLNAMESPACES y formato XML específicamente como desee mediante el modo de ruta (en lugar de dejar que SQL Server automáticamente el nombre para que, utilizando el modo automático). XMLNAMESPACES es una simple cláusula que puede añadirse antes de la instrucción SELECT que crea el archivo XML y el modo de ruta asegura que usted puede crear cualquier tipo de jerarquía y combinación de atributos y elementos que necesite para representar los datos en el formato adecuado.

Figura 1 muestra un ejemplo de un procedimiento almacenado con FOR XML PATH y XMLNAMESPACES. En primer lugar, declara el espacio de nombres que el documento XML tendrá y, a continuación, formatos XML. El mejor enfoque para tener al construir la estructura de su XML es mirar lo que será este XML asignado en BizTalk. Si puede hacer coincidir la estructura de su esquema de destino con el esquema de la fuente, la asignación entre los dos será mucho más simple. Por ejemplo, si está creando una estructura de empleado para asignar a un destino de estructura de empleado, marca el origen de la jerarquía del empleado (nombre, fecha de nacimiento, direcciones, teléfonos, etc.) coincide con el destino de la jerarquía del empleado.

Figura 1 procedimiento almacenado con XMLNAMESPACES y para XML

    CREATE PROCEDURE [dbo].[GetData] AS
    BEGIN
     -- define the namespace and prefix
     WITH XMLNAMESPACES('http://sql.claims.extract' as "ns0")
     -- top level is set to NULL
     SELECT NULL
           ,(SELECT ClaimData.ClaimType As [ns0:ClaimType]
                 ,ClaimData.ClaimNo As [ns0:ClaimNo]
                 ,ClaimData.DateFrom As [ns0:DateFrom]
                 ,(SELECT first As [ns0:FName]
                         ,last As [ns0:LName]
                         ,birth As [ns0:BDate]
                  FROM Members
                  WHERE Members.ID = ClaimData.MemberID
                  FOR XML PATH('ns0:Member'), TYPE)
           FROM ClaimData 
         FOR XML PATH('ns0:Claim'), TYPE)
       FOR XML PATH('ns0:ClaimExtract'), TYPE
    END

Además de dar formato a los datos, considere la posibilidad de agregar reglas de negocio en el procedimiento almacenado. La más lógica puede agregar a este nivel, más fácil la solución será para mantener y desarrollar, sin necesidad de compilar el código o ir a través de complejos procedimientos de prueba. Simplemente actualizar el procedimiento almacenado y probar que se están aplicando las reglas de negocio correcto para el conjunto de resultados. En muchos casos las reglas del negocio pueden ser construido en el procedimiento almacenado, en lugar de tratar de lidiar con ellos a través del motor de reglas de negocios (BRE) en BizTalk. Crear una sólida arquitectura de BizTalk comienza por asegurar que se utiliza la tecnología más adecuada en cada etapa.

Configuración de un adaptador SQL para extraer datos

Ahora que tiene un procedimiento almacenado que devuelve el XML, el siguiente paso es configurar BizTalk Server para recuperar los datos. Esto puede hacerse utilizando el adaptador de SQL estándar que se suministra con el producto. Los desarrolladores podrían encontrar trabajo con el adaptador de SQL a ser sumamente engorroso. En mi experiencia normalmente requiere la generación de una serie de esquemas que se utilizan para asignar los resultados a varios artefactos de destino y generalmente no es intuitiva para trabajar con ni fácil de mantener y ampliar. Sin embargo, en algunos casos — como la voy a mirar ahora — es sorprendentemente fácil de usar y proporciona un gran servicio.

In the case of extracting XML data straight from a stored procedure, there are several excellent benefits that using the SQL Adapter provides: It’s easy to configure, requires no additional BizTalk schemas and can be configured to run on a schedule. Aunque lo encontrará útil para la extracción de datos para XML, en general debe utilizar una cuenta de Microsoft.Clase de NET Framework para interactuar con SQL Server.

Para utilizar el adaptador de SQL para llamar al procedimiento almacenado, comenzar con la creación de una nueva ubicación de recepción de BizTalk. La ubicación de recepción debe ser de tipo "SQL", y la tubería puede definirse como la tubería estándar de PassThruReceive. Hay varios campos que merecen discusión:

  • Este de nombre de elemento de documento raíz es un nodo de contenedor para el conjunto de resultados. Ya puede tener un elemento raíz definido en el conjunto del procedimiento almacenado de resultados XML, pero el adaptador ajustará en un nodo adicional. Esto es útil si necesita dividir el conjunto de resultados en documentos individuales mediante un esquema de envolvente, pero no toda solución debe hacer esto.
  • Espacio de nombres de destino Namespace este documento es utilizado por el esquema. Se puede hacer algo similar a lo que ustedes han como el espacio de nombres declarado en el procedimiento almacenado.
  • SQL Command este es el comando EXEC que utiliza para llamar al procedimiento almacenado. En el caso del procedimiento descrito anteriormente, este valor sería EXEC GetData. Puede añadir fácilmente parámetros. Por ejemplo, si desea llamar GetData para un socio de comercio específico y para un número específico de registros, podría introducir EXEC GetData 'TradingPartnerName', '100'.

Una vez que se ha creado la ubicación de recepción y el puerto de recepción asociados, puede crear un puerto de envío simple que suscribe el puerto de recepción y escribe los datos XML en una gota de archivo. Para ello, acaba de establecer la BTS.ReceivePortName en el filtro del puerto de envío para el nombre del puerto de recepción que creó para el adaptador de SQL. Una vez que todo está habilitado y funcionando, debería ver una salida similar a la que se muestra en la figura 2.

La figura 2 muestra resultado del adaptador SQL llamada a procedimiento almacenado

<DataResultSet xmlns="http://SQLExtract.DataResultSet">
  <ns0:ClaimExtract xmlns:ns0="http://sql.claims.extract">
    <ns0:Claim xmlns:ns0="http://sql.claims.extract">
      <ns0:ClaimType>Institutional</ns0:ClaimType>
      <ns0:ClaimNo>ABC100</ns0:ClaimNo>
      <ns0:DateFrom>2012-01-01T00:00:00</ns0:DateFrom>
      <ns0:Member xmlns:ns0="http://sql.claims.extract">
        <ns0:FName>John</ns0:FName>
        <ns0:LName>Doe</ns0:LName>
        <ns0:BDate>1975-01-28T00:00:00</ns0:BDate>
      </ns0:Member>
    </ns0:Claim>
    <ns0:Claim xmlns:ns0="http://sql.claims.extract">
      <ns0:ClaimType>Institutional</ns0:ClaimType>
      <ns0:ClaimNo>XYZ200</ns0:ClaimNo>
      <ns0:DateFrom>2012-01-05T00:00:00</ns0:DateFrom>
      <ns0:Member xmlns:ns0="http://sql.claims.extract">
        <ns0:FName>Jane</ns0:FName>
        <ns0:LName>Doe</ns0:LName>
        <ns0:BDate>1976-10-08T00:00:00</ns0:BDate>
      </ns0:Member>
    </ns0:Claim>
  </ns0:ClaimExtract>
</DataResultSet>

Creación de un esquema de resultados de la consulta

La creación de la Real BizTalk XSD basado en XML obtenido desde el procedimiento almacenado en el adaptador de SQL puede lograrse mediante el uso de un asistente. Para crear el esquema, tomar los pasos siguientes:

  1. Haga su proyecto de Visual Studio de BizTalk que desea agregar el esquema a y seleccione Agregar | Elementos generados.
  2. En la ventana que se abre, haga clic en generar esquemas.
  3. En el cuadro de diálogo generar esquemas, establezca la propiedad de tipo de documento a "XML bien formado". Tenga en cuenta que por defecto, esto no está inicialmente disponible. Un error aparecerá describiendo qué archivo debe ejecutarse a fin de habilitar esta funcionalidad.
  4. Establecer el archivo de entrada a una instancia de XML se muestra en la figura 3 y haga clic en Aceptar.

The Generated XSD
Figura 3 el XSD generado

Estos pasos sumarán dos XSD a su proyecto. Puede decidir cómo desea utilizarlos, y también puede combinarlas en un único XSD si lo prefiere. Se muestra un ejemplo del esquema del nivel superior en figura 3.

Asignación y opciones de hormigón

Ahora tiene su origen de datos listo para ser asignado a su formato EDI. Cree las necesidades que puso en la mejor manera de formato y lote el EDI documentos que van a ser enviados. Algunos socios comerciales pueden requerir varios registros dentro de un único grupo de ST/SE, mientras que otros pueden requerir solo registros de esta agrupación. Puede haber limitaciones impuestas sobre el número total de registros dentro de un documento único o una sola ST/SE, y probablemente habrá requisitos alrededor cuando un lote obtiene creado y entregado. El formato del documento (especificación de reclamación de atención de la salud) 837 proporciona un excelente ejemplo. Socios comerciales, por ejemplo, requieran un máximo de 2.500 reclamaciones estar presentes dentro de cada grupo de ST/SE y un máximo de 20 individuales ST/SEs estar presentes dentro de un único documento. Evaluar los requisitos de las diversas partes con las que se intercambia información, le llevará a determinar la mejor forma de estructurar la ruta de acceso de datos a través de BizTalk.

El actual mapa de BizTalk y asociado de hormigón, existen dos opciones básicas. Uno es asignar los datos al esquema de EDI de destino en un solo grupo de ST/SE; el segundo es asignar varios registros en el origen de un único grupo de ST/SE. Dependiendo de qué ruta que debe tomar, puede que tenga que configurar un esquema de envolvente para dividir los datos de origen y vas a tener algunas diferencias en su asignación y sus configuraciones por lotes.

Un registro por cada ST/SE comienza mirando el escenario donde los datos de origen se dividió y lotes como único registros en grupos individuales de ST/SE. Los datos de origen de muestra se muestra en la figura 3 tiene dos reclamaciones. El objetivo es tomar las reclamaciones individuales (<ns0:Claim>) y dividirlos por lo que pueden asignarse individualmente para el esquema de destino 837. Una vez asignado, los datos pueden ser por lotes llega en BizTalk. A fin de dividir los datos necesitará crear un esquema de sobres:

  • Establezca la propiedad envolvente en el esquema "Sí."
  • Establecer el cuerpo de XPath en el segmento de la raíz del documento para el nodo que contiene los nodos de la reclamación, en este caso, el nodo ClaimExtract.
  • Implementar el esquema de envolvente. El momento en que se recibe un archivo en una ubicación de recepción que tiene la tubería de XMLReceive predeterminado aplicada, de dividir. No es necesario hacer referencia al esquema de envolvente en cualquier lugar.
  • Si configura un puerto de envío para suscribirse al puerto de recepción que está recibiendo el doc para dividir, el puerto de envío será escribir archivos XML de reclamaciones individuales. Entonces puede utilizar estos como fuente de su asignación a su esquema EDI de destino. El puerto de envío debe tener el mapa de la fuente para la transacción de EDI en él.

En este momento hay muchos documentos individuales de EDI apilados en un directorio de archivo. Ahora puede configurar una segunda ubicación de recepción /­combinación de puerto de envío que se realiza el procesamiento por lotes, como sigue:

  • En su ubicación de recepción, establezca la tubería recibe en EdiReceive. Recogerá los documentos EDI individuales que sólo fueron escritos por el primer combo de recibir y enviar.
  • En el puerto de envío, configure los filtros tal como se muestra en figura 4. Tenga en cuenta que el EDI.BatchName y el EDI.DestinationPartyName se establecen en la información contenida en el partido que se configurarán en los próximos pasos. Este puerto de envío, con EDISend especificado como una tubería, se puede establecer para escribir en un archivo de Drop, el resultado será los datos por lotes.

Filters on the Batching Send Port
Figura 4 filtros en el puerto de envío de procesamiento por lotes

  • Crear un nuevo acuerdo que representa el intercambio de datos con el socio comercial que va a recibir los documentos por lotes y parte de BizTalk. Los principales campos para configurar son:
    • En la ficha de identificadores, establezca el remitente y el receptor IDs en valores adecuados. El DestinationPartyName debe coincidir con lo que se establece en el filtro de puerto de envío.
    • En las fichas de configuración de Host Local y sobres, configurar las propiedades de los documentos específicos de EDI que está manipulación.
    • En la ficha Configuración de lotes, establezca las siguientes propiedades:
      • Establecer el nombre del lote igual a lo que establece en el filtro de puerto de envío.
      • Establecer el filtro de lote con dos propiedades:
        • BTS.ReceivePortName == [el nombre de tu recibir puerto donde los documentos EDI individuales vienen en]
        • EDI.ST01! = 997
      • Defina la opción de versión. Esto probablemente se basará en programación (entregar tantos documentos como cola en las últimas 24 horas) o el número total (enviar este lote cuando hay un total de 2.500 elementos en cola). Si lanzar sobre la propiedad de "máximo número de transacción se establece", establece la lista desplegable al grupo.
      • Una vez establecidas las propiedades, haga clic en Inicio para activar el procesamiento por lotes. Puede tardar varios minutos antes de inicia el lote completo. Continuar haga clic en el botón Actualizar hasta que aparezca el mensaje "Lotes está activado". Debe haber una instancia de la orquestación de lote que se ejecutan en BizTalk (esto puede verse a través de las instancias en ejecución del informe BizTalk grupo concentrador). Esta orquestación es parte de la aplicación de EDI de BizTalk que se instala con los componentes EDI en BizTalk: esto no es algo que tienes que escribir.
    • Haga clic en Aceptar para guardar todos los parámetros.

Una vez que todo está configurado, alistó, comenzó y habilitado, reiniciar la instancia del host de BizTalk. Esto asegurará que todo está fresca en la memoria. A continuación, colocar los documentos individuales de ST/SE en la ubicación de recepción y el lote se producirá una vez que el mecanismo de liberación activa (por ejemplo, si ha especificado 2.500 como el número de conjuntos de transacciones, a continuación, debe soltar 2.500 documentos individuales).

Muchos registros por cada ST/SE el siguiente escenario para mirar es asignar varios registros en grupos individuales de ST/SE. Una vez más, los datos de origen de muestra se muestra en la figura 3 tiene dos reclamaciones. La nueva meta es tomar las reclamaciones individuales (la <ns0:Claim> es el nodo raíz para una sola reclamación) y asigne a un esquema de destino único 837. Una vez asignado, los datos o bien pueden entregarse como es, en un solo documento con una sola ST/SE, o puede ser lotes como en el ejemplo anterior en un documento con múltiples ST/SEs, cada uno con varios registros de reclamación.

Iniciar con alterar el procedimiento almacenado que escribió (véase figura 1). Ahora, simplemente trae copia todos los registros en la base de datos. Es necesario agregar un parámetro para limitar el número de registros que volver. Por ejemplo, si desea poder poner 5.000 registros en una sola ST/SE, entonces deberás agarrar sólo 5.000 registros a la vez desde su base de datos de origen. Puede añadir parámetros adicionales, tales como "Trading ID de socio," para restringir aún más lo que viene atrás y realizar el procedimiento almacenado reutilizable a través de varias partes. Una vez agregado, puede modificar la configuración del adaptador de SQL para pasar los parámetros adicionales. Eventualmente deseará configurar el adaptador de SQL para que se ejecute en un ciclo recurrente (cada hora, por ejemplo), extrayendo los 5.000 registros cada vez.

A continuación, modificar su asignación. Cualquier asignación que puso en marcha la fuente para el esquema de EDI destino ahora debe modificarse con un bucle. En el caso de los 837, por ejemplo, querrá establecer un functoid de bucle con el origen de la <ns0:Claim> (desde el esquema en figura 3) y el destino de ser el TS837_2000A_Loop, que constituye el nivel superior de una reclamación de destino.

Que su asignación se ha completado, puede decidir si desea configurar el hormigón dentro del partido de BizTalk o no. Si simplemente desea entregar las 5.000 reclamaciones en un único ST/SE en un solo documento, su trabajo está hecho, sólo configurar un puerto de envío y enviar los datos mediante la canalización de EDISend. Si desea establecer el procesamiento por lotes, la configuración será la misma que a través de lo que has trabajado anteriormente en este artículo.

Opciones de liberación de lote

Tienes un número de opciones disponibles para liberar sus lotes. Como se indicó anteriormente, los dos más comunes son para liberar lotes en un horario específico y cuando se haya alcanzado un número específico de transacciones. El programador permite una variedad de configuraciones horarias, diarias y semanales. Por ejemplo, si necesita entregar cualquier registros han cola cada día a medianoche, independientemente del Conde, configuraría el lote para liberar en una programación diaria a medianoche. La opción para liberar un lote basado en un número específico de transacciones se configura fácilmente, sólo especificar lo que es el número. Opciones de procesamiento por lotes adicionales incluyen liberación de un número especificado de caracteres en un intercambio y un desencadenador de lanzamiento externo.

El desencadenador de lanzamiento externo puede activarse mediante un mensaje de control cayó en el cuadro de mensaje.

Gran simplificación

A medida que construye su proceso de hormigón en BizTalk, debe asegurarse de que está construyendo algo que es tan simple como sea posible. Muchas soluciones de BizTalk son abrumadas por excesivas orquestaciones, esquemas, archivos DLL que se hace referencia y otros artefactos. A menudo los desarrolladores decidirá que necesitan crear una orquestación de hormigón personalizada para manejar lo que ellos sienten que es una situación única. Siempre se centran en la viabilidad a largo plazo de su solución. ¿Puede un desarrollador seis meses a partir de ahora mirar lo que estaba haciendo y comprender cómo trabajar con él? En general, puede crear un proceso para extraer datos de BizTalk y entregar a diversos socios comerciales con orquestación uno o no, un esquema que representa los datos de origen, un esquema que representa los datos de destino y un mapa por partido. Si usted encuentra crear componentes más que esto, dar un paso atrás y reanalizar su solución. Probablemente descubrirá que se puede hacer algún gran simplificación.

Mark Beckner es el fundador de Inotek Consulting Group LLC (inotekgroup.com). Trabaja a través de la pila de Microsoft, BizTalk, SharePoint, Dynamics CRM y general.Desarrollo de NET Framework.

Gracias al siguiente experto técnico por su ayuda en la revisión de este artículo: Karthik Bharathy