Transportando datos de archivos de texto plano a tablas de SQL Server con BizTalk Server 2006 paso a paso. Parte 2 de 2.

Resumen

En la primer parte vimos cómo crear los esquemas necesarios para leer los archivos de texto plano de nuestra tienda.  Vimos también cómo configurar un pipeline de recepción que incluya los esquemas creados para poder desensamblar los archivo correctamente.  En este artículo continuaremos con el escenario y juntaremos todas las piezas del rompecabezas.

Creación de la Orquestación

El siguiente paso es crear la orquestación dentro de nuestro proyecto.  Para realizar esto hagamos clic derecho sobre nuestro proyecto y seleccionemos Add New Item.  A la orquestación le asignaremos el nombre Tienda_Orchestration.odx tal y como lo muestra la siguiente figura:

Ahora necesitamos un puerto de recepción por medio del cuál podamos obtener los archivos de texto plano.  Agreguemos el puerto a la orquestación haciendo clic derecho sobre el area denominada Port Surface y seleccionemos la opción Configured Port.  El nombre del puerto será Tienda_Recepcion:

En la siguiente ventana seleccionemos la opción de crear un nuevo tipo de puerto definiendo el nombre Tienda_Recepcion_Tipo y su tipo de comunicación como One-Way:

En la siguiente ventana seleccionemos la dirección de comunicación de tipo recepción y el port binding a Specify later.  Una vez hecho esto hagamos clic en siguiente y luego finalizar.

El paso anterior creará el puerto de recepción en la orquestación.  A la operación llamada Request del puerto debemos definir cuál será el tipo de mensaje que recibirá.  Seleccionemos Tienda_Album en la propiedad Message Type usando la ventana de propiedades

Agreguemos una actividad de tipo Receive a la orquestación y asignemos su propiedad Activate igual a True.  Su tipo de mensaje será Tienda_Input_Album (consultar la sección "Anexos" en este artículo para más información acerca de los mensajes y variables que deben ser creados) y su operación relacionada será Tienda_Recepcion.Operation_1.Request

Agreguemos una actividad de tipo Construct Message justo debajo de la actividad Receive recién incorporada.  En su propiedad Messages Constructed seleccionemos Tienda_Input_Artista ya que es el tipo de mensaje que deseamos construir.  Además le agregaremos una sub-actividad de tipo Message Assignment para poder construir el mensaje. 

Usando la ventana de propiedades modifiquemos Expression para que tenga el siguiente código:

headerDocString = Tienda_Input_Album(XMLNORM.FlatFileHeaderDocument);
headerDocXml = new System.Xml.XmlDocument();
headerDocXml.LoadXml(headerDocString);
Tienda_Input_Artista = headerDocXml;

El anterior código obtiene el artista del archivo recibido (gracias a que ese esquema está definido como header en el pipeline de recepción) y lo guarda en una variable de tipo XmlDocument.  Posteriomente, esta variable es usada para inicializar el mensaje de tipo Tienda_Input_Artista.

Bien, ahora necesitamos agregar un puerto de tipo Send usando la ventana de BizTalk Explorer con las siguientes consideraciones:

  • El tipo de puerto será Static-One-Way
  • Nombre: Tienda_Router_Sql
  • El tipo de transporte será SQL
  • La cadena de conexión deberá configurarse para conectarse a la base de datos Tienda usando el usuario biztalkuser definido en la parte 1 de este artículo.
  • Document Target Namespace: http://tienda.router/sqloutput
  • Response Document Root Element: alb
  • Send Pipeline: PassThruTransmit

Una vez agregado el puerto de tipo Send, hagamos clic derecho sobre la carpeta SPSchema y seleccionemos Add-Add Generated Items… e indiquemos la plantilla Add Adapter Metadata en la caja de diálogo.

Seleccionemos el puerto Tienda_Router_Sql en la siguiente ventana y hagamos clic en el botón Next.

En el siguiente paso del asistente llamado Database Information hagamos clic en el botón Next.  En el siguiente paso definamos los siguientes valores y despúes hagamos clic en el botón Next.

  • Target namespace:  http://tienda.router/sqloutput (el mismo que cuando creamos el puerto de tipo Send)
  • Port type: Send port
  • Request document root element name: alb_request
  • Response document root element name: alb_response

En el siguiente paso seleccionemos la opción Stored Procedure y hagamos clic en el botón Next.  En el siguiente paso seleccionemos InsertaArtista y en seguida hagamos clic en Finish.  Repitamos estos mismos pasos para el procedimiento almacenado InsertaAlbum.

Creación de los mapas de transformación

Hagamos clic derecho en la carpeta Map y seleccionemos la opción Add->New Item… y seleccionemos la plantilla Map de la caja de diálogo.  El nombre del mapa será Tienda_Artista.btm.

Seleccionemos el data source del esquema origen a Tienda_Artista:

Seleccionemos el data source del esquema destino a SqlService_sqloutput.  A continuación, seleccionemos alb_request como root node.  Realicemos el mapeo necesario tal y como lo muestra la siguiente figura:

Agreguemos una nueva actividad de tipo Construct Message a la orquestación y dentro de ella una actividad de tipo Transform.  Hagamos doble clic sobre Transform_1 y configuremos de la siguiente manera la transformación:

  • Existing Map
  • Fully Qualified Map Name: Tienda.Map.Tienda_Artista
  • Source: Tienda_Input_Artista
  • Destination: Tienda_Output_Artista

Agreguemos una actividad de tipo Send a la orquestación y le asignamos su propiedad Message a Tienda_Output_Artista.

Agregar un nuevo puerto de envío a la orquestación haciendo clic derecho sobre el Port Surface del diseñador con los siguientes parámetros:

  • Name: [Empresa]_Envio_Header
  • Tipo: [Empresa]_Envio_Header_Tipo
  • Comunicación: One-Way
  • Dirección: Send
  • Binding: Especificar después

Configurar su operación llamada Request con la propiedad Message Type como Tienda.SQLService_sqloutput.alb_request.  Una vez hecho esto, conectamos el shape Send_1 al nuevo puerto tal y como lo muestra la siguiente figura:

Repitamos los pasos anteriores para el mensaje Tienda_Output_Album.

Podemos usar una actividad de tipo Parallel para que el envío del artista junto con sus albumes relacionados sea al mismo tiempo en vez de secuencial.

Deployment

Como último paso debemos hacer Deploy de nuestro proyecto haciendo clic en la opción Deploy del menú Build de Visual Studio .NET.

Una vez hecho el deployment debemos configurar los puertos de recepción y envío usando la herramienta BizTalk Server 2006 Administration Console haciendo clic derecho sobre la orquestación en la lista de aplicaciones.

  • El pipeline del puerto de recepción debe ser de tipo Tienda_ReceivePipeline
  • El puerto de recepción debe tener relacionado un folder que tenga el suficiente nivel de permisos de acceso para poder leer los archivos (en este demo se agregó Everyone Full Control a un folder llamado C:\Archivos)
  • El filtro para el puerto de recepción debe ser *.txt
  • Configurar adecuadamente el polling interval. En esta demo se configuró a 15 segundos (15000 ms)
  • El puerto de envío debe ser de tipo SQL y su pipeline de tipo PassThruTransmit
  • El puerto de envío debe tener configurada la cadena de conexión correcta para poder ejecutar los stored procedures relacionados

Lo último que resta es iniciar la orquestación haciendo clic sobre ella y seleccionar la opción Start del menú contextual.  Para probar, copiemos un archivo de texto a la carpeta en donde se configuró el puerto de recepción y listo!  Nuestras tablas son actualizadas correctamente en SQL Server.

Anexos
Mensajes

Nombre del mensaje
Tipo

Observaciones

Tienda_Input_Artista
Tienda.FFSchema.Tienda_Artista

Creado por medio del Flat File Schema Wizard

Tienda_Input_Album
Tienda.FFSchema.Tienda_Album

Creado por medio del Flat File Schema Wizard

Tienda_Output_Artista
Tienda.SQLService_sqloutput.alb_request

Creado por medio de la opción Add Adapter Metadata (cambiar el nombre apropiadamente por medio de la ventana de propiedades si es que ya existe un archivo con el mismo nombre)

Tienda_Output_Album
Tienda.SQLService_sqloutput_1.alb_request

Creado por medio de la opción Add Adapter Metadata (cambiar el nombre apropiadamente por medio de la ventana de propiedades si es que ya existe un archivo con el mismo nombre)

Variables

Nombre de la variable
Tipo

headerDocString
String

headerDocXml
System.Xml.XmlDocument

Conclusión

BizTalk Server 2006 es una poderosa herramienta para la integración entre aplicaciones incluso de diferentes plataformas.  En este artículo dividido en dos partes vimos cómo enviar los datos de archivos de texto planos a tablas de SQL Server por medio de una orquestación de BizTalk Server 2006.