Siguiendo con las capacidades de integración de Biztalk Server 2006 (BTS 2006) que estamos probando en el CIIN en este post vamos a modelar un ciclo de gestión de pedidos de una organización. En concreto, en el escenario a modelar tenemos una aplicación de solicitud de pedidos que almacena los datos de los mismos en una BD SQL Server. Estos datos de solicitud se envían a un servicio web que se encarga de validar que el pedido puede ser servido comprobando si hay stock suficiente para ello. Una vez que el pedido es validado, el servicio web generará una factura que tiene que ser enviada en un cierto formato a él aplicativo de facturación. Esta situación tan típica del “mundo real” es la que vamos a modelar e implementar de manera sencilla con BTS 2006 y las capacidades de integración comentadas.
Nuestro escenario de trabajo será el siguiente:
· Recogemos los datos del pedido de una base de datos SQL Server.
· Estos datos validamos y operamos con ellos mediante la invocación de un Servicio Web.
· El servicio web nos devuelve unos datos de facturación que insertaremos en otra base de datos SQL Server.
Como hemos comentado, para realizar todos estos procesos utilizamos BTS 2006 y sus capacidades de integración. Así, nuestra primera tarea es poder extraer los datos de SQL Server utilizando puertos de BTS 2006. Este proceso de integración con SQL Server lo explicó detalladamente mi compañero Juan Carlos en un post anterior (en este articulo solo detallaremos las diferencias de configuración pues la filosofía de trabajo es la misma). En nuestro caso la tabla de SQL de la que vamos a extraer los datos del pedido tiene la siguiente estructura:
Para extraer los datos, utilizamos un procedimiento almacenado que es ejecutado desde un puerto de recepción de BTS 2006 (ya explicamos en el post citado las configuraciones necesarias para extraer y volcar datos desde / hacia una BD SQL Server).
Los datos que recogemos de la BD SQL Server tienen que ser enviados a un servicio web para validar que el pedido se puede servir. Por lo tanto, tenemos que modelar este proceso de negocio con las capacidades que nos da BTS 2006: recogida de los datos de SQL Server, envío de estos datos al servicio web de validación y en un cierto formato, y finalmente volcar los datos que nos devuelve el servicio web en una base de datos SQL Server para su explotación en la aplicación de facturación. Como hemos dicho, este proceso de negocio lo modelaremos en BTS 2006 a través de Visual Studio 2005 y los artefactos necesarios: esquemas XSD, mapas de BizTalk en el que definir las transformaciones y el más importante, la orquestación que coordine la recogida de los datos del pedido de la base de datos, invoque al servicio web para que los valide, recoja de este la factura emitida y la entregue a la aplicación de facturación.
Por lo tanto nuestro siguiente paso será construir un proyecto de BizTalk utilizando Visual Studio 2005 e ir añadiendo los elementos mencionados.
Esquemas XSD
Una vez que tengamos creado el proyecto en el entorno de VS 2005, tenemos que insertar o crear los esquemas XSD que necesitamos para realizar los mapeos de datos necesarios en el proceso de negocio, y definir los mensajes que utiliza la orquestación:
· Esquema correspondiente a los datos de solicitud del pedido, en este punto se nos plantea un problema, y es que necesitamos el esquema XSD correspondiente al archivo XML que nos generara BTS 2006 al extraer los datos del SQL Server, pero no disponemos directamente de ese esquema, aunque si podríamos obtener los mensajes XML que genera BTS 2006 en el proceso de extracción. Ante este problema una de las soluciones por las que podamos optar, es a hacer la aplicación escalable y obtener en primer caso el documento XML que genera BTS 2006, y una vez obtenido el documento XML utilizar una herramienta de Visual Studio 2005, que nos permite crear documentos XSD a partir de documentos XML bien formados.
Por lo tanto al puerto de recepción, que hemos configurado anteriormente, le añadimos un puerto de envío subscrito a él, de manera que todo mensaje que se entregue en el puerto de recepción sea recogido por el puerto de envío. Lo configuramos que se muestra en las siguientes figuras:
o Configuración del puerto de envío, que a través del adaptador FILE volcará el archivo XML extraído en una carpeta.
o Configuración de la suscripción del puerto de envío al puerto de recepción a través del correspondiente filtro.
De esta forma al iniciar la aplicación se nos creara un documento XML, con los datos insertados en la base de datos del SQL Server. Una vez creado este archivo en Visual Studio 2005 seleccionamos nuestro proyecto y escogemos la opción de añadir elemento- añadir elementos generados. Escogemos el grupo de esquemas y damos a añadir, se nos abrirá una ventana como esta.
En la opción de input file escogemos el archivo XML generado por BTS 2006 al extraer os datos del SQL Server y damos a OK, con lo que se generará el esquema XSD que cumplen los documentos XML que se extraigan de la BD SQL Server.
· Esquema XSD de los datos que espera el servicio web, este esquema lo obtenemos directamente del servicio web, añadiendo la referencia web a nuestro proyecto de BTS 2006 igual que haríamos en otro proyecto de Visual Studio 2005.
· Esquema XSD de los datos que devuelve el servicio web, ocurre lo mismo que en el caso anterior, al añadir la referencia web al proyecto de BTS 2006 tendremos acceso al esquema de vuelta con el que responde el servicio web después de realizar el procesado de los datos.
· Esquema XSD de los datos que se van a volcar en la BD de facturación, aquí seguimos el mismo procedimiento que en el post de Juan Carlos, pero en nuestro caso utilizando un esquema con la siguiente estructura. Este esquema lo creamos de manera manual utilizando el editor que nos proporciona BTS 2006 (parte izquierda de la figura).
Mapas de BTS 2006
Nuestro siguiente paso será crear los mapas de BTS 2006 necesarios, cuya definición y propiedades podéis encontrar un post anterior mío. Necesitamos dos:
· El primer mapa permite pasar del mensaje XML con los datos del pedido al mensaje XML con los datos que espera el servicio web para comenzar a operar.
· El segundo permite pasar del mensaje XML con los datos de facturación devuelto por el servicio web al mensaje XML que nos permitirá insertar los datos en la BD de facturación.
Cada mapa de BTS 2006 usa al menos 2 esquemas XSD, uno como origen y otro como destino. El primer mapa utiliza como origen el XSD correspondiente al documento XML con los datos que se extraen de la BD de pedidos, y como origen uno de los esquemas XSD que expone el servicio web para poder interactuar con él. En el segundo mapa, como origen utilizamos el esquema XSD de salida que expone el servicio web, y como destino el esquema XSD que cumplen los documentos XML con los datos de facturación. Para poder seleccionar los esquemas XSD que necesitamos en el mapa, utilizamos la herramienta BizTalk Type Picker que nos permite escoger los esquemas que tenemos en nuestra solución y los expuestos por cualquier referencia web que hayamos añadido.
Una vez que tenemos claro cuáles son los esquemas origen y destino para cada mapa, vamos a ver cómo serían dichos mapas:
· Mapa1: Datos de Pedido – Entrada Servicio Web:
· Mapa2: Salida Servicio Web – Datos de Facturación:
Orquestación
Nuestro siguiente paso es construir la orquestación que modela el proceso de de negocio. La orquestación tiene que ser capaz de recoger un mensaje XML con los datos procedentes del SQL Server, transformar esos datos para que el Servicio Web (WS) los entienda, comunicarse con el WS, recoger el mensaje procedente del WS con los datos validados, transformar esos datos para que se puedan insertar de nuevo en una tabla del SQL Server y finalmente mandar ese mensaje a un puerto físico para realizar la inserción en la tabla del SQL Server.
Para ello, tendremos que crear los mensajes con los que va a operar la orquestación para hacer efectivo el proceso de negocio. En este ejemplo necesitamos cuatro mensajes, uno de origen, otro de destino y después dos para comunicarse con el Servicio Web, el mensaje que se le manda al WS y el que recibe BTS 2006 del WS.
Estos mensajes con los que internamente trabaja la orquestación se van a corresponder con los documentos XML mencionados anteriormente a través de la configuración adecuada de sus propiedades. Para configurar cada mensaje simplemente especificamos en la propiedad Message Type el esquema XSD o mensaje web (para el caso de utilizar referencias web) con el que se relaciona de manera unívoca:
Cuando tengamos configurado los mensajes, utilizando el Diseñador de Orquestaciones empezaríamos a diseñar la orquestación, que tendría el siguiente aspecto.
Como vemos, la orquestación se compone de los siguientes elementos:
· Port_Origen, puerto lógico de entrada por el que llegan los datos del pedido.
· Recv_SQL, figura de tipo Receive que se enlaza con el puerto lógico de entrada y que es la que pasa los datos a la orquestación.
· Transform_a_WS, figura de transformación que permite pasar de los datos originales del pedido a los datos que espera el servicio web. Esta figura es la que se encarga de hacer efectiva la transformación definida en el Mapa1.
· Send_WS, figura de envío que se encarga de enviar los datos que espera el servicio web.
· WS_Port, que es un puerto lógico bidireccional capaz de recibir y enviar datos. Este puerto recoge los datos destinados al servicio web, y envía los datos que este devuelve.
· Transform_a_SQL, que es otra figura de transformación que se encarga de pasar de los datos enviados por el servicio web a los datos que espera la aplicación de facturación. Para ello, utiliza el Mapa2.
· Snd_Destino, que es un puerto lógico de envío que se encarga de enviar los datos a la base de datos de facturación.
Nota: Aunque se hable de datos, en todo momento tenemos que tener presente que seestá trabajando con documentos XML entre los distintos elementos de la orquestación.
Configuración de los puertos lógicos y deploy de la solución
Finalmente solo nos falta de configurar los puertos lógicos de la orquestación, el puerto de recepción y el puerto de envió finales son muy sencillos de configurar y prácticamente solo es seguir el wizard que se nos abre cuando pinchamos en la admiración del send shape y receive shape. Sin embargo el puerto bidireccional que utilizamos para comunicarnos con el servicio web es algo más complicado de configurar, por lo que merece la pena que nos paremos a ver como es esta configuración.
Nos colocamos en una de zonas de puertos (Port Surface) y damos botón derecho, seleccionamos New Configured Port. Damos a siguiente y le ponemos un nombre, en nuestro caso le hemos llamado WS_port. El siguiente paso le configuramos como se muestra en la siguiente imagen.
Como podéis ver en la imagen anterior seleccionamos la opción Use an existing Port Type y escogemos Web Port Types. En ese punto no vendrá el tipo de puerto que está unido a nuestra referencia web.
Con esto ya tendremos configurada completamente nuestra orquestación, por lo tanto solo tenemos que construir y desplegar nuestro proyecto. Una vez hecho esto solo tendremos que realizar los ajustes en la consola de administración para tener nuestra aplicación configurada.
Juntándolo todo
Para realizar la inserción de los datos en la base de datos de facturación seguimos en el mismo procedimiento que explicamos en un post anterior. Además de configurar el volcado de datos, también debemos de configurar el puerto de envío físico para comunicarse con el Servicio Web. Este puerto será diferente a los que hemos utilizado, ya que no será solo de envío o solo de recepción, sino que debe de poder enviar y recibir de datos del Servicio Web. Para crearle vamos al nodo de Send Ports de nuestra aplicación, damos botón derecho y escogemos Static Solicit-Response Send Port.
Una vez creado tenemos que configurarle. Escogemos tipo de transporte SOAP, y en su configuración introducimos la url del Servicio Web con el que nos vamos a configurar, tal y como se muestra en la siguiente figura.
Por lo tanto solo nos falta configurar las propiedades de la orquestación. Para ello nos vamos a configurar su binding, en este caso tendremos 2 puertos de envío y un puerto de recepción, configuramos los binding como se muestra en la figura siguiente.
Para terminar, iniciamos la aplicación desplegada y configurada y si todo ha ido bien en la BD de facturación deberían aparecer los datos de la factura correspondiente al pedido realizado:
Los datos corresponden con el campo ID_Pedido de la primera tabla al que se le ha concatenado el string “FACT” y el valor importe se calcula multiplicando el campo Cantidad por una constante definida en Servicio Web. Con esto concluye este post sobre integración y capacidades de BizTalk Server 2006, espero que os sea de utilidad y un saludo a todos.
Anuar