jueves, 3 de octubre de 2013

Añadir columnas de datos externos a definicion de lista Sharepoint 2010

Para los que hayan tenido contacto con SharePoint 2007, había un tipo de columna de lista de datos profesionales.

Ahora, en SharePoint 2010, esta columna está disponible para todas las listas de SharePoint (excepto las listas externas), se llama columna de datos externos y permite a los usuarios mostrar datos de cualquer tipo de contenido externo existente en el modelo del BCS, en una lista de SharePoint estándar.

En este artículo vamos a ver como incluir este tipo de columna de datos externos, en el esquema de una lista que tengamos en Visual Studio 2010.

¿Que conseguimos con esto?. Provisionar la columna de manera fácil y cómoda, sin tener que recurrir a un EventReciver para incluir la columna en la lista programándolo.

Escenario

Tenemos una lista SharePoint, llamada 'Sitios' donde queremos incluir una columna, llamada Country (Pais) cuyos valores vienen de una tabla externa donde tenemos definidos los paises. Asumimos que ya hemos definido el modelo BCS y lo hemos cargado en la administración central de SharePoint junto con todos los permisos necesarios.

Vamos a hacer el proceso para modificar el esquema de la lista desde VisualStudio 2010 e incluir el campo. El proceso es muy sencillo, pero la documentación para realizar esto es bastante escasa.

Solución

Abrimos el esquema de definición de la lista (Schema.xml) y nos vamos al apartado Fields para definir un nuevo campo de lists. Bueno en realidad vamos a definir dos campos: BCS requiere que haya un campo oculto con el identificador BCS del elemento seleccionado.

Por tanto definiremos:

<field baserenderingtype="Text" bdcfield="COUNTRY_DESC" colname="nvarchar1" 
description="Country" displayname="Country" entityname="COUNTRIES" entitynamespace="SAMPLES.BCS" hasactions="False" 
id="{9bc89f68-123d-3786-9283-c629a5a4383a}" name="Country" profile="" relatedfield="COUNTRIES_ID" relatedfieldbdcfield="" relatedfieldwssstaticname="COUNTRIES_ID" required="FALSE" rowordinal="1" secondaryfieldbdcnames="0" secondaryfieldswssstaticnames="0" secondaryfieldwssnames="0" sourceid="{549eb03c-9767-42e5-8360-8dddf6c34bd6}" staticname="Country" systeminstance="SAMPLES_DB" type="BusinessData">
</field>

Y también el campo que guardará el identificador:

<field bdcfield="COUNTRIES_ID" colname="ntext2" description="Country id for BCS Country field" displayname="COUNTRIES_ID" hidden="TRUE" id="{3ed8b785-737c-462a-9c17-7bdff65b9767}" name="COUNTRIES_ID" readonly="TRUE" rowordinal="0" sourceid="{549eb03c-9767-42e5-8360-8dddf6c34bd6}" staticname="COUNTRIES_ID" type="Note">
</field>

Notad que el campo que guarda el identificador, debe ser de tipo Note, es un campo oculto (Hidden=true) y de solo lectura (ReadOlny = true). De esta manera el usuario no lo ve en los formularios y no se puede modificar.

Como se puede ver en la definición del campo Country los atributos RelatedField y RelatedFieldWssStaticName son los que apuntan al campo que guarda el identificador. Esto es necesario para decirle a BCS donde debe ir a buscar el identificador del elemento que se ha seleccionado y donde va a guardar el identificador, cuando se seleccione.

Las propiedades más importantes son las siguientes:

  •  SystemInstance="SAMPLES_DB": Establece el LOB System del BCS donde está la entidad que queremos enlazar. 
  • EntityNamespace="SAMPLES.BCS": Es el espacio de nombres del modelo donde esta la entidad. 
  • EntityName="COUNTRIES": Es la entidad del modelo BCS que queremos cargar. En nuestro caso los paises (Countries). 
  • BdcField="COUNTRY_DESC": Es la columna de la tabla que vamos a mostrar. En nuestro caso la descripción.

Espero que esto os ayude un poco más en vuestras andaduras con el BCS de SharePoitn 2010.

No hay comentarios:

Publicar un comentario