{"id":1497,"date":"2015-03-03T11:00:34","date_gmt":"2015-03-03T10:00:34","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=1497"},"modified":"2015-03-03T10:00:52","modified_gmt":"2015-03-03T09:00:52","slug":"office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/","title":{"rendered":"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova"},"content":{"rendered":"<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1504\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png\" alt=\"main\" width=\"600\" height=\"379\" \/><\/a><br \/>\nLa pasada semana tuve la fortuna de <strong>participar como ponente en la 1\u00aa DotNet Conference<\/strong> que se realiz\u00f3 en Alcal\u00e1 de Henares. En la sesi\u00f3n que impart\u00ed, mostr\u00e9 c\u00f3mo las nuevas API&#8217;s de Office 365 se pueden utilizar en cualquier dispositivo y de diversas formas. En este post, voy a profundizar un poco en<strong> c\u00f3mo utilizar las API&#8217;s de Office 365 mediante Cordova haciendo uso de un framework JavaScript como AngularJS.<\/strong><\/p>\n<h2><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/02\/OfficeEveryWhere-e1422945858338.png\"><br \/>\n<\/a><br \/>\nRequisitos<\/h2>\n<p>Antes de empezar el desarrollo <strong>debemos tener instalado<\/strong> en nuestro equipo:<\/p>\n<ul>\n<li>Visual Studio Update 3 o 4<\/li>\n<li>Office Tools Developer para Visual Studio<\/li>\n<li>Tools para Apache Cordova dentro de Visual Studio<\/li>\n<\/ul>\n<h2>Manos a la obra<\/h2>\n<p>Abrimos Visual Studio y <strong>creamos un proyecto Javascript -&gt; Apache Cordova<\/strong><\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1499\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/1.png\" alt=\"1\" width=\"561\" height=\"310\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/1.png 561w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/1-300x166.png 300w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/a><\/p>\n<p>A continuaci\u00f3n, a nuestro proyecto le vamos a <strong>a\u00f1adir la conexi\u00f3n a los servicios REST de la API de Office 365<\/strong>. Para a\u00f1adirlos, nos dirigimos al Explorador de soluciones, Agregar Servicio conectado tal y como se muestra en la siguiente imagen:<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1500\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/2.jpg\" alt=\"2\" width=\"600\" height=\"599\" \/><\/a>Aparecer\u00e1 el Administrador de servicios. <strong>Seleccionamos Office365, con lo cual registrar\u00e1 autom\u00e1ticamente nuestra APP en el Directory Activo de Azure<\/strong> vinculado a nuestro tenant. Introducimos los datos de usuario y contrase\u00f1a de la cuenta de Office 365 que se vaya a utilizar. Una vez autentificado, veremos una lista de \u00a0servicios disponibles para utilizar. Inicialmente, la columna Permisos a la derecha de cada servicio estar\u00e1 vac\u00eda. <strong>En nuestro ejemplo vamos a seleccionar Contacts. Una vez seleccionado pulsamos Aceptar<\/strong> (Imagen 2).<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1502\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/4.png\" alt=\"4\" width=\"600\" height=\"261\" \/><\/a><\/p>\n<p>A continuaci\u00f3n, si vemos nuestro proyecto,<strong> se ha creado una carpeta \u00abServices\u00bb<\/strong> d\u00f3nde hay una serie de ficheros js en los que est\u00e1n\u00a0las funciones para la conexi\u00f3n con las API&#8217;s de Office 365 y <strong>un fichero \u00absettings.js\u00bb<\/strong> d\u00f3nde esta almacenados los datos de autenticaci\u00f3n de la aplicaci\u00f3n como son ClientID, AuthorityLogin y la Uri de Redirect (que apunta a una p\u00e1gina a\u00f1adida que se llama redirect.html)<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1501\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/3.png\" alt=\"3\" width=\"323\" height=\"351\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/3.png 323w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/3-276x300.png 276w\" sizes=\"auto, (max-width: 323px) 100vw, 323px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Una vez que ya tenemos los m\u00e9todos a nuestra soluci\u00f3n, <strong>el siguiente paso es a\u00f1adir una referencia en nuestra p\u00e1gina de inicio que apunte a AngularJS<\/strong>. Para quien no conozca Angular es un framework desarrollado por Google, el m\u00e1s utilizado por los desarrolladores Front-End. Se caracteriza por extender el HTML a\u00f1adiendo etiquetas y aspectos que facilitan la vida al desarrollador. Algunos especialistas no son muy partidarios de esta caracter\u00edstica porque que es demasiado intrusiva en el HTML.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n &lt;script src=&quot;https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.3.14\/angular.min.js&quot;&gt;&lt;\/script&gt;\r\n<\/pre>\n<p><strong>Toda aplicaci\u00f3n de Angular empieza en el lugar donde est\u00e1 la etiqueta \u00abng-app\u00bb<\/strong>. A continuaci\u00f3n, en el html podemos realizar diversas marcas como, por ejemplo, a partir de que lugar se muestra un controlador, una view o un simple dato del modelo, todos estos atributos se caracterizan porque empiezan por las \u00abng-loquesea\u00bb. <strong>Para nuestro ejemplo, dejaremos un html inicial como el siguiente:<\/strong><\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html ng-app=&quot;app365&quot;&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot; \/&gt;\r\n    &lt;title&gt;BlankCordovaApp3&lt;\/title&gt;\r\n    &lt;script src=&quot;services\/office365\/scripts\/o365loader.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;services\/office365\/settings\/settings.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/index.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/angular.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/angular-route.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/js\/app.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/js\/serviceO365.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/js\/sign-in-ctrl.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;scripts\/js\/contact-list-ctrl.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;link href=&quot;css\/index.css&quot; rel=&quot;stylesheet&quot; \/&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    &lt;div ng-view&gt;&lt;\/div&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>En este proyecto, en el primer caso vamos a <strong>implementar un \u00abfactory\u00bb o servicio donde vamos a implementar los m\u00e9todos para hacer login y logout<\/strong> de tal forma que tengamos totalmente desacoplado Office365 de nuestro desarrollo. Quedar\u00eda de la siguiente forma:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n(function () {\r\n    'use strict';\r\n    angular.module('app365').factory('app365api', &#x5B;app365api]);\r\n\r\n    function app365api() {\r\n\r\n        var authContext;\r\n        var authtoken;\r\n        var outlookClient;\r\n        var userName;\r\n\r\n        \/\/ Login to O365\r\n        function login(callback) {\r\n            if (!authContext) {\r\n                authContext = new O365Auth.Context();\r\n            }\r\n\r\n            authContext.getIdToken(&quot;https:\/\/outlook.office365.com\/&quot;)\r\n           .then((function (token) {\r\n               \/\/ Get auth token.\r\n               authtoken = token;\r\n               \/\/ Get user name from token object.\r\n               userName = token.givenName + &quot; &quot; + token.familyName;\r\n               \/\/ Create Outlook client object.\r\n               outlookClient = new Microsoft.OutlookServices.Client('https:\/\/outlook.office365.com\/api\/v1.0', authtoken.getAccessTokenFn('https:\/\/outlook.office365.com'));\r\n               \/\/ Callback without parameter to indicate successful sign-in.\r\n               callback();\r\n           }).bind(this), function (reason) {\r\n               \/\/ Log sign-in error message.\r\n               console.log('Failed to login. Error = ' + reason.message);\r\n               callback(reason.message);\r\n           });\r\n        };\r\n\r\n        \/\/ Logout\r\n        function logout() {\r\n            if (!authContext) {\r\n                authContext = new O365Auth.Context();\r\n            }\r\n\r\n            authContext.logOut();\r\n        };\r\n\r\n        \/\/ Get signed-in user name\r\n        function getUserName() {\r\n            return userName;\r\n        };\r\n\r\n        return {\r\n            login: login,\r\n            logout: logout,\r\n            getUserName: getUserName,\r\n            outlookClientObj: function () { return outlookClient; }\r\n        };\r\n    };\r\n})();\r\n<\/pre>\n<p>Este modulo es totalmente utilizable en cualquier otro desarrollo que realicemos haciendo uso de las API&#8217;s de Office365. Una vez ya tenemos la funci\u00f3n para autenticarnos contra Office365, <strong>el siguiente paso es implementar el controlador de \u00abLogin\u00bb<\/strong>. Este Controlador tan solo dispone de un m\u00e9todo que lo que realiza. Es una llamada al m\u00e9todo login implementado anteriormente y cuando devuelve correctamente accede a la siguiente p\u00e1gina de la aplicaci\u00f3n:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n(function () {\r\n    'use strict';\r\n    angular.module('app365').controller('signInCtrl', &#x5B;'$scope', '$location', 'app365api', signInCtrl]);\r\n    function signInCtrl($scope,  $location , app365api) {\r\n        $scope.signIn = function () {\r\n            app365api.login(onlogin);\r\n        };\r\n        var onlogin = function (reason) {\r\n            $location.path(&quot;\/home&quot;);\r\n        };\r\n    }\r\n})();\r\n<\/pre>\n<p>Para finalizar este ejemplo, una vez ya estamos autenticados vamos a <strong>solicitar los contactos que hay en nuestra cuenta.<\/strong>\u00a0Para ello quedar\u00eda un controlador similar al siguiente:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n(function () {\r\n    'use strict';\r\n    angular.module('app365').controller('contactCtrl', &#x5B;'$scope', 'app365api', contactCtrl]);\r\n    function contactCtrl($scope, app365api) {\r\n        var vm = this;\r\n        var outlookClient;\r\n\r\n        function getContacts() {\r\n\r\n            \/\/ Fetch all the contacts.\r\n            outlookClient.me.contacts.getContacts().fetch()\r\n            .then(function (contacts) {\r\n                \/\/ Get the current page. Use getNextPage() to fetch next set of contacts.\r\n                vm.contacts = contacts.currentPage;\r\n                $scope.$apply();\r\n\r\n            });\r\n        };\r\n\r\n        vm.loadList = function () {\r\n            \/\/ Get the Outlook client object.\r\n            outlookClient = app365api.outlookClientObj();\r\n            \/\/ Get contacts.\r\n            getContacts();\r\n\r\n        };\r\n        vm.loadList();\r\n    }\r\n})();\r\n<\/pre>\n<p><strong>Todos estos controladores tienen un html asociado<\/strong>. Esta asociaci\u00f3n se puede hacer de forma explicita dentro de un html o bien en el fichero javascript donde creamos la aplicaci\u00f3n. Para una aplicaci\u00f3n m\u00e1s o menos \u00abgrande\u00bb, realizaremos esta asignaci\u00f3n en el fichero de inicializaci\u00f3n de la App. <strong>En nuestro ejemplo disponemos de un fichero app.js con el siguiente contenido<\/strong>:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\nvar app365 = angular.module('app365', &#x5B;\r\n  'ngRoute']);\r\n\r\napp365.config(&#x5B;'$routeProvider',\r\n  function ($routeProvider) {\r\n      $routeProvider.\r\n          when('\/', {\r\n              templateUrl: 'partials\/sign-in.html',\r\n              controller: 'signInCtrl'\r\n          }).\r\n          when('\/home', {\r\n              templateUrl: 'partials\/contact-list.html',\r\n              controller: 'contactCtrl'\r\n          });\r\n\r\n  }\r\n]);\r\n<\/pre>\n<p>Un <strong>ejemplo de uno de estos html es<\/strong> el siguiente:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;div class=&quot;has-header&quot;&gt;\r\n    &lt;div&gt;\r\n        &lt;div ng-repeat=&quot;contact in contacts | orderBy: 'displayName'&quot; item-type=&quot;item item-icon-left&quot;&gt;\r\n            {{ contact.displayName }}\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p>Este html lo que indica es por cada valor que tenemos en la variable del controlador contacts muestra un div con su nombre.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p><strong>Office 365<\/strong> es un claro ejemplo\u00a0del objetivo que ha marcado Satya Natella: <strong>poder consumir servicios de Microsoft en cualquier dispositivo y lugar<\/strong>. Esto abre una multitud de aspectos en los que poder extender Office 365 y adaptarla a necesidades reales de los clientes. Tiene un doble objetivo: por un lado\u00a0<strong>acercar a m\u00e1s desarrolladores a utilizar tecnolog\u00eda Microsoft<\/strong> y por otro lado <strong>dar\u00a0oportunidad para mejorar un producto.<\/strong><\/p>\n<p>En este ejemplo, <strong>hemos visto lo sencillo que es utilizar Cordova con Office365,<\/strong> ayud\u00e1ndonos de una de las herramientas m\u00e1s utilizadas por los desarrolladores.<\/p>\n<h4>Este ejemplo lo pode\u00eds descargar desde mi repositorio de GitHub.<\/h4>\n<p>&nbsp;<\/p>\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>La pasada semana tuve la fortuna de participar como ponente en la 1\u00aa DotNet Conference que se realiz\u00f3 en Alcal\u00e1 de Henares. En la sesi\u00f3n que impart\u00ed, mostr\u00e9 c\u00f3mo las nuevas API&#8217;s de Office 365 se pueden utilizar en cualquier &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/\">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":[133,130,132,46],"class_list":["post-1497","post","type-post","status-publish","format-standard","hentry","category-desarrollo","category-office-365-2","tag-angularjs","tag-cordova","tag-dotnetconference","tag-office365"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova - Desarrollando sobre SharePoint<\/title>\n<meta name=\"description\" content=\"En este articulo vamos a ver lo sencillo que es desarrollar una App utilizando las API&#039;s de Office365 mediante el uso de Cordova y AngularJS\" \/>\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\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"En este articulo vamos a ver lo sencillo que es desarrollar una App utilizando las API&#039;s de Office365 mediante el uso de Cordova y AngularJS\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.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=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova\",\"datePublished\":\"2015-03-03T10:00:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/\"},\"wordCount\":1382,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/03\\\/main.png\",\"keywords\":[\"AngularJS\",\"cordova\",\"dotnetConference\",\"office365\"],\"articleSection\":[\"desarrollo\",\"Office 365\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/\",\"name\":\"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/03\\\/main.png\",\"datePublished\":\"2015-03-03T10:00:34+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"En este articulo vamos a ver lo sencillo que es desarrollar una App utilizando las API's de Office365 mediante el uso de Cordova y AngularJS\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/03\\\/main.png\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/03\\\/main.png\",\"width\":1032,\"height\":579},{\"@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":"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova - Desarrollando sobre SharePoint","description":"En este articulo vamos a ver lo sencillo que es desarrollar una App utilizando las API's de Office365 mediante el uso de Cordova y AngularJS","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\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/","twitter_card":"summary_large_image","twitter_title":"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova - Desarrollando sobre SharePoint","twitter_description":"En este articulo vamos a ver lo sencillo que es desarrollar una App utilizando las API's de Office365 mediante el uso de Cordova y AngularJS","twitter_image":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova","datePublished":"2015-03-03T10:00:34+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/"},"wordCount":1382,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png","keywords":["AngularJS","cordova","dotnetConference","office365"],"articleSection":["desarrollo","Office 365"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/","name":"Office 365: crear una App m\u00f3vil usando AngularJS, API Office365 y Cordova - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png","datePublished":"2015-03-03T10:00:34+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"En este articulo vamos a ver lo sencillo que es desarrollar una App utilizando las API's de Office365 mediante el uso de Cordova y AngularJS","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/office-365-crear-una-app-movil-usando-angularjs-api-office365-y-cordova\/#primaryimage","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png","contentUrl":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/03\/main.png","width":1032,"height":579},{"@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\/1497","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=1497"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1497\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=1497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=1497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=1497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}