Consultas CAML en SharePoint 2010 simplificadas con Camlex.NET

CAML, lenguaje de marcado de aplicaciones de colaboración, se emplea en SharePoint para definir consultas a datos de listas. Puede resulta un poco engorroso trabajar con este lenguaje y aquí es donde entra en acción el proyecto open source Camlex.NET.

Camlex.NET simplifica la creación de consultas CAML permitiéndonos usar expresiones lambda para abstraernos de la sintaxis de este lenguaje de consulta y facilitarnos la creación de consultas complejas y dinámicas.

Vamos a ver un ejemplo sencillo de cómo emplear Camlex.NET para generar una consulta CAML y consultar una lista de contactos existente en SharePoint desde una aplicación de consola.

Partimos de una lista de contactos estándar de SharePoint con los siguientes datos:

Creación del proyecto y descarga

Creamos una aplicación de consola en el servidor de SharePoint estableciendo en las propiedades del proyecto que la plataforma de destino es x64.

Descargamos Camlex.NET desde CodePlex, en este momento la última versión es la 3.1. Una vez descargado y descomprimido, debemos agregar una referencia al ensamblado Camlex.NET.dll en nuestro proyecto.

Espacios de nombres

using CamlexNET;
using Microsoft.SharePoint;

Código y prueba

SPQuery query = new SPQuery();

Console.Write("Compañía: ");
string company = Console.ReadLine();
query.Query = Camlex.Query().Where(X => (string)X["Company"] == company).ToString();

Console.WriteLine("Empleados: ");
foreach (SPListItem contact in new SPSite("http://intranet").OpenWeb().Lists["Contactos"].GetItems(query))
    Console.WriteLine(contact["FullName"].ToString());

Si introducimos “Microsoft” como compañía a consultar, la línea 5 genera la siguiente consulta CAML:

<Where>
  <Eq>
    <FieldRef Name="Company" />
    <Value Type="Text">Microsoft</Value>
  </Eq>
</Where>

Resultado y descarga


En la página del proyecto en CodePlex se plantean escenarios más complejos que nos ayudarán a hacernos una idea de la cantidad de trabajo que nos ahorra a la hora de crear consultas con varios filtros. Veamos un ejemplo de consulta con condiciones “and” y “or”:

var caml = Camlex.Query().Where(x => (int)x["ProductID"] == 1000 && ((bool)x["IsCompleted"] == false || x["IsCompleted"] == null)).ToString();

Esta sencilla consulta con Camlex.NET genera la siguiente consulta CAML:

<Where>
  <And>
    <Eq>
      <FieldRef Name="ProductID" />
      <Value Type="Integer">1000</Value>
    </Eq>
    <Or>
      <Eq>
        <FieldRef Name="IsCompleted" />
        <Value Type="Boolean">0</Value>
      </Eq>
      <IsNull>
        <FieldRef Name="IsCompleted" />
      </IsNull>
    </Or>
  </And>
</Where>

Por si todo esto fuera poco, existe un servicio online que convierte nuestras actuales consultas CAML a código C# para Camlex.NET disponible en camlex-online.org.

Deja un comentario

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