Consultas sobre listas de SharePoint 2010 usando CAML


En este segundo post me voy a centrar en un aspecto que resultará de vital importancia a la hora de hacer desarrollos personalizados en SharePoint y no es otro que el realizar consultas sobre una lista concreta.

Vamos a tener varias alternativas a la hora de realizar esta operación pero nosotros nos vamos a decantar por utilizar el lenguaje CAML. No obstante, podríamos haber utilizado también el lenguaje Linq to Sharepoint que nos proporciona un mayor nivel de abstracción. Pero en un principio he decidido empezar hablando de la forma más compleja y de más “bajo nivel” que es la utilización de CAML para después abordar linq ya que al fin y al cabo linq to sharepoint transforma internamente las consultas realizadas a este lenguaje.

Como este post no se trata de un tutorial de aprendizaje de CAML, sino de mostrar como funciona aplicado en sharepoint, voy a presentar una herramienta que nos va a simplificar el trabajo a la hora de elaborar las consultas realizadas con CAML. No obstante al final del post os indicaré algunos enlaces sobre CAML para que podáis completar vuestros conocimientos.

La herramienta que vamos a utilizar es la aplicación U2U CAML Query Builder. Se trata de una aplicación gratuita que nos permite construir consultas CAML de forma muy sencilla. Esta aplicación se puede descargar pulsando aquí. Una vez descargada e instalada la ejecutamos y veremos una pantalla como la siguiente:

Rellenamos la información correspondiente para poder conectarnos. Seleccionamos la opción de Connect via SharePoint Web Services y la opción Custom credentials y rellenamos la información correspondiente, después pulsaremos en Connect. Una vez que hemos accedido a la herramienta en el cuadro de la izquierda se verán todas las listas del sitio. Seleccionamos aquella sobre la que queremos hacer la consulta y pulsamos en el botón new query de la barra de herramientas. Se nos despliega una vista como la siguiente sobre la que podremos ya desarrollar la consulta que deseemos.

Utilizando las opciones que vemos podremos crear la consulta que queramos. Ésta será la consulta que utilizaremos después en el código que vamos a utilizar para la consulta. Una vez que ya tenemos la consulta que deseamos podemos pasar a realizar el código de la aplicación.

Vamos ahora entonces a crear un nuevo proyecto en Visual Studio 2010. Para ello accedemos a Archivo->Nuevo Proyecto y cuando se despliegue el cuadro de diálogo seleccionamos una plantilla de Aplicación de Consola y le damos como nombre EjemploConsultaCAML. Se crea entonces un proyecto de consola al que lo primero que tendremos que hacer es agregar las referencias de SharePoint para poder trabajar con el modelo de objetos propio para SharePoint.

Para ello en el explorador de soluciones, hacemos botón derecho sobre “references” y pulsamos en Agregar Referencia. En el cuadro que se despliega vamos a seleccionar examinar y en la ruta c:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\ vamos a seleccionar Microsoft.SharePoint.dll.

Ahora ya podemos añadir en el código las referencias propias para Sharepoint. Vamos ahora a mostrar todo el código de la aplicación para después pasar a explicar las líneas más relevantes.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace ejemploConsultaCAML
{
class Program
{
static void Main(string[] args)
{
try
{
string url = "<nombreURL>";
using(SPSite site = new SPSite(url.ToString()))
{
using (SPWeb oWeb = site.OpenWeb())
{
SPList lista = oWeb.Lists["Documentación Requerida"];

SPQuery consulta = new SPQuery();
consulta.Query = @"<Where><Eq><FieldRef Name='Tipos_x0020_de_x0020_Gasto' /><Value Type='Choice'>Material Escolar</Value></Eq></Where>";
SPListItemCollection items = lista.GetItems(consulta);

foreach (SPItem item in items)
{
Console.Write("{0} - {1} - {2}", item["ID"], item["Tipos de Gasto"], item["Title"]);
}
string texto = Console.ReadLine();
}
}
}
catch (Exception ex)
{
Console.Write(ex);
string text = Console.ReadLine();
}
}
}
}

Vamos ahora a hablar de los aspectos más importantes del código que hemos mostrado anteriormente.

  • Las primeras líneas dentro de la función main son las relacionadas a cargar el sitio web en el que queremos hacer la consulta. Para ello tenemos que sustituir <nombreURL> por el nombre del sitio web con el que queremos trabajar.
  • Tras esto se carga la lista correspondiente sobre la que vamos a hacer el filtrado en la línea 21.
  • A continuación usamos la clase SPQuery como vemos en la línea 23 y24. Como se puede observar usamos la consulta que obtuvimos con la herramienta U2U CAML Query Builder para filtrar la lista.
  • Una vez que ya hemos definido la consulta por medio del método del objeto de tipo SPList, GetItems, realizamos el filtrado propiamente dicho. Esta función devuelve un objeto del tipo SPListItemCollection que recorremos con el bucle que se puede ver a continuación capturando como elemento de tipo SPItem y podemos manipular como deseemos. En este caso simplemente mostramos por pantalla algunos de los campos de cada Item filtrado en la lista.

Hasta aquí el post de hoy, espero que hayais podido aprender un aspecto importante, como es hacer consultas sobre listas de sharepoint programáticamente.

ENLACES DE INTERÉS

Editado (4/11/2014): Os dejo un enlace a una nueva entrada sobre este tema que he escrito recientemente, donde se completa mucho más la información de lo que se puede hacer con CAML

Consultas CAML para filtrar listas de SharePoint

Anuncios

2 comentarios en “Consultas sobre listas de SharePoint 2010 usando CAML

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s