{"id":1240,"date":"2014-04-01T11:00:59","date_gmt":"2014-04-01T10:00:59","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=1240"},"modified":"2014-04-07T07:41:40","modified_gmt":"2014-04-07T06:41:40","slug":"integrando-requirejs-de-sharepoint","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/","title":{"rendered":"Integrando RequireJS en SharePoint"},"content":{"rendered":"<p>Tal y como se comunicaba en el anuncio oficial de la nueva versi\u00f3n de SharePoint, el tipo de desarrollador de SharePoint ha ido evolucionando desde un especialista en backend (c\u00f3digo servidor) que dominaba como la palma de su mano un lenguaje como C# a un desarrollador m\u00e1s \u00abweb\u00bb (front-end) que tiene que conocer HTML5, JavaScript y CSS3.<\/p>\n<p>Este cambio es debido a que cada vez es mayor el peso que tiene el navegador y la rapidez que proporcionan estos lenguajes. Motivados por este cambio, hemos visto c\u00f3mo podemos <a href=\"http:\/\/curah.microsoft.com\/50814\/utilizar-frameworks-javascript-en-nuestros-desarrollos-de-sharepoint\" target=\"_blank\">utilizar diversos frameworks JavaScript<\/a> dentro de SharePoint. Sin embargo, para los desarrolladores, entre los que me incluyo, a pesar de adaptarnos e intentar obtener las bondades de JavaScript (que las tiene y muchas) siempre echamos en falta algo de nuestro habitat natural. Este caso seguro que os suena: <!--more--><\/p>\n<ul>\n<li>Utilizamos JQuery para manejar los elementos de la p\u00e1gina.<\/li>\n<li>Hacemos uso de <a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/2013\/10\/29\/introduccion-mustache-js-dentro-de-sharepoint\/\" target=\"_blank\">Mustache <\/a>para mostrar una lista de resultados.<\/li>\n<li>Incorporamos Blackbone para obtener un patr\u00f3n MVC para poder tener organizada como toca nuestra aplicaci\u00f3n.<\/li>\n<li>Incorporamos Knockout con el fin de tener un patr\u00f3n MVVM en algunos formularios.<\/li>\n<\/ul>\n<p>Y en m\u00e1s de una ocasi\u00f3n hemos tenido que acordarnos que no podemos subir de versi\u00f3n el JQuery porque si no, la versi\u00f3n de Mustache no funciona, o que no podemos utilizar esta versi\u00f3n de Blackone porque implica subir la versi\u00f3n de JQuery. El resultado es que toda esta gesti\u00f3n en un proyecto m\u00e1s o menos grande hace que sea poco menos que imposible y cada cosa que a\u00f1adamos tengamos que rezar y esperar que nuestra aplicaci\u00f3n siga funcionando como hasta ese momento.<\/p>\n<p>Esto en el entorno .NET lo podemos solucionar con Nuget que es el encargado de gestionar las dependencias entre las diversas librer\u00edas que componen nuestro proyecto. Pues bien, dicha funcionalidad (entre otras) es la que nos proporciona <a href=\"http:\/\/requirejs.org\/\" target=\"_blank\">RequireJS<\/a>.<\/p>\n<p>RequireJS es una libreria JavaScript que se se encarga de cargar y gestionar las dependencias de nuestras librerias JavaScript. Lo que mejora la calidad de nuestro c\u00f3digo y adem\u00e1s hace que nuestra p\u00e1gina se cargue mucho m\u00e1s r\u00e1pida (ya que se encargar\u00e1 de descargar las librerias JavaScript de forma asincrona y bajo demanda).<\/p>\n<p>Con RequireJS los archivos javascript se organizan en m\u00f3dulos y estos pueden tener dependencias sobre otros; todos los archivos javascript necesarios son cargados por RequireJS de forma as\u00edncrona. Haciendo uso de RequireJS en la p\u00e1gina web, solo ser\u00e1 necesario incluir un \u00fanico javascript, que ser\u00e1 el de RequireJS, en la propia etiqueta script y con el atributo data-main le indicaremos el m\u00f3dulo del que va a hacer uso la p\u00e1gina. El resto de m\u00f3dulos se cargar\u00e1n como dependencias del m\u00f3dulo que especifiquemos en el atributo data-main.<\/p>\n<p>Nuestra aplicaci\u00f3n solo tendr\u00e1 una llamada, en este caso, a nuestra libreria requirejs en la que le indicaremos cu\u00e1l es el fichero JavaScript donde tenemos introducidas las dependencias.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script src=&quot;js\/require.js&quot; data-main=&quot;js\/app&quot;&gt;&lt;\/script&gt;\r\n<\/pre>\n<p>El fichero app.js tendra la siguiente forma:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nrequirejs.config({\r\n  baseUrl: 'js\/libs',\r\n  paths: {\r\n    app: '..\/app',\r\n    encender: '..\/encender\/encender',\r\n    jquery: 'jquery\/dist\/jquery',\r\n    Ractive: '..\/ractive\/Ractive',\r\n    'amd-loader': 'requirejs-ractive\/amd-loader',\r\n    rv: 'requirejs-ractive\/rv',\r\n    rvc: 'requirejs-ractive\/rvc',\r\n    'ractive-backbone': 'ractive-backbone\/Ractive-backbone',\r\n    Backbone: 'backbone\/backbone',\r\n    'deep-model': 'backbone-deep-model\/distribution\/deep-model',\r\n    'jquery-ui': 'jquery-ui\/ui\/jquery-ui',\r\n    underscore: 'underscore\/underscore'\r\n  },\r\n  map: {\r\n    '*': {\r\n      'backbone': 'Backbone'\r\n    }\r\n  },\r\n  shim: {\r\n    'underscore': {\r\n      exports: '_'\r\n    },\r\n    'Backbone': {\r\n      deps: &#x5B;'underscore', 'jquery'],\r\n      exports: 'Backbone'\r\n    },\r\n    'deep-model':{\r\n      deps: &#x5B;'Backbone']\r\n    },\r\n    'ractive-backbone':{\r\n      deps: &#x5B;'Ractive', 'Backbone']\r\n    },\r\n    'rvc': {\r\n      deps: &#x5B;'ractive-backbone', 'deep-model']\r\n    },\r\n    'jquery-ui': {\r\n      exports: '$',\r\n      deps: &#x5B;'jquery']\r\n    }\r\n  },\r\n  callback: function(){}\r\n});\r\n\r\nif (typeof booksapp === 'undefined'){\r\n  var booksapp = {\r\n    render: {\r\n      main: &quot;#render-main&quot;\r\n    }\r\n  };\r\n}\r\n\r\nrequirejs(&#x5B;'jquery', 'Ractive', 'Backbone', 'encender', 'app\/books'], function($, Ractive, Backbone, encender, books){\r\n\r\n  var Router = Backbone.Router.extend({\r\n\r\n    routes: {\r\n      &quot;&quot;:             &quot;home&quot;,   \/\/ #\r\n      &quot;books&quot;:        &quot;books&quot;,  \/\/ #books\r\n      &quot;books\/:id&quot;:    &quot;books&quot;   \/\/ #books\/1234\r\n    },\r\n\r\n    home: function() {\r\n      console.log(&quot;Home&quot;);\r\n      new Ractive({\r\n        el: booksapp.render.main,\r\n        template: '#template-home',\r\n        data: {\r\n          name: 'Books'\r\n        }\r\n      });\r\n    },\r\n\r\n    books: function(id) {\r\n      if(id){\r\n        \/\/retrieve one particular book\r\n        booksapp.books.show(id);\r\n      } else{\r\n        \/\/retrieve collection &amp; display\r\n        if(!booksapp.books){\r\n          booksapp.books = new books.Collection();\r\n          booksapp.books.retrieveAll();\r\n        } else{\r\n          booksapp.books.showAll();\r\n        }\r\n      }\r\n    }\r\n\r\n  });\r\n\r\n  $(function(){\r\n    booksapp.router = new Router();\r\n    encender.delegateNavigation('\/', booksapp.router);\r\n    \/*\r\n     * If your application is not being served from the root url \/ of your domain,\r\n     * be sure to tell History where the root really is, as an option:\r\n     * Backbone.history.start({pushState: true, root: &quot;\/public\/search\/&quot;})\r\n     *\/\r\n    Backbone.history.start({pushState: true});\r\n\r\n    var forward = encender.getQueryParams()&#x5B;'forward-url'];\r\n    if (forward){\r\n      booksapp.router.navigate(forward, {trigger: true});\r\n    }\r\n\r\n  });\r\n\r\n});\r\n<\/pre>\n<h2>Integrando RequireJS en SharePoint<\/h2>\n<p>Require est\u00e1 muy bien para cualquier desarrollo Web, pero \u00bfc\u00f3mo lo puedo utilizar dentro de SharePoint?.<\/p>\n<p>SharePoint por defecto ya tiene un cargador de sus ficheros JavaScript, que desconozco el orden en el que se cargan y las dependencias entre los mismos, debido a que hay muy poca\/nula informaci\u00f3n al respecto. Si yo a\u00f1ado RequireJS, tal y como explico en la parte de arriba, hay algunos casos en los que no funciona. <strong>\u00bfPor qu\u00e9?<\/strong><\/p>\n<p>En muchos casos, nosotros hacemos uso del modelo de objetos de cliente de JavaScript de SharePoint por lo que si en nuestro c\u00f3digo llamamos al CSOM antes de que tengamos cargada la librer\u00eda sp.js no podremos consultar los datos de la lista.<\/p>\n<p><strong>Soluci\u00f3n<\/strong><br \/>\nPara hacer uso de CSOM Microsoft recomienda que antes de hacer cualquier petici\u00f3n comprobemos que tengamos cargada la libreria sp.js. Para ello, tenemos que utilizar la funci\u00f3n SP.SOD.executeFunc que se recomienda en su versi\u00f3n 2013 o el ExecuteDelayUntil en la versi\u00f3n 2010 antes de realizar cualquier petici\u00f3n el modelo de objetos de cliente de SharePoint y no se produzca ning\u00fan error. Pero, si por el contrario, en lugar de utilizar el CSOM, utilizamos los endpoint Rest que nos proporciona SharePoint o bien consumimos un servicio propio, no tenemos este problema.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>En SharePoint podemos hacer uso de los elementos m\u00e1s novedosos y aunque aparentemente hay un camino r\u00e1pido para hacer las cosas, en muchas ocasiones hacer las cosas r\u00e1pidas no implica que sea la mejor forma de realizarlas. En nuestra plataforma preferida se pueden hacer las cosas igual de bien y de mal que en otras plataformas. Esos tab\u00fas de que SharePoint es una plataforma que solamente se puede trabajar de una forma anticuada y no adecuada no es la correcta, y dista mucho de la realidad con la que nos encontramos d\u00eda a d\u00eda.<\/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>Tal y como se comunicaba en el anuncio oficial de la nueva versi\u00f3n de SharePoint, el tipo de desarrollador de SharePoint ha ido evolucionando desde un especialista en backend (c\u00f3digo servidor) que dominaba como la palma de su mano un &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/\">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":[2,100],"tags":[146,19,101],"class_list":["post-1240","post","type-post","status-publish","format-standard","hentry","category-buenas-practicas","category-javascript-2","tag-buenas-practicas","tag-javascript","tag-requirejs"],"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>Integrando RequireJS en SharePoint - Desarrollando sobre SharePoint<\/title>\n<meta name=\"description\" content=\"En este post vamos a ver que es RequireJS y como podemos incluirlo en nuestros desarrollos de SharePoint.\" \/>\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\/integrando-requirejs-de-sharepoint\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Integrando RequireJS en SharePoint - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"En este post vamos a ver que es RequireJS y como podemos incluirlo en nuestros desarrollos de SharePoint.\" \/>\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=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"Integrando RequireJS en SharePoint\",\"datePublished\":\"2014-04-01T10:00:59+00:00\",\"dateModified\":\"2014-04-07T06:41:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/\"},\"wordCount\":1119,\"commentCount\":0,\"keywords\":[\"buenas practicas\",\"JavaScript\",\"requirejs\"],\"articleSection\":[\"buenas practicas\",\"javascript\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/\",\"name\":\"Integrando RequireJS en SharePoint - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"datePublished\":\"2014-04-01T10:00:59+00:00\",\"dateModified\":\"2014-04-07T06:41:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"En este post vamos a ver que es RequireJS y como podemos incluirlo en nuestros desarrollos de SharePoint.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-requirejs-de-sharepoint\\\/\"]}]},{\"@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":"Integrando RequireJS en SharePoint - Desarrollando sobre SharePoint","description":"En este post vamos a ver que es RequireJS y como podemos incluirlo en nuestros desarrollos de 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\/integrando-requirejs-de-sharepoint\/","twitter_card":"summary_large_image","twitter_title":"Integrando RequireJS en SharePoint - Desarrollando sobre SharePoint","twitter_description":"En este post vamos a ver que es RequireJS y como podemos incluirlo en nuestros desarrollos de SharePoint.","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"Integrando RequireJS en SharePoint","datePublished":"2014-04-01T10:00:59+00:00","dateModified":"2014-04-07T06:41:40+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/"},"wordCount":1119,"commentCount":0,"keywords":["buenas practicas","JavaScript","requirejs"],"articleSection":["buenas practicas","javascript"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/","name":"Integrando RequireJS en SharePoint - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"datePublished":"2014-04-01T10:00:59+00:00","dateModified":"2014-04-07T06:41:40+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"En este post vamos a ver que es RequireJS y como podemos incluirlo en nuestros desarrollos de SharePoint.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-requirejs-de-sharepoint\/"]}]},{"@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\/1240","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=1240"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1240\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=1240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=1240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=1240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}