SharePoint 2010. Consultando listas con WCF Data Services

Hoy vamos a empezar una serie de artículos que hablarán sobre los métodos que SharePoint 2010 nos ofrece para acceder a los elementos (listas, documentos, etc.) que almacena desde un cliente externo al servidor.

En la versión 2007 de SharePoint existen unos servicios web que nos permitían realizar consultas sobre las listas. Trabajar con estos servicios web complicaban un poco el desarrollo, ya que no sólo teníamos que conocer el modelo que íbamos a consultar, sino saber construir un lenguaje llamado CAML que nos permitía realizar consultas sobre estos datos.Al final, terminábamos desarrollando un servicio web que utilizando el API de servidor de SharePoint devolvía los datos de las listas con un formato un poco más amigable.

La nueva versión 2010 nos trae alguna novedades. Tenemos nueva API Microsoft.SharePoint.Client y un nuevo servicio que implementa Open Data Protocol usando WCF Data Services. Hoy nos centraremos en este último.

WCF Data Services en SharePoint 2010 ofrece las funcionalidades de la programación de cliente con Data Services, a través del servicio con la url http://<site>/_vti_bin/listdata.svc.

Si accedemos al servicio con un explorador web, obtendremos el Data Service Atom feed con todas las listas del sitio.

SharePoint2010_wcf1

Sin queremos consultar la lista Tasks, con poner la url del servicio seguida del nombre de la lista tenemos (http://<site>/_vti_bin/listdata.svc/Tasks), o incluso podemos obtener el xml de un elemento (http://<site>/_vti_bin/listdata.svc/Tasks(1)). También se incluyen todas las opciones de filtrado (http://<site>/_vti_bin/listdata.svc/Tasks?$filter=Description eq ‘Tarea 1’), ordenación (http://<site>/_vti_bin/listdata.svc/Tasks$orderby=Description desc) y etc.

SharePoint2010_wcf2

Peor esta no es la idea, está bien poder hacer consultas con el navegador, pero con un par de líneas de código podemos realizar consultas de este tipo o incluso de actualización de los elementos.

Abramos Visual Studio 2010 (o incluso Visual Studio 2008 SP1) y en un proyecto de consola agregamos la referencia de servicio a la url del mismo (http://<site>/_vti_bin/listdata.svc).

SharePoint2010_wcf3

La ventaja de utilizar WCF Data Services para consultar datos en SharePoint es que tendremos un Strongly Type DataContext y Strongly Type List (en el Servicio Web clásico de Sharepoint todas las listas son del mismo tipo y no tenemos diferencia entre ellas). WCF Data Services crea un modelo relacional de objetos para cada lista del sitio que estemos consultando.

Para realizar una consulta sobre la lista Tasks, sólo tendremos que instancia el HomeDataContext y realizar la consulta con LINQ.

   1: Uri intranetUri = new Uri("http://intranet.contoso.com/_vti_bin/listdata.svc", UriKind.Absolute);

   2:  

   3: IntranetService.HomeDataContext context = new IntranetService.HomeDataContext(intranetUri);

   4:  

   5: context.Credentials = System.Net.CredentialCache.DefaultCredentials;

   6:  

   7: IQueryable<IntranetService.TasksItem> tasks = from t in context.Tasks

   8:                                         where t.Title.Contains("Tarea")

   9:                                         select t;

  10:  

  11: foreach (var item in tasks)

  12: {

  13:     Console.WriteLine("ID {0} - Title {1}", item.ID, item.Title);

  14: }

  15:  

  16: Console.ReadLine();

Igual de simple lo tenemos para realizar inserciones o actualizaciones en la lista.

   1: IntranetService.TasksItem task = new IntranetService.TasksItem();

   2: task.Title = "Tarea 2 desde consola";

   3: task.StartDate = DateTime.Now;

   4: task.Created = DateTime.MinValue;

   5: task.Modified = DateTime.MinValue;

   6:  

   7: context.AddToTasks(task);

   8:  

   9: context.SaveChanges();

 

Aunque sigamos teniendo los clásicos Servicios Web (/_vti_bin/Lists.asmx) para consultar listas, este nuevo servicio con WCF Data Services nos proporciona un modelo de objetos relacional y un contexto que se encarga de realizar las consultas sobre el servicio.

 

Saludos a todos…

4 comentarios sobre “SharePoint 2010. Consultando listas con WCF Data Services”

  1. Buenas Alberto,
    Muy buen artículo. A las opciones que comentas para consultar datos de una lista yo añadiría:
    – En el lado del servidor tenemos LINQ To SharePoint que traduce las consultas LINQ a CAML. Además, aquí es interesante que el esquema CAML se ha actualizado para permitir Joins entre listas.
    – La API de cliente tiene tres sabores: .NET, Silverlight y JavaScript cada uno con sus peculiaridades en lo que a trabajo con listas se refiere.
    – No nos olvidemos del propio modelo de objetos de SharePoint para el trabajo con Listas.
    – La xsltListViewWebPart que reemplaza a la ListViewWebPart.

    Y seguro que me he dejado alguna forma…Gustavo hizo un webcast muy bueno sobre las formas que hay de consultar una lista y creo que le salían unas cuantas más :-).

    Un saludo y ya estoy esperando los siguientes posts sbre SharePoint 2010.

    JC’s

  2. Gracias.

    Nos vienen muchas novedades, y quería empezar primero con las aplicaciones que no se ejecutan en el servidor (en 2007 sólo teníamos la posibilidad de utilizar Servicios Web) y ahora tenemos dos opciones más (Client API y WCF Data Services).

    El próximo hablaré sobre Client API y las ventajas y desventajas con respecto a Data Services.

Responder a jcgonzalez Cancelar respuesta

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