Arquitectura, buenas prácticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016

SharePoint, realizar consultas a múltiples listas

Una pregunta recurrente dentro de los foros MSDN sobre SharePoint o entre desarrolladores que empiezan sobre SharePoint es: ¿Cómo se puede hacer una consulta sobre más de una lista? Pues bien, en este post vamos a resolver esta duda. Vamos a ver cómo podemos realizar una consulta sobre más de una lista, cuáles son sus ventajas y desventajas y en qué escenarios son convenientes utilizarlas.

Partimos de la base que SharePoint no es la solución adecuada para plantear una solución relacional y tener, por ejemplo, una solución para gestionar los movimientos contables de una empresa en los que hay multitud de relaciones entre todos las tablas.

El principal inconveniente que tienen los desarrolladores nóveles cuando afrontan un proyecto de SharePoint es intentar buscar una similitud entre SharePoint y una Base de Datos. No obstante, hay una diferencia clara:  el lenguaje para buscar una lista/biblioteca de SharePoint no es igual de ágil ni cómodo que el de SQL.

Caml Query es un lenguaje propio para hacer consultas sobre SharePoint y solamente piensa para realizar consultas sobre una única lista. Esto hace que se intenten anidar bucles de consultas que finalmente lo único que hacen es penalizar el rendimiento y hacer las consultas muy lentas.  Para solventar estos inconvenientes de trabajar con listas, hay que plantear una solución con una buena “Arquitectura de la Información” y utilizar técnicas para plantear un correcto acceso a las listas.

¿Es posible consultar sobre más de una lista?

Ahora bien, dentro del Modelo de Objetos de Servidor, tenemos el objeto SPSiteDataQuery. Este objeto permite realizar consultas Caml Query que se ejecuta sobre varias listas de un determinado sitio. Es decir, si yo tengo varias listas y quiero consultar los elementos que empiecen por la letra A, con este objeto (y con una única consulta) puedo obtener estos elementos, ahorrándome hacer una consulta por cada lista en la que quiero realizar esta consulta.

Propiedades de SPSiteDataQuery

Es un objeto muy simple. Sus principales propiedades son:

  •  Web: Ámbito donde se va a realizar la consulta
  • Lists: Identificador de las listas o tipo de listas a consultas
  • ViewFields: Campos que queremos visualizar
  • Query: Consulta CamlQuery
  • RowLimit: Número de elementos a mostrar

Ejemplo:

SPSiteDataQuery dataQuery = new SPSiteDataQuery();
            dataQuery.Webs = "<Webs Scope=\"Site\">";
            dataQuery.Lists = "<Lists><List ID='11111-222' /></Lists>";
            dataQuery.ViewFields = allViewFields;
            dataQuery.Query = query;
            dataQuery.RowLimit = rowLimit;
            var dt = web.GetSiteData(dataQuery);

Ventajas
La principal ventaja que tiene este tipo de consulta es que el rendimiento de la misma es muy bueno. Es sorprendente que tarde el mismo tiempo en una consulta CamlQuery de una lista que en muchas listas. Dentro de las pruebas que hemos realizado en entornos de desarrollos, hemos comprobado que para listas con más de 1.000 elementos se ha comportado con tiempos de respuestas inferiores al segundo.

Desventajas
Desde nuestro punto de vista, estas consultas tienen dos inconvenientes:
1.- No tiene paginación.
2.- La consulta no mezcla diversos templates de listas, es decir, la consulta no devuelve datos de biblioteca de documentos y una lista genérica.

Cuándo utilizarla
Dado su gran rendimiento, dentro del equipo surgió la idea de utilizar este objeto en lugar del SPSite ya que puedes hacer consulta sobre una única lista. Pero, dado que no tiene paginación y el coste de tiempo sobre una lista es el mismo, descartamos esta opción.
Este objeto se debe de utilizar cuando deseamos mostrar una serie de elementos que están en varias listas/bibliotecas cumpliendo una determinada condición. Por ejemplo, en el proyecto que estamos desarrollando lo hemos utilizado. Es una gestión documental dividida por estados. Dependiendo del estado en el que se encuentra, los usuarios pueden visualizar unos documentos u otros. Esta objeto nos viene como anillo al dedo.

Más opciones de consulta entre varias listas

El mundo del desarrollo en SharePoint es bastante amplio y el hecho de poder plantear varias soluciones para un único requisito nos parece que es algo que engrandece a la plataforma. ¿Conocéis otra forma de realizar consultas a múltiples listas? Haciendo uso del servicio de búsqueda. Aunque esta forma, tiene un gran inconveniente: para mostrar los datos debemos de asegurarnos que el contenido del sitio está indexado en la búsqueda porque sino seguro que no nos muestran los últimos resultados. Este handicap, en entornos normales, hace que descartemos esta opción para construir algún proceso dependiendo de este servicio.

mm

Sobre Adrián Díaz

Adrián Díaz es Ingeniero Informático por la Universidad Politécnica de Valencia. Es MVP de Microsoft en la categoría Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnologías Microsoft más de 10 años y desde hace 3 años está centrado en el desarrollo sobre SharePoint. Actualmente es Software & Cloud Architect Lead en ENCAMINA.
Esta entrada ha sido publicada en buenas practicas y etiquetada como , . Enlace permanente .

Suscríbete a Desarrollando sobre SharePoint

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores