domingo, 6 de junio de 2010

MSS 2010: Listas Relacionales

Continuando con el repaso a las nuevas funcionalidades de SharePoint 2010, hoy quisiera comentaros la capacidad que las nueva versión nos ofrece para relacionar diversas listas entre sí a través de los campos de búsqueda (lookup), que ofrecen muchas más posibilidades que la anterior versión.

En SharePoint 2010 se pueden relacionar dos o más listas diferentes a través de los campos de búsqueda, obteniendo ventajas significativas como:
  • Capacidad de hacer consultas unificadas (Joins) entre listas
  • Proyectar múltiples campos de la lista origen en la lista destino
  • Integridad relacional de los datos entre listas
 Además, las relaciones creadas entre listas puden ser de "1 a 1" o de "1 a n", lo que nos permite adaptarnos mejor a nuestra necesidad relacional.

Esquema de listas relacionadas por los campos de búsqueda (lookup).

Para establecer este tipo de relación entre listas, sencillamente deberemos crear una columna del tipo búsqueda (lookup) en una lista de SharePoint, donde referenciaremos a un campo concreto de otra lista creada previamente.
Zona del formulario de creación de una columna de tipo búsqueda (lookup) relativa a la configuración de la relación entre listas.

Como podeis apreciar claramente en la imagen arriba adjunta, la propiedad que más rápidamente se puede identificar es la de proyectar múltiples campos de la lista origen en la lista destino, ya que una vez seleccionemos la lista origen y el campo origen, SharePoint nos permitirá marcar múltiples campos de la lista origen indicada. Estos campos adicionales también se agregarán como nuevos campos de búsqueda en nuestra lista y los podremos utilizar directamente en las vistas de la lista de destino, aunque tendrán muchas menos opciones de configuración (solo título y descripción) y dependerán del campo de lookup original (si borramos el campo de búsqueda que hemos creado, se borrarán también todos los campos referenciados a partir de este).

Si la relación es de "1 a 1" o de "1 a n", lo estableceremos mediante la casilla de verificación "Aplicar Valores Únicos". Marcar esta casilla implicará una relación de 1 a 1, es decir, que solamente podremos referenciar un elemento de la lista origen una única vez en la lista de destino, ya que si intentamos crear otro elemento en la lista a partir de la misma referencia nos aparecerá un mensaje en rojo debajo del campo referenciado avisándonos de que "Este valor ya existe en la lista", es decir, el campo incluye una validación y no nos dejará guardar el elemento hasta que se cumpla (no repetir una referencia ya establecida por otro ítem). 
Mensaje de error al crear un nuevo elemento que referencia al mismo elemento que otro ítem cuando el campo de búsqueda ha sido marcado con "Aplicar valores únicos".

 Hay que tener en cuenta que si marcamos la casilla de "Aplicar valores únicos", SharePoint no nos permitirá marcar la opción de "Permitir varios valores" (quedará apagada en el formulario).

"Permitir varios valores" es una opción que solo está habilitada cuando la relación de elementos es "de 1 a n" ("Aplicar valores únicos" desmarcado) y nos permite que el mismo campo de búsqueda contenga diversos valores referenciados del campo en la lista original.

Ejemplo de una lista con campos de busqueda que permiten diversos valores

Hay que tener en cuenta que habilitar "Permitir varios valores", se desactivan las opciones de "Aplicar valores únicos" y también las de integridad relacional en el formulario de definición de la columna de búsqueda.
La integridad relacional de los datos se establecerá mediante la casilla de "Exigir comportamiento de relación", que solo podremos marcar si no hemos permitido diversos valores para el campo de búsqueda. Existen dos tipos de integridad relacional, la que permite una "eliminación restringida" y la que permite una "eliminación en cascada".

La eliminación restringida, implicará que no se podrá borrar ningún ítem de la lista origen si este està referenciado al menos una vez en la lista de destino. En caso de intentarlo, SharePoint nos mostrará una ventana de error como la que muestra la siguiente imagen:

Mensaje de error al intentar eliminar un ítem de una lista origen que tiene una integridad relacional de "Eliminación Restringida".

En este caso, para poder eliminar un ítem de la lista origen deberíamos borrar antes todas las referencias existentes en la lista de destino.

El tipo de integridad relacional de "Eliminación en cascada" permite eliminar elementos de la lista origen a pesar de que hayan referencias a estos desde la lista destino, aunque con la consecuencia de que al borrar un ítem de la lista origen, borrará también todos aquellos ítems de la lista destino que hacian referencia a este. Antes de eliminar los ítems de la lista destino relacionados, eso sí, SharePoint 2010 nos mostrará una advertencia como la siguiente.

Advertencia de que al eliminar un elemento de la lista origen también se borrarán todos los que le hacían referencia en la lista destino en un modelo de integridad relacional de "Eliminación en cascada"

En cuanto a la capacidad de hacer consultas unificadas (Join Query) es un tema muy extenso al cual podría dedicar diversos posts, de momento basta decir que una vez tengamos varias listas relacionadas mediante campos de búsqueda (lookup), podremos ejecutar las consultas a las listas con la sentencia "Join", obteniendo como ejecución del query un resultado unificado de todas las listas relacionadas. Estas consultas se pueden desarrollar utilizando cualquiera de las siguientes opciones: 
  • Mediante la API de SharePoint (objeto SPQuery)
  • Mediante consultas LINQ a SharePoint
  • Mediante consultas CAML
  • Mediante consultas creadas con SharePoint Designer 2010
Y hasta aquí la introducción al modelo relacional de listas mediante campos de búsqueda en SharePoint 2010, es posible que volvamos a ver este tema en el foro en un futuro post, haciendo una aplicación práctica de consultas con Join...

¡¡Saludos hasta el próximo Post!!

4 comentarios:

MARIA dijo...

Perfect!

Norberto dijo...

Hola!

Cómo hago esto desde Visual Studio?
Se puede?

Ignasi Tebé Tena dijo...

Hombre, poder segurísimo que se puede, pero todavía no he investigado ese tema y no te puedo dar información al respecto. El Visual Studio no es mi fuerte, ¡Lo siento!

Anónimo dijo...

Hola Ignasi!
Com es pot projectar un camp de la llista origen tipus 'Búsqueda' a la llista destí?
Moltes gràcies,
Sergi