jueves, 7 de marzo de 2013

SharePoint 2010. Consultando listas con WCF Data Services

Uno de 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 versión 2010 Tenemos la API Microsoft.SharePoint.Client y un 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

Si 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

Pero 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 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 instanciar 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 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.
  

 

No hay comentarios:

Publicar un comentario