Listar, añadir, modificar y borrar información con REST en SharePoint 2010

Una de las ventajas que tiene SharePoint, es el uso de servicios con protocolos estándares para poder consumir información desde cualquier plataforma… Este es el caso de REpresentational State Transfer (REST),  que técnicamente no es un protocolo, pero puede definirse como un modelo de diseño de Servicio Web basado en XML sobre HTTP.

¿Como podemos usar servicios REST en SharePoint 2010? Si tenemos un sitio de SharePoint, podemos acceder a su contenido, a través de  ADO.NET Data Services, lo único que debemos hacer es poner en el navegador la siguiente url: http://<servidor>/_vti_bin/listdata.svc/ para ver el listado de todas las entidades con las que podemos interactuar.

En caso de que tengáis problemas para recuperar esta información, podéis consultar este post: No se puede cargar IDataServiceUpdateProvider usando REST en SharePoint 2010.

Es posible navegar entre las entidades, incluyendo en la url el nombre de la entidad, como por ejemplo, del listado de objetos que tenemos en este sitio:

Podríamos visualizar los items de la lista DemoList accediendo a la url:

  • http://<servidor>/_vti_bin/listdata.svc/DemoList

Es necesario conocer los metadatos de la entidad, para realizar consultas mas complejas…

  • http://<servidor>/_vti_bin/listdata.svc/$metadata

Si queremos recuperar la información del primer item de esta lista, podemos obtenerlo de la siguiente forma: 

  • http://<servidor> /_vti_bin/listdata.svc/DemoList(1)

Si queremos únicamente devolver el titulo del item, solo tienes que especificar el nombre del campo:

  • http://<servidor>/_vti_bin/listdata.svc/DemoList(1)/Título

También podemos hacer filtros, como por ejemplo, con el titulo del item:

  • http://<servidor>/_vti_bin/listdata.svc/DemoList?$filter=Título eq ‘Otro nuevo registro’ 
Incluso podemos ordenar la información:
  • http://<servidor>/_vti_bin/listdata.svc/DemoList?$orderby=Título

 

Si preferimos consumir este servicio desde una aplicación .NET es tan sencillo como:

1) Desde Visual Studio, creas un nuevo proyecto de tipo “Console Application”

2) Añades una referencia al servicio REST, es decir con el botón derecho sobre el proyecto pulsas “Add Service Reference…” y añades la url del servicio:

3) Dependiendo de la acción que queramos realizar, podemos usar cualquiera de los siguientes métodos, que gracias a LYNQ podemos trabajar con la información:

Listado de items de una lista:

static void GetData()
{
	//recupera la informacion del servicio 
	DevPortalHomeDataContext dataContext = new DevPortalHomeDataContext(new Uri("http://servidor/_vti_bin/listdata.svc/"));
	dataContext.Credentials = CredentialCache.DefaultNetworkCredentials; 
	//recupera el listado de items de la lista DemoList
	var result = from items in dataContext.DemoList select new { Title = items.Title, };
	foreach (var item in result)
	Console.WriteLine(item);
}

Creación de un nuevo item en una lista:

static void CreateData()
{
	//recupera la informacion del servicio 
	DevPortalHomeDataContext dataContext = new DevPortalHomeDataContext(new Uri("http://servidor/_vti_bin/listdata.svc/"));
        dataContext.Credentials = CredentialCache.DefaultNetworkCredentials; 
	//crea un nuevo item en la lista DemoList
	DemoListItem demoListItem = new DemoListItem();
	demoListItem.Title = "Registro REST";
	dataContext.AddToDemoList(demoListItem);
	dataContext.SaveChanges();
	Console.WriteLine("Registro creado correctamente");
}

Actualización de un item existente en una lista:

static void UpdateData()
{
	//recupera la informacion del servicio 
	DevPortalHomeDataContext dataContext = new DevPortalHomeDataContext(new Uri("http://servidor/_vti_bin/listdata.svc/")); 
        dataContext.Credentials = CredentialCache.DefaultNetworkCredentials; 
	//modifica un item existente en la lista DemoList
	DemoListItem demoListItem = dataContext.DemoList.Where(i => i.Title == "Registro REST").FirstOrDefault();
	demoListItem.Title = "Registro REST - modificado";
	dataContext.UpdateObject(demoListItem);
	dataContext.SaveChanges();
	Console.WriteLine("Registro modificado correctamente");
}

Eliminacion de un item de una lista:

static void DeleteData()
{
	//recupera la informacion del servicio 
	DevPortalHomeDataContext dataContext = new DevPortalHomeDataContext(new Uri("http://servidor/_vti_bin/listdata.svc/")); 
        dataContext.Credentials = CredentialCache.DefaultNetworkCredentials; 
	//borra el item existente en la lista DemoList
	DemoListItem demoListItem = dataContext.DemoList.Where(i => i.Title == "Registro REST - modificado").FirstOrDefault();
	dataContext.DeleteObject(demoListItem);
	dataContext.SaveChanges();
	Console.WriteLine("Registro borrado correctamente");
}

 

Aquí tenéis el resultado de la ejecución de estos métodos:

Para mas información sobre el servicio REST en SharePoint 2010 podéis consultar la pagina de MSDN: Interfaz de REST de SharePoint Foundation.

 

Deja un comentario

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