MOSS 2007 Catalogo de datos empresariales BDC (1)

Una de las partes donde más ha cojeado SharePoint ha sido en la integración del portal o de los sitios de trabajo con otros sistemas como ERPs ó BBDD de la empresa.

En SharePoint v2 y en WSS2 disponíamos del DataViewer WebPart para incorporar datos que provenían de sistemas externos, si queríamos hacer cualquier otra cosa debíamos programarla y cosas lógicas como poder utilizar el sistema de búsqueda de SharePoint para localizar esos datos eran una misión imposible.

Para paliar todos estos escollos, MOSS 2007 nos ofrece el Business Data Catalog (BDC) ó Catálogo de datos empresariales.

MOSS 2007 nos ofrece una manera sencilla de incorporar esos datos y una API completa para poder programar interfaces de manera sencilla.

Para poder incorporar estos datos hay que realizar un interface por medio de un archivo XML que contendrá la definición de la conexión y las entidades con las que deseamos trabajar. Este archivo se ha de incorporar desde la administración centralizada para que este disponible en nuestro sistema.




El esquema de este documento se encuentra en (C:Archivos de programaMicrosoft Office Servers12.0Binbdcmetadata.xsd)

La estructura de dicho archivo es la siguiente :

LOBSystem (Line of Business System) – Define el catálogo de datos empresariales
<LobSystem xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=”http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog%20BDCMetadata.xsd
Type=”Database”
Version=”1.0.0.0″
Name=”LOB_NorthWind”
xmlns
=”http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog”>
LOBSystemInstance – Define la conexión con la BBDD
<LobSystemInstances>
<LobSystemInstance Name=”LOB_NorthWind”>
<Properties>
<Property Name=”DatabaseAccessProvider”
Type
=”Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider”>SqlServer</Property>
<Property Name=”RdbConnection Data Source” Type=”System.String”>SRVSQL</Property>
<Property Name=”RdbConnection Initial Catalog” Type=”System.String”>Northwind</Property>
<Property Name=”RdbConnection Integrated Security” Type=”System.String”>SSPI</Property>
<Property Name=”RdbConnection Pooling” Type=”System.String”>false</Property>
<Property Name=”AuthenticationMode”
Type
=”Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAuthenticationMode”>PassThrough</Property>
</Properties>
</LobSystemInstance>
</LobSystemInstances>

Podemos establecer conexiones con Oracle, SAP, Siebel, ó a través de Servicios WEB


Entity – Define las distintas entidades de datos de este LOB. Son los conjuntos de datos de la conexión de datos, también aquí definiremos lo métodos y los filtros con los que recuperaremos la información.

<Entities>
<Entity EstimatedInstanceCount=”10000″ Name=”Clientes“>
<Identifiers>
<Identifier TypeName=”System.String” Name=”CustomerID” />
</Identifiers>
<Methods>
<Method Name=”Clientes“>
<Properties>
<Property Name=”RdbCommandType” Type=”System.Data.CommandType”>Text</Property>
<Property Name=”RdbCommandText” Type=”System.String”>
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address,
                            City, Region, PostalCode, Country, Phone, Fax
FROM dbo.Customers
WHERE CustomerID
LIKE @CustomerID
</Property>
</Properties>
<FilterDescriptors>
<FilterDescriptor Type=”ExactMatch” Name=”CustomerID” />
</FilterDescriptors>
<Parameters>
<Parameter Direction=”In” Name=”@CustomerID”>
<TypeDescriptor TypeName=”System.String” IdentifierName=”CustomerID” AssociatedFilter=”CustomerID” Name=”CustomerID”>
<DefaultValues>
<DefaultValue MethodInstanceName=”ClientesFinder Type=”System.String”>%</DefaultValue>
<DefaultValue MethodInstanceName=”ClientesSpecificFinder Type=”System.String”>%</DefaultValue>
</DefaultValues>
</TypeDescriptor>
</Parameter>
<Parameter Direction=”Return” Name=”Customerss“>
<TypeDescriptor TypeName=”System.Data.IDataReader” IsCollection=”true” Name=”CustomersDataReader“>
<TypeDescriptors>
<TypeDescriptor TypeName=”System.Data.IDataRecord” Name=”CustomersDataRecord”>
<TypeDescriptors>
<TypeDescriptor TypeName=”System.String” IdentifierName=”CustomerID” Name=”CustomerID” />
<TypeDescriptor TypeName=”System.String” Name=”CompanyName” />
<TypeDescriptor TypeName=”System.String” Name=”ContactName” />
<TypeDescriptor TypeName=”System.String” Name=”ContactTitle” />
<TypeDescriptor TypeName=”System.String” Name=”Address” />
<TypeDescriptor TypeName=”System.String” Name=”City” />
<TypeDescriptor TypeName=”System.String” Name=”Region” />
<TypeDescriptor TypeName=”System.String” Name=”PostalCode” />
<TypeDescriptor TypeName=”System.String” Name=”Country” />
<TypeDescriptor TypeName=”System.String” Name=”Phone” />
<TypeDescriptor TypeName=”System.String” Name=”Fax” />
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</Parameter>
</Parameters>
<MethodInstances>
<MethodInstance Type=”Finder”
ReturnParameterName
=”Customerss
ReturnTypeDescriptorName
=”CustomersDataReader
ReturnTypeDescriptorLevel
=”0″
Name
=”ClientesFinder“>
</MethodInstance>
<MethodInstance Type=”SpecificFinder”
ReturnParameterName
=”Customerss
ReturnTypeDescriptorName
=”CustomersDataReader
ReturnTypeDescriptorLevel
=”0″
Name
=”ClientesSpecificFinder“>
</MethodInstance>
</MethodInstances>
</Method>
</Methods>
</Entity>
</Entities>

A priori puede parecer un poco complicado pero no lo es. Además Todd Baginski ha creado un generador que hará las delicias de más de uno, el proyecto esta en CodePlex, pero la última versión la tiene accesible desde aquí.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *