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.
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.
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).
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