MOSS 2007 Catalogo de datos empresariales BDC (3)

Antes de continuar viendo el resto de webparts y la cantidad de cosas que se pueden hacer con el BDC, volvamos por un momento al archivo de configuración del LOB.

Para poder utilizar las acciones, debemos definirlas antes (esto se puede hacer dentro de la administración central de manera sencilla) pero como voy a dedicar esta parte al archivo de definición XML que usamos para configurar el LOB, veremos como se hace en XML.

Cada una de las entidades tiene los siguientes elementos básicos:

AccessControlList – Lista de control de acceso (también se encuentra en otros elementos como los métodos “Methods”)

Identifiers – Que representan elementos clave (id)

<Identifiers>
<Identifier TypeName=”System.String” Name=”CustomerID />
</Identifiers>
Methods – La forma en que recuperaremos datos de la base de datos, una entidad puede como es lógico tener más de un método para devolver datos. Aunque a priori pueda parecer que hay una correspondencia entre tabla y method, no es así. Cada method debe ser visto como un procedimiento que tenemos para recuperar datos de la base de datos asociados con una entidad. De modo que dichos datos no tienen por que ser de la misma tabla. 


En esta primera parte definimos como vamos a recuperar los datos, para bases de datos podemos usar  Text, StoredProcedure, ó TableDirect. En este caso, es una sentencia SQL con lo que el tipo de comando es text y el comando la sentencia SQL.
 

<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>

Después tenemos que definir los campos que queremos utilizar en los filtros, si un campo no está aquí definido, no podremos usarlo para filtrar. Existen distintos mecanismos para filtrar los datos, Wildcard, Comparision, Limit, UserContext, Username, Password (les dedicaremos una sección más adelante)
 

  <FilterDescriptors>
<FilterDescriptor Type=”Wildcard” Name=”CustomerID“>
<Properties>
<Property Name=”UsedForDisambiguation” Type=”System.Boolean”>true</Property>
</Properties>
</FilterDescriptor>
</FilterDescriptors>

Los parámetros, las entradas y salidas de cada uno de los métodos. En este ejemplo se usa CustomerID, como una entrada, observar que el nombre coincide con el parámetro de nuestra sentencia SQL, que el identificador (esto es importante) debe estar definido y que este parámetro se usará en el filtro del mismo nombre. Y por último vemos que tienen asociados dos valores por defecto cuando este parámetro se usa con determinados métodos. Esos métodos en concreto Finder y SpecificFinder hay que definirlos siempre que queramos usar nuestra definición de datos con el Business Data List Webpart.

  <Parameters>
<Parameter Direction=”In” Name=”@CustomerID“>
<TypeDescriptor TypeName=””System.String” IdentifierNameCustomerIDAssociatedFilter=”CustomerID Name=”CustomerID”>
<DefaultValues>
<DefaultValue MethodInstanceName=”ClientesFinder Type=””System.String”>%</DefaultValue>
<DefaultValue MethodInstanceName=”ClientesSpecificFinder Type=””System.String”>%</DefaultValue>
</DefaultValues>
</TypeDescriptor>
</Parameter>

Los parámetros de vuelta en este caso llevan asociados dos elementos importantes que son el TypeReflectorTypeName y el TypeName estos se encargarán de instanciar los elementos devueltos, IDataReader que será una colección de IDataRecords., el resto es simplemente la definición de cada uno de los tipos que son devueltos dentro del CustomerDataRecord.


<Parameter Direction=”Return”
TypeReflectorTypeName
=”Microsoft.Office.Server.ApplicationRegistry.Infrastructure.DotNetTypeReflector” 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>

Aquí están esos dos métodos, Finder y SpecificFinder que son necesarios para que nuestro método pueda ser usado con el Business Data Viewer webpart, el Finder es una instancia que usará el webpart para devolver datos de manera genérica, y SpecificFinder para devolver una única instancia.

   <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>



Actions – Las acciones que se pueden llevar a cabo en una entidad, aquí podemos asociar a unos determinados campos una serie de acciones posibles. Este mecanismo se realiza pasando los parámetros en la Url. (Más adelante veremos tambien como recojer esos parametros).


Position, indica la posición de esa acción en el menú. Url, la url en donde se lleva acabo la acción. ImageUrl es el icono que tendrá la acción. Cada acción lleva asociados los parámetros que necesita pasar en la url, como se ve es del tipo String.Format, de manera que el elemento Index=0 será {0} y así sucesivamente y como es lógico se pueden pasar todos los parámetros que sean necesarios. 


<Actions>
<Action Position=”1″
IsOpenedInNewWindow
=”false”
Url
=”http://spsbeta/SiteDirectory/bdc/Pages/VerCliente.aspx?CustomerID={0}”
ImageUrl
=”/_layouts/3082/images/viewprof.gif”
Name
=”Ver Cliente”
DefaultDisplayName
=”Ver cliente”>
<ActionParameters>
<ActionParameter Index=”0″ Name=”CustomerID” />
</ActionParameters>
</Action>
</Actions>

Deja un comentario

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