1. ¡SharePoint 2013 como
plataforma de desarrollo:
Novedades!
Juan Carlos González (@jcgm1978)
MVP SharePoint Server
http://geeks.ms/blogs/ciin
jgonzalez@gruposodercan.es
2. Agenda
Modelo de Objetos en Cliente (CSOM)
Programación con el CSOM
API REST de SharePoint 2013
Operaciones CRUD con Sitios, Listas y Elementos de
Lista
3. Modelo de Objetos en
Cliente
En SharePoint 2010:
_vti_bin/client.svc
Servidor
Execute
Cliente Query
Microsoft.SharePoint
Sabor
.Client.Silverlight.dll Sabor
Sabor .NET
Silverlight JavaScript
Microsoft.SharePoint
.Client.dll SP.js
Código personalizado
4. Modelo de Objetos en
Cliente
En SharePoint 2013:
Se extiende el servicio client.svc con capacidades REST:
Se soporta acceso directo al servicio desde clients REST
Acepta peticiones HTTP GET, PUT y POST
Implementado de acuerdo al protocolo OData
Nuevas APIs:
Para interactuar con servicios: Search Taxonomy Feeds Publishing Sharing Workflow E-
Discovery IRM Analytics Business Data
Para aplicaciones Windows Phone
5. Modelo de Objetos en
Cliente
Arquitectura de la API remota de SharePoint 2013:
_api es un Nuevo alias para _vti_bin/client.svc
Servidor
Execute
Cliente OData Query
Sabor Sabor Sabor
.NET Silverlight JavaScript
Código personalizado
6. Modelo de Objetos en
Cliente
¿Qué pasa con ListData.svc?
Sigue estando disponible
Se garantiza compatibilidad hacía atrás: para migración de aplicaciones
en cliente
Para nuevas aplicaciones, no se debería usar
7. Programación con el CSOM
Código JavaScript
Navegador
Respuesta JSON
MO JavaScript MO
Petición XML Servidor
Proxy
Client.svc
Respuesta JSON (_api)
Proxy
Petición XML BD
MO manejado
contenidos
Cliente manejado
Código C# o VB.NET SharePoint
8. Programación con el CSOM
En SharePoint Foundation
Sin cambios significativos, más allá del soporte REST
Se ha añadido el soporte REST a la API existente
En SharePoint Server
Se han añadido nuevas APIs para interactuar con servicios
9. Programación con el CSOM
Ejemplo – Uso del servicio de traducciones:
using (MO_Cliente.ClientContext ctx =
new MO_Cliente.ClientContext( "http://c4431163311/"))
{
Console.WriteLine( "Extensiones de archivos soportadas");
IEnumerable<string> ieFileExtensions =
MO_TRCliente.TranslationJob.EnumerateSupportedFileExtensions(ctx);
ctx.ExecuteQuery();
foreach (string item in ieFileExtensions)
{
Console.Write(item + ", ");
}
Console.WriteLine();
Console.WriteLine("Idiomas soportados");
IEnumerable<string> ieIdiomas=
MO_TRCliente.TranslationJob.EnumerateSupportedLanguages(ctx);
ctx.ExecuteQuery();
foreach (string item in ieIdiomas)
{
Console.Write(item + ", ");
}
}
10. Programación con el CSOM
Ejemplo – Uso del servicio de búsqueda:
using (ClientContext ctx = new ClientContext("http://spfes"))
{
KeywordQuery query = new KeywordQuery(ctx);
query.QueryText = "SharePoint";
SearchExecutor searchExecutor = new SearchExecutor(ctx);
ClientResult<ResultTableCollection> rcc =
searchExecutor.ExecuteQuery(query);
ctx.ExecuteQuery();
foreach (var rccRow in rcc.Value[0].ResultRows)
{
Console.WriteLine("Titulo: " + rccRow["Title"] + " - Ruta: " +
rccRow["Path"] + " - Fecha: " + rccRow["Write"]);
}
}
11. API REST de SharePoint 2013
¿Por qué REST?
+ simple y sencillo de usar:
vs Servicos Web clásicos (SOAP)
Mayor productividad cuando se usa JavaScript y jQuery
Los resultados se pueden devolver en formatos JSON y ATOM
Minimiza la barrera de entrada a diferentes tipos de clientes potenciales
Cada consulta se envía con una URL única
12. API REST de SharePoint 2013
URLs REST en SharePoint 2013:
Las URLs para el CSOM pueden ir a través de _api
Se elimina la referencia a client.svc de la URL
Se puede reemplazar la URL:
http://contososerver/_vti_bin/client.svc/web
Por http://consotoserver/_api/web
13. API REST de SharePoint 2013
Mapeo de objetos a recursos:
Ejemplos de URLs REST apuntando a sitios de SharePoint:
_api/web/lists
_api/web/lists/getByTitle(„Announcements‟)
_api/web/getAvailableWebTemplates(lcid=1033)
Ejemplos de URLs REST apuntado a servicios de SharePoint:
Servicio de Traducción:
http://<servername>/_api/TranslationJob.EnumerateSupportedLanguages
http://<servername>/_api/TranslationJob.EnumerateSupportedFileEXtensions
Servicio de búsquedas:
http://<servername>/_api/search/query?querytext='Test'
14. API REST de SharePoint 2013
Consultas REST desde código manejado:
Usar HttpWebRequest y HttpWebResponse
Consultar el XML usando XDocument.Descendants
15. API REST de SharePoint 2013
Consultas REST desde código manejado:
Para servicios la misma filosofía
string sURLConsulta = "http://c4431163311" +
"/_api/TranslationJob.EnumerateSupportedLanguages";
Uri uRESTService = new Uri(sURLConsulta);
//Petición REST
HttpWebRequest hwrPeticion =
(HttpWebRequest)WebRequest.Create(uRESTService);
hwrPeticion.Credentials =
CredentialCache.DefaultNetworkCredentials;
hwrPeticion.Accept = "application/atom+xml";
//Envío de la petición al servidor
HttpWebResponse hwrRespuesta =
(HttpWebResponse)hwrPeticion.GetResponse();
StreamReader srReader =
new StreamReader(hwrRespuesta.GetResponseStream());
//Procesando la respuesta
XDocument xdDoc =
XDocument.Load(hwrRespuesta.GetResponseStream());
XNamespace xnEspacioNombres =
"http://schemas.microsoft.com/ado/2007/08/dataservices";
Console.WriteLine(xdDoc.ToString());
var eIdiomas = xdDoc.Descendants(xnEspacioNombres+ "element");
//….
16. API REST de SharePoint 2013
Las operaciones CRUD requieren el uso de Form Digest:
Es un “valor especial” creado por medio de criptografía
Se utiliza para proteger contra ataques de tipo “Replay attack”
Las páginas de SharePoint disponen de un control que mantiene “Form
Digest”
Los clientes de servicios web tienen que adquirir de forma separada “Form
Digest”. Por ejemplo, se puede hacer a través de _vti_bin/sites.asmx
17. API REST de SharePoint 2013
Creación de elementos de SharePoint:
Para crear una lista, es necesario:
Parsear la URL que apunta a la colección de listas: _api/web/lists
Añadir una cabecera X-RequestDigest que incluye el valor de “Form Digest”
Fijar el método HTTP a POST
Crear el documento XML que contiene la información de la lista a crear
18. API REST de SharePoint 2013
Creación de elementos de SharePoint:
//The body of the REST request is ASCII encoded and inserted into the request stream.
string listPostBody = "{'__metadata':{'type':'SP.List'}, 'Title':'" + newListName + "', 'BaseTemplate': 100}";
byte[] listPostData = System.Text.Encoding.ASCII.GetBytes(listPostBody);
HttpWebRequest listRequest =
(HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + "/_api/lists");
listRequest.Method = "POST";
listRequest.ContentLength = listPostBody.Length;
listRequest.ContentType = "application/json;odata=verbose";
listRequest.Accept = "application/json;odata=verbose";
listRequest.Headers.Add("Authorization", "Bearer " + accessToken);
listRequest.Headers.Add("X-RequestDigest", formDigest);
Stream listRequestStream = listRequest.GetRequestStream();
listRequestStream.Write(listPostData, 0, listPostData.Length);
listRequestStream.Close();
HttpWebResponse listResponse = (HttpWebResponse)listRequest.GetResponse();
20. Aprende de los expertos
Descárgate CompartiMOSS:
http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
21. Descuentos Campus MVP
10% de descuento
en todos nuestros cursos y libros hasta el 31 de
diciembre
Introduce el cupón PECIIN12SN al realizar tu
compra
en nuestra tienda online.
22. Prueba SharePoint a tope
CloudShare:
http://www.cloudshare.com/
Disponen de varias plantillas de SharePoint 2013 listas para probar
23. Nos vemos en los foros
Foro de desarrollo:
http://social.msdn.microsoft.com/Forums/es-es/mossdeves/threads
Foro de IT
http://social.technet.microsoft.com/Forums/es-ES/mosses/threads
Foro de Office 365:
http://community.office365.com/es-es/default.aspx