Recuperación de Datos desde Sql Server

Para obtener los datos es necesario definir la consulta (que bien puede ser un simple query o la ejecución de un procedimiento almacenado)..

select *
from ciudades
for xml auto

Resultado…

<ciudades Campo="Indefinido" Depto_SIA="Indefinido" Ciudad_SIA="Indefinido" />
<ciudades Campo="Campo Rubiales" Depto_SIA="Antioquia" Ciudad_SIA="ABEJORRAL" />
<ciudades Campo="Campo Rubiales" Depto_SIA="Santander" Ciudad_SIA="ABREGO" />

Como se puede ver la clausula “xml auto” genera la consulta en formato XML que es como BizTalk recibe todos nuestros mensajes, por ende esta clausula es de vital importancia para esta integración.

Por otro lado tenemos la configuración de BizTalk, para esto es necesario definir el esquema que recibirá los datos de la ejecución de la consulta, para esto nuestro Sql Server también nos ayuda y mucho…

select *
from ciudades
for xml auto, xmlschema

Resultado… 

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
  <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
  <xsd:element name="ciudades">
    <xsd:complexType>
      <xsd:attribute name="Campo">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
            <xsd:maxLength value="255" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="Depto_SIA">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
            <xsd:maxLength value="255" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="Ciudad_SIA">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
            <xsd:maxLength value="255" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
<ciudades xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" Campo="Indefinido" Depto_SIA="Indefinido" Ciudad_SIA="Indefinido" />
<ciudades xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" Campo="Campo Rubiales" Depto_SIA="Antioquia" Ciudad_SIA="ABEJORRAL" />
<ciudades xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" Campo="Campo Rubiales" Depto_SIA="Santander" Ciudad_SIA="ABREGO" />

El ejecutar el query con la clausula “xmlschema” se obtienen el XSD del resultado de la consulta (que a la postre nos servirá como el esquema en BizTalk) y los datos encontrados; es importante obtener únicamente el schema, montarlo en BizTalk y crear el RootName y su Namespace, parámetros que debemos tener presente para nuestra configuración del receive Location.

El paso siguiente es la configuración de nuestro receive Location..

  • Creamos nuestro receive Port
  • Creamos el receive Location
    • En el adaptador seleccionamos nuestro Sql Adapter
    • En el pipeline seleccionamos un XmlReceive



Configuración del Sql Adapter..

Lo primero que debemos hacer es configurar nuestro Sql server, para ello necesetimos ingresar los siguientes valores a las propiedades descritas:

  • InboundId: Es un identificador a nuestro proceso, para nuestro caso será la obtención de datos desde Sql.
  • Initial Catalog: Nombre de la base de datos a la cual nos vamos a conectar.
  • Instance Name: Si nuestra base de datos se encuentra en una instancia, en esta propiedad deberíamos poner dicho valor.
  • Server: Nombre o IP del servidor donde esta nuestra base de datos.

Seguidamente configuramos el binding de la conectividad, en esta pestaña encontramos entre otras propiedades las siguientes:
  • XmlStoredProcedureRootNodeName: Nombre del Root del schema definido previamente.
  • XmlStoredProcedureRootNodeNamespace: Namespace del schema definido.
  • InboundOperationType: Tipo de la respuesta que requerimos, para nuestro caso será XML.
  • PolledDataAvailableStatement: Consulta que se ejecuta previamente a la extracción de datos, si esta consulta no se puede realizar, la obtención de datos no se dará, es una consulta de validación de información.
  • PollingStatement: Consulta que extrae los datos requeridos, en esta consulta es donde debemos tener presente nuestra clausula “xml auto”.
Nota: Como medida para obtener los datos del Root y del Namespace, se pude validar el xml generado contra el esquema o generar un instancia automáticamente.
Finalmente configuramos el usuario y el password para acceder a la base de datos





Comentarios

Entradas populares de este blog

Algo de Humor: Leyes de Java

MSDTC error code 0x8004D02A

PDF y JAVA