{"id":1369,"date":"2014-09-09T10:00:17","date_gmt":"2014-09-09T09:00:17","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=1369"},"modified":"2014-09-09T09:29:46","modified_gmt":"2014-09-09T08:29:46","slug":"compartimoss-numero-21","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/","title":{"rendered":"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II"},"content":{"rendered":"<p>Como cada trimestre, ya est\u00e1 disponible el nuevo n\u00famero de la revista digital <a href=\"http:\/\/www.compartimoss.com\" target=\"_blank\">CompartiMOSS<\/a>. En este n\u00famero he tenido la oportunidad\u00a0de participar por partida doble: por un lado, con la publicaci\u00f3n de un art\u00edculo sobre las nuevas <a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-21\/nuevas-apis-para-desarrolladores-en-office-365-parte-ii\" target=\"_blank\">API&#8217;s disponibles en Office 365<\/a> y, por otro lado, con la realizaci\u00f3n de una <a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-21\/entrevista-a-adrian-diaz\" target=\"_blank\">entrevista<\/a> (algo que me sonroja un poco). Adem\u00e1s\u00a0de mi\u00a0participaci\u00f3n\u00a0personal, este n\u00famero es especial por otro motivo:\u00a0la <a href=\"http:\/\/www.encamina.com\/firmamos-un-acuerdo-de-colaboracion-con-la-revista-compartimoss\/\" target=\"_blank\">colaboraci\u00f3n que realiza Encamina con CompartiMOSS<\/a> para albergar la infraestructura de la revista en Azure. Por si estos motivos no fueran suficientes, este n\u00famero est\u00e1 lleno de art\u00edculos de gran calidad, como por ejemplo:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-21\/introduccion-basica-a-las-app-forms\" target=\"_blank\">Introducci\u00f3n b\u00e1sica a las App Forms<\/a> de Ignasi Teba<\/li>\n<li><a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-21\/the-shift-toward-personalized-and-intelligent-collaboration\" target=\"_blank\">The Shift Toward Personalized and Intelligent Collaboration<\/a> de Christian Buckley<\/li>\n<li><span style=\"color: #303030;\"><a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-21\/arquitectura-sharepoint-distribuida-en-azure\" target=\"_blank\">Arquitectura SharePoint distribuida en Azure <\/a>de\u00a0<a href=\"http:\/\/blogs.encamina.com\/sextosharepoint\" target=\"_blank\">Fabian Calvo<span style=\"color: #f90b39;\">\u00a0<\/span><\/a><\/span><\/li>\n<li><span style=\"color: #303030;\"><a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-21\/automatizaciones-para-editar-el-iis-en-sharepoint-2010-2013\">Automatizaciones para editar el IIS en SharePoint 2010\/2013<\/a> de Miguel Tabera<\/span><\/li>\n<\/ul>\n<p>En este post, os dejo el art\u00edculo que he escrito para la revista. \u00a1Espero que os guste!<!--more--><\/p>\n<p style=\"color: #363636;\">Tal y como comentamos en el anterior n\u00famero de CompartiMOSS, estas nuevas API&#8217;s de Office 365 tienen como finalidad facilitarnos nuestros desarrollos para la plataforma de productividad de Microsoft en la nube. Y de la misma forma que se ha desarrollado API REST en SharePoint, se van a implementar servicios REST para acercar Office365 a nuestros desarrollos.<\/p>\n<p style=\"color: #363636;\"><strong>Desgranando las API&#8217;s de Ficheros SharePoint<\/strong><\/p>\n<p style=\"color: #363636;\">La API REST de Ficheros representa un redise\u00f1o del almacenamiento de archivos y gesti\u00f3n de ficheros en SharePoint. La API de Archivos permite acceder y manipular tanto \u00a0el contenido de los documentos de Office como los documentos almacenados en mensajes de correo electr\u00f3nico, calendario, contactos y datos de SharePoint.<\/p>\n<p style=\"color: #363636;\">La API de ficheros tiene como principal utilidad establecer una forma simple y sencilla de acceder a los ficheros y carpetas independientemente de la plataforma donde este utilizada. Esta API contiene acciones sobre dos elementos ficheros y carpetas, para facilitar su uso han establecido 3 entidades: FileSystemItem, File y Folder.<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png\" alt=\"Imagen 1.- Relaci\u00f3n entre las Entidades de la API.\" \/><\/p>\n<ul style=\"color: #363636;\">\n<li>FileSystemItem \u2014 Clase base que encapsula las operaciones b\u00e1sicas y propiedades de las entidades del sistema de archivos.<\/li>\n<li>File \u2014 Tipo de entidad que define los archivos del sistema de archivos. Hereda de FileSystemItem.<\/li>\n<li>Folder \u2014 Tipo de entidad que define las carpetas del sistema de archivos. Hereda de FileSystemItem.<\/li>\n<\/ul>\n<p style=\"color: #363636;\">La definici\u00f3n de las entidades es la siguiente:<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>FileSystemItem:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\"><strong>Nombre<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Tipo<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Descripci\u00f3n<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Creaci\u00f3n<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Update<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Null<\/strong><\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">Id<\/td>\n<td class=\"ms-rteTable-default\">Guid<\/td>\n<td class=\"ms-rteTable-default\">Id del Item<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">Etag<\/td>\n<td class=\"ms-rteTable-default\">String<\/td>\n<td class=\"ms-rteTable-default\">ETag del item<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">Name<\/td>\n<td class=\"ms-rteTable-default\">String<\/td>\n<td class=\"ms-rteTable-default\">Nombre del item<\/td>\n<td class=\"ms-rteTable-default\">Requerido<\/td>\n<td class=\"ms-rteTable-default\">Si<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">Url<\/td>\n<td class=\"ms-rteTable-default\">String<\/td>\n<td class=\"ms-rteTable-default\">Path Absoluto<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">TimeLastModified<\/td>\n<td class=\"ms-rteTable-default\">Fecha\/Hora<\/td>\n<td class=\"ms-rteTable-default\">Hora de Modificado<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">CreatedBy<\/td>\n<td class=\"ms-rteTable-default\">Usuario<\/td>\n<td class=\"ms-rteTable-default\">Usuario<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">TimeCreated<\/td>\n<td class=\"ms-rteTable-default\">Fecha\/Hora<\/td>\n<td class=\"ms-rteTable-default\">Fecha de Creaci\u00f3n<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">LastModifiedBy<\/td>\n<td class=\"ms-rteTable-default\">Usuario<\/td>\n<td class=\"ms-rteTable-default\">Usuario que ha modificado<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">Size<\/td>\n<td class=\"ms-rteTable-default\">Entero<\/td>\n<td class=\"ms-rteTable-default\">N\u00famero de bits del documento<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul style=\"color: #363636;\">\n<li><strong>File<\/strong>: Tiene las mismas propiedades de FileSystemItem.<\/li>\n<li><strong>Folder:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\"><strong>Nombre<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Tipo<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Descripci\u00f3n<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Creaci\u00f3n<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Update<\/strong><\/td>\n<td class=\"ms-rteTable-default\"><strong>Null<\/strong><\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">Children<\/td>\n<td class=\"ms-rteTable-default\">Collecci\u00f3n de FileSystemItem<\/td>\n<td class=\"ms-rteTable-default\">Ficheros y carpetas que est\u00e1n incluidas dentro de esta carpeta<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">Si<\/td>\n<td class=\"ms-rteTable-default\">si<\/td>\n<\/tr>\n<tr>\n<td class=\"ms-rteTable-default\">ChildrenCount<\/td>\n<td class=\"ms-rteTable-default\">Entero<\/td>\n<td class=\"ms-rteTable-default\">N\u00famero de ficheros que tiene esa carpeta<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<td class=\"ms-rteTable-default\">No<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul style=\"color: #363636;\">\n<li><strong>Operaciones con ficheros:<\/strong><\/li>\n<\/ul>\n<p style=\"color: #363636;\">Tenemos las siguientes endpoints disponibles:<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener todos los ficheros y carpetas en la biblioteca por defecto:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener el contenido del fichero:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files(&lt;file_path&gt;)\/download<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">La devoluci\u00f3n de esta petici\u00f3n es el propio fichero.<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener las propiedades del fichero:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files(&lt;file_path&gt;)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener la propiedad del fichero:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files(&lt;file_path&gt;)\/&lt;property_name&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul style=\"color: #363636;\">\n<li><strong>Crear un fichero:\u00a0<\/strong>A la hora de creaci\u00f3n de un fichero tenemos dos opciones: crear un fichero en blanco o crear un fichero con contenido. Para crear un fichero en blanco tendremos que enviar la siguiente estructura JSON en el body de la petici\u00f3n Ajax.<\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">{<\/p>\n<p>&#8216;__metadata&#8217;:<\/p>\n<p>{<\/p>\n<p>&#8216;type&#8217;:&#8217;MS.FileServices.File&#8217;<\/p>\n<p>},<\/p>\n<p>Name : &#8216;&lt;FileName&gt;&#8217;<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">Realizaremos la siguiente petici\u00f3n:<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">POST..\/_api\/files<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\">Para crear un fichero con contenido tendremos que enviar en el cuerpo de la solicitud enviaremos un vector de bits \u00a0y realizar la siguiente petici\u00f3n:<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">POST ..\/_api\/files\/Add(string name, boolean overwrite)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">Si ha ido todo de forma correcta la API nos devuelve las propiedades del fichero reci\u00e9n creado.<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Actualizar el contenido de un fichero:\u00a0<\/strong>Para actualizar el contenido de un fichero, basta con realizar la petici\u00f3n anterior, pero en el body enviamos el contenido modificado.<\/li>\n<li><strong>Eliminar un fichero<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">DELETE ..\/_api\/files(&lt;file_path&gt;)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\"><strong>Operaciones con carpetas<\/strong><\/p>\n<p style=\"color: #363636;\">Disponemos de las siguientes opciones:<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Obtenemos las propiedades de la carpeta:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files(&lt;folder_path&gt;)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener una propiedad de una carpeta:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files(&lt;folder_path&gt;)\/&lt;property_name&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener el contenido de una subcarpeta:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files(&lt;folder_path)&gt;\/SubCarpeta<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Crear una carpeta:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">POST..\/_api\/files<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Eliminar una carpeta<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">DELETE ..\/_api\/files(&lt;folder_path&gt;)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Mover un fichero:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">POST ..\/_api\/files(&lt;file_path&gt;)\/MoveTo(&lt;file_path&gt;, overwrite=true)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Copiar un fichero:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">POST ..\/_api\/files(&lt;file_path&gt;)\/CopyTo(&lt;file_path&gt;, overwrite=true)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\"><span lang=\"ES-UY\"><strong>Nota<\/strong><\/span><span lang=\"ES-UY\">:<\/span>\u00a0Para las opciones Mover un fichero y Copiar un fichero, la biblioteca destino no puede ser distinta que la biblioteca donde est\u00e1 el fichero.<\/p>\n<p style=\"color: #363636;\"><strong>Operaciones en la Consulta<\/strong><\/p>\n<p style=\"color: #363636;\">Tanto en las operaciones de ficheros como en las carpetas podemos a\u00f1adir diversos par\u00e1metros en la consulta a realizar como son indicar el n\u00famero de \u00edtems que nos devuelve la consulta, como establecer el orden en el que se devuelve la petici\u00f3n. Para ello realizaremos las peticiones de la siguiente forma:<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>$orderby:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files?$orderby=&lt;orderbyfield&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<ul style=\"color: #363636;\">\n<li><strong>$top:<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET ..\/_api\/files?&amp;top=&lt;row_limit&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\"><strong>Desgranando la API Graph de AzureActive Directory<\/strong><\/p>\n<p style=\"color: #363636;\">La API Graph de Azure Active Directory proporciona acceso program\u00e1tico a Azure AD a trav\u00e9s de los extremos de la API de REST. Las aplicaciones pueden usar la API Graph para hacer operaciones de creaci\u00f3n, lectura, actualizaci\u00f3n y eliminaci\u00f3n (CRUD) en objetos y datos de directorio. Por ejemplo, la API Graph permite realizar las siguientes operaciones comunes en un objeto de usuario:<\/p>\n<ul style=\"color: #363636;\">\n<li>Crear un usuario.<\/li>\n<li>Obtener las propiedades detalladas de un usuario.<\/li>\n<li>Actualizar las propiedades de un usuario, como su ubicaci\u00f3n, n\u00famero de tel\u00e9fono, o cambiar su contrase\u00f1a.<\/li>\n<li>Consultar la pertenec\u00eda a grupos de un usuario.<\/li>\n<li>Deshabilitar la cuenta de un usuario o eliminarla por completo.<\/li>\n<\/ul>\n<p style=\"color: #363636;\"><strong>Operaciones con usuarios<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Crear usuario:<\/strong><\/li>\n<\/ul>\n<p style=\"color: #363636;\">Para la creaci\u00f3n de un usuario realizaremos la siguiente petici\u00f3n POST:<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">https:\/\/graph.windows.net\/mytenantdomain\/users?api-version=2013-04-05<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\">Donde tendremos que sustituir mytenantdomain por el nombre de nuestro dominio. En esa petici\u00f3n tendremos que enviar en el cuerpo de la solicitud un formato JSON como el siguiente:<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">{<\/p>\n<p>\u00abaccountEnabled\u00bb: true,<\/p>\n<p>\u00abdisplayName\u00bb: \u00abAdrian D\u00edaz\u00bb,<\/p>\n<p>\u00abmailNickname\u00bb: \u00abadiaz\u00bb,<\/p>\n<p>\u00abpasswordProfile\u00bb: { \u00abpassword\u00bb : \u00abxxxxx\u00bb, \u00abforceChangePasswordNextLogin\u00bb: false },<\/p>\n<p>\u00abuserPrincipalName\u00bb: \u00abadiaz@encamina.com\u00bb<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<ul style=\"color: #363636;\">\n<li><strong>Obtener usuario:\u00a0<\/strong>Para obtener el usuario podremos utilizar cualquiera de las siguientes uris, el par\u00e1metro de la de la cadena de consulta de api-version es obligatorio.<\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">https:\/\/graph.windows.net\/mytenantdomain\/users?api-version=2013-04-05<\/p>\n<p>https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;objectId&gt;?api-version=2013-04-05<\/p>\n<p>https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;userPrincipalName&gt;?api-version=2013-04-05<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\"><span lang=\"ES-UY\"><strong>Nota:<\/strong><\/span>\u00a0El URI sin una especificaci\u00f3n de usuario devolver\u00e1 todos los usuarios en el directorio. Para obtener un usuario espec\u00edfico, especifica la propiedad objectId o userPrincipalName del usuario en el URI de solicitud<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Actualizar usuario:\u00a0<\/strong>Para actualizar un usuario disponemos de dos opciones bien indicando el ObjettID o el User Principal Name<\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">PATCH https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;objectId&gt;?api-version=2013-04-05<\/p>\n<p>PATCH https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;userPrincipalName&gt;?api-version=2013-04-05<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\">En el cuerpo de la solicitud enviaremos un JSON con las propiedades que deseamos modificar. Por ejemplo para modificar el departamento y la ubicaci\u00f3n del usuario seria de la siguiente forma:<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">{<\/p>\n<p>\u00abdepartment\u00bb:\u00bbDevelopment\u00bb,<\/p>\n<p>\u00abusageLocation\u00bb:\u00bbES\u00bb<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul style=\"color: #363636;\">\n<li><strong>Eliminar usuario<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">DELETE https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;objectId&gt;?api-version=2013-04-05<\/p>\n<p>DELETE https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;userPrincipalName&gt;?api-version=2013-04-05<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\">Si la operaci\u00f3n ha ido correctamente la API REST nos devolver\u00e1 un c\u00f3digo de estado 204 Sin Contenido<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Obtener grupos a los que pertenece el usuario<\/strong><\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">GET\u00a0<a style=\"color: #663399;\" href=\"https:\/\/graph.windows.net\/mytenantdomain\/users\/%3CobjectId%7C%7CuserPrincipalName%3E\/$links\/directReports?api-version=2013-04-05\">https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;objectId||userPrincipalName&gt;\/$links\/directReports?api-version=2013-04-05<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">Para recuperar las personas que dependen directamente de un contacto, especifica \u00abcontacts\u00bb como el conjunto de recursos. Tambi\u00e9n puedes especificar \u00abdirectoryObjects\u00bb como el conjunto de recursos en el URI de solicitud; por ejemplo, https:\/\/graph.windows.net\/contoso.onmicrosoft.com\/directoryObjects\/5e624f44-d38d-4943-b07c-2bad078f52ff\/directReports?api-version=2013-04-05. Solo se puede usar objectId cuando el conjunto de recursos es \u00abcontacts\u00bb o \u00abdirectoryObjects\u00bb.<\/p>\n<ul style=\"color: #363636;\">\n<li><strong>Resetear la contrase\u00f1a del usuario.\u00a0<\/strong>Tendremos que realizar la siguiente petici\u00f3n:<\/li>\n<\/ul>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">PATCH https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;objectId&gt;?api-version=2013-04-05<\/p>\n<p>PATCH<\/p>\n<p>https:\/\/graph.windows.net\/mytenantdomain\/users\/&lt;userPrincipalName&gt;?api-version=2013-04-05<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\"><strong>\u00a0<\/strong><\/p>\n<p style=\"color: #363636;\">Dentro del cuerpo de la solicitud de la petici\u00f3n tendremos que enviar un JSON donde tenga una propiedad \u00abpasswordProfile\u00bb. Esta propiedad debe de tener un valor v\u00e1lido que contiene una contrase\u00f1a que cumple la directiva de complejidad de contrase\u00f1as del inquilino.<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">{<\/p>\n<p>\u00abpasswordProfile\u00bb:<\/p>\n<p>{<\/p>\n<p>\u00abpassword\u00bb:\u00bbTest123456&#8243;,<\/p>\n<p>\u00abforceChangePasswordNextLogin\u00bb:false<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\"><span lang=\"ES-UY\"><strong>Nota:<\/strong><\/span>\u00a0En todas las peticiones hay que enviar dentro de la cabecera la Autentificaci\u00f3n, que no es m\u00e1s que un token de portador emitido por el Control de acceso de Azure. Este token se genera en cuanto la aplicaci\u00f3n que estamos implementando se autentifique contra el Active Directory.<\/p>\n<p style=\"color: #363636;\"><strong>Ejemplo: Utilizar estas API&#8217;s en una aplicaci\u00f3n Windows 8.1<\/strong><\/p>\n<p style=\"color: #363636;\"><strong>Requisitos Previos<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li>Visual Studio 2013.<\/li>\n<li>Descargar Office 365 API Tools bien directamente desde esta direcci\u00f3n\u00a0<a style=\"color: #663399;\" href=\"http:\/\/visualstudiogallery.msdn.microsoft.com\/7e947621-ef93-4de7-93d3-d796c43ba34f\"><span lang=\"ES\">http:\/\/visualstudiogallery.msdn.microsoft.com\/7e947621-ef93-4de7-93d3-d796c43ba34f<\/span><\/a>\u00a0o directamente desde Nuget.<\/li>\n<\/ul>\n<p style=\"color: #363636;\"><strong>Manos a la obra<\/strong><\/p>\n<p style=\"color: #363636;\">Una vez tenemos instalada las Office 365 API Tools, abrimos Visual Studio, creamos un proyecto Aplicaciones de la Tienda-&gt; Aplicaciones Windows-&gt; Aplicaci\u00f3n Vac\u00eda. A continuaci\u00f3n, a nuestro proyecto le vamos a a\u00f1adir la conexi\u00f3n a los servicios REST de API 365. Para a\u00f1adirlos, nos dirigimos al Explorador de soluciones, Agregar Servicio conectado tal y como se muestra en la siguiente imagen:<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen2.png\" alt=\"Imagen 2.- A\u00f1adir Servicio Conectado a nuestra APP MVC\" \/><\/p>\n<p style=\"color: #363636;\"><span style=\"color: #000000;\">Aparecer\u00e1 el Administrador de servicios. Selecciona Office365 e introduce el login de tu cuenta. Una vez autentificado contra el Tenant de Office365 podr\u00e1s ver una lista de 6 servicios: Calendar, Contacts, Mail, My Files, Sites y Users\/Groupst. Inicialmente, la columna Permisos a la derecha de cada servicio estar\u00e1 vac\u00eda. En nuestro ejemplo vamos a seleccionar primero My Files y posteriormente Users\/Groups. Una vez seleccionado pulsamos Aceptar (Imagen 2).<\/span><\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen3.png\" alt=\"Imagen 3.- Administrador de Servicios.\" \/><\/p>\n<p style=\"color: #363636;\">Dado que no est\u00e1n establecidos los permisos, al tratarse de una versi\u00f3n preview, estos se solicitan por pantalla. En nuestro caso, vamos a otorgar todos los permisos para poder ver todas las opciones que vienen incluidas y que hemos visto en este art\u00edculo.<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen4.png\" alt=\"Imagen 4.- Permisos sobre las API's de My Files.\" \/><\/p>\n<p style=\"color: #363636;\">Una vez hemos a\u00f1adido la API a nuestro proyecto revisamos la estructura de nuestro proyecto que quedar\u00e1 de la siguiente forma:<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen5.png\" alt=\"Imagen 5.- Soluci\u00f3n Proyecto Office365W8CompartiMOSS.\" \/><\/p>\n<p style=\"color: #363636;\">Tal y como hemos remarcado en la imagen, se han a\u00f1adido dos carpetas: Common y Office365. Adem\u00e1s de una serie de archivos XAML donde est\u00e1n las pantallas para poder comprobar la potencia de estas APIs.<\/p>\n<p style=\"color: #363636;\">Si analizamos los ficheros que se han a\u00f1adido:<\/p>\n<ul style=\"color: #363636;\">\n<li>Office365ServiceInfo: En esta clase disponemos del modelo que se utiliza para obtener la informaci\u00f3n para cada una de las APIs, para el caso de Active Directory tendremos el siguiente m\u00e9todo:<\/li>\n<\/ul>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">public static async Task&lt;Office365ServiceInfo&gt; GetActiveDirectoryServiceInfoAsync()<\/p>\n<p style=\"color: #363636;\">Devuelve informaci\u00f3n sobre el servicio de Active Directory, incluida su token de acceso.\u00a0 En caso de error, este m\u00e9todo se mostrar\u00e1 un mensaje de error al usuario, y devolver\u00e1 una instancia de Office365ServiceInfo cuya propiedad HasValidAccessToken se establece en \u00abfalse\u00bb.<\/p>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">En el caso de SharePoint tendremos el siguiente m\u00e9todo:<\/p>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">public static async Task&lt;Office365ServiceInfo&gt; GetSharePointOneDriveServiceInfoAsync()<\/p>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">Este m\u00e9todo devuelve informaci\u00f3n sobre el servicio de SharePoint, incluyendo su token de acceso en cach\u00e9. Para cada SharePoint, el ID de recurso y la API ser\u00e1 diferente para cada inquilino. En caso de error, al igual que en el servicio de Active Directory se muestra un mensaje de error y devolver\u00e1\u00a0 una instancia de Office365ServiceInfo instancia cuya propiedad HasValidAccessToken se establece en \u00abfalse\u00bb.<\/p>\n<p style=\"color: #363636;\">\n<ul style=\"color: #363636;\">\n<li>Office365Helper: Implementa una clase para ayudarnos en nuestros desarrollos. Entre las funciones que est\u00e1n implementadas:\u00a0 ClearCache, GetToken, SaveInCache, etc.<\/li>\n<li>ActiveDirectoryApiSample y MyFilesApiSample: En estas clases est\u00e1n las funciones que llaman a la API REST correspondiente.<\/li>\n<li>Ficheros XAML: En estos ficheros est\u00e1n la representaci\u00f3n de los datos que nos env\u00edan las API&#8217;s correspondientes.<\/li>\n<\/ul>\n<p style=\"color: #363636;\">Una vez analizado el c\u00f3digo, en la p\u00e1gina principal de nuestra aplicaci\u00f3n (MainPage.xaml) tendremos que a\u00f1adir la funcionalidad para poder ir a las ventanas que nos ha descargado las herramientas tools de Office 365.<\/p>\n<p style=\"color: #363636;\">En primer lugar modificaremos el XAML de MainPage.xam a\u00f1adiendo el siguiente c\u00f3digo dentro del GRID que hay por defecto:<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">&lt;TextBlock Grid.Row=\u00bb0&#8243; x:Name=\u00bbpageTitle\u00bb Text=\u00bbDemo Office 365&#8243;<\/p>\n<p>IsHitTestVisible=\u00bbfalse\u00bb TextWrapping=\u00bbNoWrap\u00bb VerticalAlignment=\u00bbBottom\u00bb Margin=\u00bb50,0,30,40&#8243;\/&gt;<\/p>\n<p>&lt;StackPanel Grid.Row=\u00bb1&#8243;&gt;<\/p>\n<p>&lt;TextBlock TextWrapping=\u00bbWrap\u00bb Margin=\u00bb30,30,30,50&#8243; FontSize=\u00bb20&#8243;\u00a0 HorizontalAlignment=\u00bbCenter\u00bb&gt;<\/p>\n<p>APIS Office 365 by CompartIMOSS<\/p>\n<p>&lt;\/TextBlock&gt;<\/p>\n<p>&lt;Grid Margin=\u00bb30,0,10,30&#8243;&gt;<\/p>\n<p>&lt;Grid.ColumnDefinitions&gt;<\/p>\n<p>&lt;ColumnDefinition Width=\u00bb*\u00bb \/&gt;<\/p>\n<p>&lt;ColumnDefinition Width=\u00bb*\u00bb \/&gt;<\/p>\n<p>&lt;ColumnDefinition Width=\u00bb*\u00bb \/&gt;<\/p>\n<p>&lt;\/Grid.ColumnDefinitions&gt;<\/p>\n<p>&lt;StackPanel Grid.Column=\u00bb0&#8243; Margin=\u00bb20,20,20,20&#8243;&gt;<\/p>\n<p>&lt;Button x:Name=\u00bbbuttonPeople\u00bb FontSize=\u00bb30&#8243; Click=\u00bbButtonPeople_OnClick\u00bb&gt;People&lt;\/Button&gt;<\/p>\n<p>&lt;TextBlock TextWrapping=\u00bbWrap\u00bb Margin=\u00bb0,30,0,0&#8243; FontSize=\u00bb20&#8243; Text=\u00bbObtenermos los contactos del Active Directory.\u00bb \/&gt;<\/p>\n<p>&lt;\/StackPanel&gt;<\/p>\n<p>&lt;StackPanel Grid.Column=\u00bb1&#8243; Margin=\u00bb20,20,20,20&#8243;&gt;<\/p>\n<p>&lt;Button x:Name=\u00bbbuttonDocuments\u00bb FontSize=\u00bb30&#8243; Click=\u00bbButtonDocuments_OnClick\u00bb&gt;Documents&lt;\/Button&gt;<\/p>\n<p>&lt;TextBlock TextWrapping=\u00bbWrap\u00bb Margin=\u00bb0,30,0,0&#8243; FontSize=\u00bb20&#8243; Text=\u00bbObtenemos los ficheros de SharePoint.\u00bb \/&gt;<\/p>\n<p>&lt;\/StackPanel&gt;<\/p>\n<p>&lt;\/Grid&gt;<\/p>\n<p>&lt;\/StackPanel&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">A continuaci\u00f3n implementamos la funcionalidad de los dos botones. La funcionalidad de estos botones es muy simple, navegar\u00e1 a la opci\u00f3n de la API seleccionada.<\/p>\n<table class=\"ms-rteTable-default\" style=\"color: #363636;\" width=\"100%\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td class=\"ms-rteTable-default\">private void ButtonPeople_OnClick(object sender, RoutedEventArgs e)<\/p>\n<p>{<\/p>\n<p>this.Frame.Navigate(typeof(ActiveDirectorySamplePage));<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>private void ButtonDocuments_OnClick(object sender, RoutedEventArgs e)<\/p>\n<p>{<\/p>\n<p>this.Frame.Navigate(typeof(SharePointSamplePage));<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"color: #363636;\">\n<p style=\"color: #363636;\">Una vez a\u00f1adido estas modificaciones, compilamos y si todo ha ido bien visualizaremos la siguiente pantalla:<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen6.png\" alt=\"Imagen 6.- Ejemplo de la Aplicaci\u00f3n Implementada\" \/><\/p>\n<p style=\"color: #363636;\">Al pulsar sobre cada opci\u00f3n: People o Documents, se mostrar\u00e1n las distintas vistas a\u00f1adidas donde visualizamos la informaci\u00f3n solicitada a la API correspondiente. Una vez pulsamos sobre cualquier opci\u00f3n, en primer lugar, nos pedir\u00e1 autenticaci\u00f3n sobre Office365 para lo cual se muestra una pantalla de login como la siguiente:<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen7.png\" alt=\"Imagen 7.- Autenticaci\u00f3n con Office 365.\" \/><\/p>\n<p style=\"color: #363636;\">Una vez autentificado visualizaremos los datos solicitados a la API correspondiente.<\/p>\n<p style=\"color: #363636;\"><img decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen8.png\" alt=\"Imagen 8.- Resultado del Perfil de usuario.\" \/><\/p>\n<p style=\"color: #363636;\"><strong>Conclusi\u00f3n<\/strong><\/p>\n<p style=\"color: #363636;\">Office 365 es un producto clave dentro de la estrategia que est\u00e1 trazando Satya Nadella para hacer competencia a Google y Apple. Dentro de esta estrategia Microsoft est\u00e1 haciendo especial hincapi\u00e9 en el acceso desde cualquier dispositivo y en la productividad. Y en estos dos puntos estas nuevas API&#8217;s tienen gran importancia, primero porque Office 365 es la principal herramienta de productividad y segundo porque est\u00e1n implementando herramientas para poder hacer uso de Office 365 desde cualquier plataforma\/dispositivo. Otro de las grandes ventajas que llevan estas API&#8217;s es que facilitan entornos h\u00edbridos. El poder hacer uso de esta API en nuestros desarrollos pueden facilitar a las empresas a migrar determinados servicios al Cloud.<\/p>\n<p style=\"color: #363636;\"><strong>Referencias:<\/strong><\/p>\n<ul style=\"color: #363636;\">\n<li><a style=\"color: #663399;\" href=\"http:\/\/msdn.microsoft.com\/EN-US\/library\/office\/dn605900(v=office.15).aspx\"><span lang=\"ES-UY\">http:\/\/msdn.microsoft.com\/EN-US\/library\/office\/dn605900(v=office.15).aspx<\/span><\/a>\u00a0<a style=\"color: #663399;\" href=\"http:\/\/blogs.msdn.com\/b\/officeapps\/archive\/2014\/03\/12\/announcing-office-365-api-tools-for-visual-studio-preview.aspx\"><span lang=\"ES\">http:\/\/blogs.msdn.com\/b\/officeapps\/archive\/2014\/03\/12\/announcing-office-365-api-tools-for-visual-studio-preview.aspx<\/span><\/a><\/li>\n<li><a style=\"color: #663399;\" href=\"http:\/\/msdn.microsoft.com\/es-es\/library\/azure\/hh974476.aspx\"><span lang=\"ES\">http:\/\/msdn.microsoft.com\/es-es\/library\/azure\/hh974476.aspx<\/span><\/a><\/li>\n<\/ul>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Como cada trimestre, ya est\u00e1 disponible el nuevo n\u00famero de la revista digital CompartiMOSS. En este n\u00famero he tenido la oportunidad\u00a0de participar por partida doble: por un lado, con la publicaci\u00f3n de un art\u00edculo sobre las nuevas API&#8217;s disponibles en &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,113],"tags":[],"class_list":["post-1369","post","type-post","status-publish","format-standard","hentry","category-desarrollo","category-office-365-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II - Desarrollando sobre SharePoint<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"Como cada trimestre, ya est\u00e1 disponible el nuevo n\u00famero de la revista digital CompartiMOSS. En este n\u00famero he tenido la oportunidad\u00a0de participar por partida doble: por un lado, con la publicaci\u00f3n de un art\u00edculo sobre las nuevas API&#8217;s disponibles en &hellip; Continue reading &rarr;\" \/>\n<meta name=\"twitter:image\" content=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II\",\"datePublished\":\"2014-09-09T09:00:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/\"},\"wordCount\":2640,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero21\\\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\\\/imagen1.png\",\"articleSection\":[\"desarrollo\",\"Office 365\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/\",\"name\":\"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero21\\\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\\\/imagen1.png\",\"datePublished\":\"2014-09-09T09:00:17+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-numero-21\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero21\\\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\\\/imagen1.png\",\"contentUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero21\\\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\\\/imagen1.png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II - Desarrollando sobre SharePoint","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/","twitter_card":"summary_large_image","twitter_title":"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II - Desarrollando sobre SharePoint","twitter_description":"Como cada trimestre, ya est\u00e1 disponible el nuevo n\u00famero de la revista digital CompartiMOSS. En este n\u00famero he tenido la oportunidad\u00a0de participar por partida doble: por un lado, con la publicaci\u00f3n de un art\u00edculo sobre las nuevas API&#8217;s disponibles en &hellip; Continue reading &rarr;","twitter_image":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II","datePublished":"2014-09-09T09:00:17+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/"},"wordCount":2640,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png","articleSection":["desarrollo","Office 365"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/","name":"CompartiMOSS N\u00famero 21: Nuevas API\u2019s para desarrolladores en Office 365 Parte II - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png","datePublished":"2014-09-09T09:00:17+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-numero-21\/#primaryimage","url":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png","contentUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero21\/Nuevas-API-para-desarrolladores-en-Office-365-Parte-II\/imagen1.png"},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=1369"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1369\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=1369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=1369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=1369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}