{"id":818,"date":"2013-09-03T11:00:24","date_gmt":"2013-09-03T10:00:24","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=818"},"modified":"2013-09-03T06:56:44","modified_gmt":"2013-09-03T05:56:44","slug":"compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/","title":{"rendered":"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II"},"content":{"rendered":"<p>Como cada tres meses acaba de salir la revista digital dedicada a nuestro servidor favorito SharePoint, viene cargada de articulos de gran calidad y con dos novedades interesantes que tienen que ver con nostros.<\/p>\n<p>Por un lado a partir de este n\u00famero <a href=\"http:\/\/www.encamina.com\" target=\"_blank\">ENCAMINA <\/a>es una de las empresas que patrocina la revista y espero que dentro de poco vea a la luz nuestra colaboraci\u00f3n con <a href=\"http:\/\/www.compartimoss.com\" target=\"_blank\">CompartiMOSS <\/a>(no puedo decir nada m\u00e1s aunque me gustar\u00eda mucho poder decirlo).<br \/>\nLa segunda noticia es que a partir de este n\u00famero hay un articulo destacado en la publicaci\u00f3n. Y he tenido la fortuna que el articulo destacado a sido el art\u00edculo que escrib\u00ed para el pasado n\u00famero <a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-16\/uso-de-frameworks-javascript-en-desarrollos-sharepoint-parte-i\" target=\"_blank\">http:\/\/www.compartimoss.com\/revistas\/numero-16\/uso-de-frameworks-javascript-en-desarrollos-sharepoint-parte-i<\/a>.<br \/>\nPara mi es un orgullo, el solamente colaborar  con la publicaci\u00f3n es un \u00e9xito, donde escriben las personas m\u00e1s importantes de la comunidad de SharePoint de habla hispana. As\u00ed que pensar que mi art\u00edculo sea el m\u00e1s destacado del n\u00famero anterior la verdad es que no me lo puedo creer. Lo \u00fanico que puedo es agradecer a los directores por dejarme colaborar con <a href=\"http:\/\/www.compartimoss.com\" target=\"_blank\">CompartiMOSS<\/a> y a los lectores por leerlo, ya que la finalidad de la publicaci\u00f3n es \u00abcompartir\u00bb el conocimiento entre todos los lectores.<br \/>\nAqu\u00ed os dejo el art\u00edculo que he escrito para este n\u00famero y espero que os guste igual que el anterior.<\/p>\n<p><!--more--><br \/>\n<strong>Usar Framework JavaScript en nuestros desarrollos SharePoint Parte II<\/strong><br \/>\n<strong>Resumen:<\/strong><br \/>\nEn el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.<\/p>\n<p>ExtJS es uno de los Frameworks JavaScript m\u00e1s famosos del mercado cuya \u00faltima versi\u00f3n es la 4.2. Se caracteriza por simplificar la creaci\u00f3n de Apps.<\/p>\n<p>Sus principales ventajas:<\/p>\n<p>Prototipos y APPS de una forma muy sencilla y r\u00e1pida.<br \/>\nResultado obtenido es HTML5 con lo cual obtienes una compatibilidad con todos los navegadores y dispositivos.<br \/>\nPosibilidad de crear aplicaciones m\u00f3viles con un c\u00f3digo muy semejante (ya lo veremos en otros art\u00edculos)<br \/>\nArquitectura MVC<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.png\" width=\"712\" height=\"482\" \/>Imagen 1.- Arquitectura Proyecto ExtJs<\/p>\n<p>El principal inconveniente que tiene es que su curva de aprendizaje no es tan r\u00e1pida, y para hacer cosas relativamente interesantes con \u00e9l, es necesario conocer bastante bien JavaScript, lo que en los primeros proyectos nos puede hacer tirar la toalla y ocasionar un poco de frustraci\u00f3n.<\/p>\n<p>Al igual que en el anterior n\u00famero, en este art\u00edculo vamos a explicar c\u00f3mo desarrollar un APP en la que vamos a mostrar informaci\u00f3n de los Autores de CompartiMOSS. Vamos a poder realizar operaciones Create Read Update Delete contra una lista de SharePoint y visualizaremos la informaci\u00f3n obtenida en un GRID haciendo uso de la API REST para leer la informaci\u00f3n y tambi\u00e9n utilizaremos el modelo de objetos cliente de JavaScript para ver c\u00f3mo podemos integrar otras librer\u00edas con este Framework.<\/p>\n<p><strong>Requisitos Previos<\/strong><\/p>\n<p>Antes de ponernos a trabajar hay que descargarse el Framework Sencha de la siguiente p\u00e1gina: http:\/\/www.sencha.com\/products\/extjs\/download\/. Su uso, siempre que no se implemente ninguna aplicaci\u00f3n \u00abcomercial\u00bb, es gratuito.<\/p>\n<p><strong>Creaci\u00f3n de la APP SharePoint-Hosted mediante Visual Studio<\/strong><\/p>\n<p>Abrimos Visual Studio 2012 y seleccionamos un proyecto de este tipo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura2.png\" width=\"694\" height=\"504\" \/>Imagen 2.- Creaci\u00f3n de la Aplicaci\u00f3n SharePoint-Hosted.<\/p>\n<p>En primer lugar, agregamos al proyecto una lista llamada Autores en la que a\u00f1adiremos los datos que queremos mostrar en el Grid. Esta lista contendr\u00e1 los campos mencionados anteriormente: (Autor, PuestoTrabajo, Twitter y Blog). A esta lista le a\u00f1adiremos datos de ejemplo para comprobar el correcto funcionamiento, para ello basta con editar el archivo \u00abelements.xml\u00bb que se encuentra ubicado dentro de la Instancia de la lista y a\u00f1adir los datos que creamos conveniente.<\/p>\n<p>El siguiente paso es a\u00f1adir los ficheros JavaScript y CSS que vienen en el Frameworks de Sencha en nuestro proyecto. Los JavaScript los ubicaremos dentro de la carpeta de Scripts y los CSS dentro de la carpeta de Content. Estos ficheros son los siguientes: ext-all.js, include-ext.js, options-toolbar.js, ext-theme-classic-all.css y example.css<\/p>\n<p>En la p\u00e1gina default.aspx a\u00f1adimos referencias a las librer\u00edas JavaScript y archivos .CSS de la siguiente forma:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script type=&quot;text\/javascript&quot; src=&quot;..\/Scripts\/App.js&quot;&gt;&lt;\/script&gt;&lt;script type=&quot;text\/javascript&quot; src=&quot;..\/Scripts\/ext-all.js&quot;&gt;&lt;\/script&gt;\r\n&lt;script type=&quot;text\/javascript&quot; src=&quot;..\/Scripts\/include-ext.js&quot;&gt;&lt;\/script&gt;&lt;script type=&quot;text\/javascript&quot; src=&quot;..\/Scripts\/options-toolbar.js&quot;&gt;&lt;\/script&gt;\r\n\r\n \t&lt;link href=&quot;..\/Content\/App.css&quot; rel=&quot;Stylesheet&quot; type=&quot;text\/css&quot; \/&gt; \t&lt;link href=&quot;..\/Content\/ext-theme-classic-all.css&quot; rel=&quot;Stylesheet&quot; type=&quot;text\/css&quot; \/&gt; \t&lt;link href=&quot;..\/Contentent\/example.css&quot; rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; \/&gt; <\/pre>\n<p>En la misma p\u00e1gina default.aspx tambi\u00e9n vamos a incluir el siguiente div que es el lugar donde vamos desplegar el desarrollo realizado.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">&lt;\/pre&gt;\r\n&lt;div id=&quot;editor-grid&quot;&gt;&lt;\/div&gt;\r\n&lt;pre&gt;\r\n<\/pre>\n<p>Finalmente creamos un fichero JavaScript en blanco que le vamos a llamar \u00abRow-editing.jg\u00bb que ser\u00e1 donde realizaremos la implementaci\u00f3n de la soluci\u00f3n. Con esta parte ya nos podemos poner manos a la obra con el desarrollo JavaScript.<\/p>\n<p><strong>Introducci\u00f3n al desarrollo con Sencha ExtjS<\/strong><br \/>\nPara introducirse en el desarrollo con ExtJS mi recomendaci\u00f3n es leer los tutoriales y ejemplos que hay en la Web del producto y una vez entendidos los casos bases, empezar a complicarlos. En los mismos ejemplos obtendremos y seremos conscientes de toda la potencia que tiene ExtJS. El consultar la ayuda nos indicar\u00e1 todos los eventos y valores que tienen los diversos artefactos que vamos a utilizar.<\/p>\n<p>En este ejemplo lo que vamos a realizar es a\u00f1adir un GRID en el que podemos realizar operaciones CRUD contra una lista de SharePoint, en nuestro ejemplo queremos consultar los Autores de la revista CompartiMOSS. Para ello el primer paso es crearnos un modelo en el que vamos a definir que valores va a tener, en nuestro caso: (Title, PuestoTrabajo, Blog, Twitter) para ello a\u00f1adimos este c\u00f3digo:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    Ext.define('Autor', {\r\n        extend: 'Ext.data.Model',\r\n        fields: &#x5B;\r\n            'Title',\r\n            'Trabajo',\r\n            'Blog',\r\n            'Twitter,\r\n        ]\r\n    });\r\n<\/pre>\n<p>Dado que a\u00fan no vamos a realizar la llamada a la API REST de SharePoint, vamos a introducir una serie de valores aleatorios con la finalidad de comprobar el funcionamiento del grid:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/ Generate mock employee data\r\n    var data = (function() {\r\n        var lasts = &#x5B;'Jones', 'Smith', 'Lee', 'Wilson', 'Black', 'Williams', 'Lewis', 'Johnson', 'Foot', 'Little', 'Vee', 'Train', 'Hot', 'Mutt'],\r\n            firsts = &#x5B;'Fred', 'Julie', 'Bill', 'Ted', 'Jack', 'John', 'Mark', 'Mike', 'Chris', 'Bob', 'Travis', 'Kelly', 'Sara'],\r\n            lastLen = lasts.length,\r\n            firstLen = firsts.length,\r\n            usedNames = {},\r\n            data = &#x5B;],\r\n            s = new Date(2007, 0, 1),\r\n            eDate = Ext.Date,\r\n            now = new Date(),\r\n            getRandomInt = Ext.Number.randomInt,\r\n\r\n            generateName = function() {\r\n                var name = firsts&#x5B;getRandomInt(0, firstLen - 1)] + ' ' + lasts&#x5B;getRandomInt(0, lastLen - 1)];\r\n                if (usedNames&#x5B;name]) {\r\n                    return generateName();\r\n                }\r\n                usedNames&#x5B;name] = true;\r\n                return name;\r\n            };\r\n\r\n        while (s.getTime() &lt; now.getTime()) {\r\n            var ecount = getRandomInt(0, 3);\r\n            for (var i = 0; i &lt; ecount; i++) {                 var name = generateName();                 data.push({                     name : name,                     trabajo: name.toLowerCase().replace(' ', '.') + '@sencha-test.com',                     blog: 'http:\/\/compartimos.com\/blog\/'+name ,                     twitter: '@' + name                                     });             }             s = eDate.add(s, eDate.MONTH, 1);         }         return data;     })(); <\/pre>\n<p>El siguiente paso es a\u00f1adir un Store a nuestra APP. \u00bfQu\u00e9 es un Store? Un Store es un objeto que encapsula el modelo de datos en la parte del cliente, de tal forma que en \u00e9l sirva de \u201ccache de datos\u201d y sea el encargado de solicitar los datos a la API Rest de SharePoint, se encarga de mapear la informaci\u00f3n recibida con nuestro modelo de objetos que nos hemos creado anteriormente. Adem\u00e1s este objeto tendremos que configurarlo en los Grids, Combos y dem\u00e1s Widgets que queremos introducir en nuestros desarrollos.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">     \/\/ create the Data Store     var store = Ext.create('Ext.data.Store', {         \/\/ destroy the store if the grid is destroyed         autoDestroy: true,         model: 'Autor',         proxy: {             type: 'memory'         },         data: data,         sorters: &#x5B;{             property: 'name',             direction: 'ASC'         }]     }); <\/pre>\n<p>Los datos que le hemos pasado al Store es que base en el modelo que hemos creado anteriormente, y que tenemos la informaci\u00f3n fija al seleccionar el tipo del proxy \u201cmemory\u201d para ello lo que hacemos es indicarle que los datos corresponden con la variable \u201cdata\u201d creado anteriormente. El siguiente paso es crearnos el Grid donde se van a mostrar todos estos datos para ello tenemos que a\u00f1adir el siguiente c\u00f3digo:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">   var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {         clicksToMoveEditor: 1,         autoCancel: false     });     \/\/ create the grid and specify what field you want     \/\/ to use for the editor at each column.     var grid = Ext.create('Ext.grid.Panel', {         store: store,         columns: &#x5B;{             header: 'Name',             dataIndex: 'name',             flex: 1,             editor: {                 \/\/ defaults to textfield if no xtype is supplied                 allowBlank: true             }         },        {             header: 'Trabajo',             dataIndex: 'trabajo',             width: 160,             editor: {                 \/\/ defaults to textfield if no xtype is supplied                 allowBlank: true             }         },         {             header: 'Twitter',         dataIndex: 'twitter',         width: 160,         editor: {             \/\/ defaults to textfield if no xtype is supplied             allowBlank: true         }         }, {             header: 'Blog',             dataIndex: 'blog',             width: 160,             editor: {                 \/\/ defaults to textfield if no xtype is supplied                 allowBlank: true             }                 }],         renderTo: 'editor-grid',         width: 600,         height: 400,         title: 'Autor CompartiMOSS',         frame: true,         tbar: &#x5B;{             text: 'Add Autor',             iconCls: 'employee-add',             handler: function () {                 rowEditing.cancelEdit();                 \/\/ Create a model instance                 var r = Ext.create('Autor', {                                 });                 store.insert(0, r);                 rowEditing.startEdit(0, 0);             }         }, {             itemId: 'removeEmployee',             text: 'Remove Autor',             iconCls: 'employee-remove',             handler: function () {                 var sm = grid.getSelectionModel();                 rowEditing.cancelEdit();                 store.remove(sm.getSelection());                 if (store.getCount() &gt; 0) {\r\n                    sm.select(0);\r\n                }\r\n            },\r\n            disabled: true\r\n        }],\r\n        plugins: &#x5B;rowEditing],\r\n        listeners: {\r\n            'selectionchange': function (view, records) {\r\n                grid.down('#removeEmployee').setDisabled(!records.length);\r\n            }\r\n        }\r\n    });\r\n\r\n<\/pre>\n<p>Este c\u00f3digo es muy semejante al que utilizamos en cualquier desarrollo en .NET es decir, indicamos el origen de datos (Store), indicamos las Columnas que va a tener el Grid y su nombre en el Store, en cada columna podemos indicar el tipo de campo que es (fecha, n\u00famero) del mismo modo que podemos indicar validaciones en los mismos.<br \/>\nTambi\u00e9n resulta bastante llamativo que hemos a\u00f1adido dos funciones para poder a\u00f1adir y eliminar registros sobre el propio Grid y que se queden reflejados en el Store.<br \/>\nFinalmente a\u00f1adimos un plugin que permite poder editar registros directamente en el Grid. Si realizamos estas modificaciones y ejecutamos la APP el resultado ser\u00eda el siguiente:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura3.png\" width=\"639\" height=\"592\" \/><\/p>\n<p>Como podemos observar ya tenemos los datos puestos en el Grid, y tambi\u00e9n observamos alguna de las caracter\u00edsticas de los mismos como son el orden de las columnas, seleccionar las columnas que queremos visualizar, adem\u00e1s de la posibilidad de a\u00f1adir, editar y eliminar datos desde el propio Grid.<\/p>\n<p><strong>Consumir datos de SharePoint<\/strong><br \/>\nUna vez ya tenemos la aplicaci\u00f3n funcionando con los datos de demostraci\u00f3n, viene la parte m\u00e1s divertida y es como hacer que la APP obtenga los datos de SharePoint. Para ello tenemos que realizar modificaciones en el Store definido previamente, en lugar de obtener los datos fijos, va a realizar una llamada a la API Rest para obtener los datos y mostrarlos en el GRID, para ello tenemos que hace\u00e7r las siguientes modificaciones en el Store:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    var store = Ext.create('Ext.data.Store', {\r\n        \/\/ destroy the store if the grid is destroyed\r\n        autoLoad:true,\r\n        autoDestroy: true,\r\n        model: 'Autor',\r\n        proxy: {\r\n            type: 'ajax',\r\n            url: ' \/_api\/web\/Lists\/getbytitle(\\'Autores\\')\/items()?$select=Title,Trabajo,Twitter,Blog',\r\n            headers: { &quot;Accept&quot;: &quot;application\/json; odata=verbose&quot; },\r\n            reader: {\r\n                type: 'json',\r\n                root: 'd.results'\r\n            }\r\n        },\r\n        sorters: &#x5B;{\r\n            property: 'name',\r\n            direction: 'ASC'\r\n        }]\r\n    });\r\n<\/pre>\n<p>La principal modificaci\u00f3n es que hemos cambiado el Proxy por una consulta Ajax que lo que hace es realizar una petici\u00f3n a la API y obtiene los resultados en formato Json. En la variable root, indicamos el lugar desde el que queremos obtener los datos, dependiendo de la llamada API Rest que realicemos los datos se encuentran en una ubicaci\u00f3n u otra.<br \/>\nAhora observamos que se muestran los datos de nuestra lista de SharePoint.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura4.png\" width=\"621\" height=\"379\" class=\"aligncenter\" \/><br \/>\nA\u00fan no hemos terminado con el desarrollo, si intentamos hacer cualquier operaci\u00f3n CRUD en el Grid,  aunque no da error, el resultado no se refleja en nuestra lista. Esto es por dos motivos: el primero es el funcionamiento del Store, el Store es el \u201cencargado\u201d de almacenar los datos en local y posteriormente trasladar estos cambios a la lista. La primera parte lo hace correctamente, pero en el momento que se intenta sincronizar con la lista se produce este error:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura5.png\" width=\"567\" height=\"17\" class=\"alignnone\" \/><br \/>\nPorque se produce este error?, porque en el Store no hemos creado la estructura adecuada para la comunicaci\u00f3n por Rest. Para solucionarlo tenemos dos opciones, una modificar estas llamadas a la API Res de SharePoint o bien a\u00f1adir una funci\u00f3n dentro del grid que cada vez que se realice una operaci\u00f3n realice esta operaci\u00f3n en la lista de SharePoint.<br \/>\nPara este ejemplo he decidido a\u00f1adir una funci\u00f3n que se encargue de hacer las operaciones en SharePoint, el motivo es demostrar que dentro de Sencha tambi\u00e9n podemos hacer uso de otras librer\u00edas, en este ejemplo voy a llamar al modelo de objetos JavaScript.<br \/>\nPara ello en primer lugar tenemos que a\u00f1adir un Evento al listener al Store, de tal forma que cada vez que se a\u00f1ada\/modifique o elimine un elemento al Store este sea notificado de tal forma que quedar\u00eda de la siguiente forma:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n                  listeners: {\r\n            'update': function (view, records) {\r\n                if (records.data.Id == '') {\r\n                    AddRecord(records.data);\r\n                    \r\n                }\r\n                else\r\n                {\r\n                    UpdateRecord(records.data);\r\n                }\r\n                debugger;\r\n                store.reload();\r\n            },\r\n            'remove': function (view, records) {\r\n                RemoveRecord(records.data);\r\n                store.reload();\r\n            }\r\n\r\n<\/pre>\n<p>Una vez realizada esta modificaci\u00f3n tan solo nos queda definirnos las funciones correspondientes para hacer las operaciones contra SharePoint. Estas funciones quedar\u00edan de la siguiente forma:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar context = SP.ClientContext.get_current();\r\n\r\nfunction AddRecord(data)\r\n{\r\n   var oList = context.get_web().get_lists().getByTitle('Autores');\r\n        \r\n    var itemCreateInfo = new SP.ListItemCreationInformation();\r\n    this.oListItem = oList.addItem(itemCreateInfo);\r\n    oListItem.set_item('Title', data.name);\r\n    oListItem.set_item('Trabajo', data.Trabajo);\r\n    oListItem.set_item('Twitter', data.Twitter);\r\n    oListItem.set_item('Blog', data.Blog);\r\n    oListItem.update();\r\n\r\n    context.load(oListItem);\r\n    context.executeQueryAsync(\r\n        Function.createDelegate(this, this.onQuerySucceeded), \r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\n\r\nfunction onQuerySucceeded() { \r\nalert(\u2018Acci\u00f3n Realizada\u2019);  \r\n}\r\n\r\nfunction onQueryFailed(sender, args) {  \r\nalert(\u2018Error\u2019);\r\n}\r\n\r\nfunction  UpdateRecord(data)\r\n{\r\n    var oList = context.get_web().get_lists().getByTitle('Autores');\r\n\r\n    this.oListItem = oList.getItemById(data.Id);\r\n    oListItem.set_item('Title', data.name);\r\n    oListItem.set_item('Trabajo', data.Trabajo);\r\n    oListItem.set_item('Twitter', data.Twitter);\r\n    oListItem.set_item('Blog', data.Blog);\r\n    oListItem.update();\r\n\r\n    context.executeQueryAsync(\r\n        Function.createDelegate(this, this.onQuerySucceeded),\r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\nfunction RemoveRecord(data)\r\n{\r\n    var oList = context.get_web().get_lists().getByTitle('Autores');\r\n    this.oListItem = oList.getItemById(data.Id);\r\n    oListItem.deleteObject();\r\n\r\ncontext.executeQueryAsync(        Function.createDelegate(this, this.onQuerySucceeded),\r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\n<\/pre>\n<p>Con estas modificaciones ya tenemos listo el GRID \ud83d\ude42<br \/>\n<strong>Rese\u00f1a de Sencha Arquitect<\/strong><br \/>\nSencha tiene un IDE propio para desarrollar sus aplicaciones JavaScript utilizando su propio IDE, se puede obtener una versi\u00f3n de evaluaci\u00f3n desde el siguiente link <a href=\"http:\/\/www.sencha.com\/products\/architect\" target=\"_blank\">http:\/\/www.sencha.com\/products\/architect\/<\/a>.  Este IDE nos ahorra bastante trabajo ya que nos evita introducir gran cantidad de c\u00f3digo. Tambi\u00e9n tiene inconvenientes ya que es una interfaz muy poco intuitiva para introducir c\u00f3digo, est\u00e1 m\u00e1s pensado para hacer bocetos de Apps y una vez el boceto esta validado empezamos a introducirle funcionalidad desde otro entorno.<br \/>\n Mi experiencia personal es que el IDE es bueno para el tema del dise\u00f1o, y la arquitectura de la aplicaci\u00f3n pero cuando hay que empezar a a\u00f1adir funcionalidad a la aplicaci\u00f3n a\u00fan le falta mucho.<br \/>\nEste es el entorno de trabajo de Sencha Arquitect<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura6.png\" width=\"1360\" height=\"688\" class=\"aligncenter\" \/><br \/>\nLa pantalla est\u00e1 dividida en tres partes:<br \/>\n\u2022\tA la izquierda las artefactos que podemos incluir en nuestra aplicaci\u00f3n.<br \/>\n\u2022\tEn el centro la visualizaci\u00f3n del desarrollo que estamos implementando (o el c\u00f3digo generado)<br \/>\n\u2022\tA la derecha visualizamos la arquitectura del proyecto generado, y en caso de tener alg\u00fan elemento seleccionado las propiedades, eventos y funciones que llevan asociados.<br \/>\nLa gran ventaja de utilizarlo es que tenemos el c\u00f3digo mucho mejor estructurado, cada artefacto introducido en nuestra APP lo tenemos en un fichero separado. \u00bfQu\u00e9 ventajas tiene? Pues de esta forma tenemos nuestro c\u00f3digo mucho m\u00e1s escalable y mantenible. \u00bfDesventaja? Que tenemos una aplicaci\u00f3n m\u00e1s pesada, ya que es necesario descargarse m\u00e1s ficheros para que empiece a funcionar.<\/p>\n<h2>Conclusiones<\/h2>\n<p>En estos o dos art\u00edculos hemos visto dos Frameworks JavaScript totalmente distintos, uno m\u00e1s estricto en cuanto a la forma de desarrollar como es ExtJS y otro un tanto m\u00e1s din\u00e1mico como es el de Kendo. Pero lo bueno es que ambos Frameworks los podemos utilizar dentro de SharePoint, ya que nuestro servidor favorito es una plataforma en la que podemos desarrollar haciendo uso de casi cualquier recurso existente, lo que hace cualquier desarrollador web pueda ser un desarrollador de SharePoint.<br \/>\n Ahora bien si me pregunt\u00e1is cu\u00e1l de los dos Frameworks expuestos me gusta m\u00e1s, mi respuesta es que depende de lo que queramos hacer y depende del proyecto.<br \/>\n Ventajas de Kendo son:<br \/>\n&#8211;\tExige una curva de aprendizaje mucho menor por parte del desarrollador<br \/>\n&#8211;\tM\u00e1s sencillo de maquetar.<br \/>\n&#8211;\tMucho m\u00e1s soporte en foros al basarse en JQuery<br \/>\nVentajas de uso de ExtJS:<br \/>\n&#8211;\tAplicaciones mucho mejor estructuradas<br \/>\n&#8211;\tMejor funcionamiento en todos los navegadores<br \/>\n&#8211;\tPosibilidad de crear aplicaciones m\u00f3viles<br \/>\n&#8211;\tMucha m\u00e1s documentaci\u00f3n<\/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>Como cada tres meses acaba de salir la revista digital dedicada a nuestro servidor favorito SharePoint, viene cargada de articulos de gran calidad y con dos novedades interesantes que tienen que ver con nostros. Por un lado a partir de &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/\">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":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,6,11],"tags":[60,19,69],"class_list":["post-818","post","type-post","status-publish","format-standard","hentry","category-buenas-practicas","category-encamina","category-sharepoint-2013","tag-compartimoss","tag-javascript","tag-sencha"],"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>[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II - Desarrollando sobre SharePoint<\/title>\n<meta name=\"description\" content=\"En el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"En el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.\" \/>\n<meta name=\"twitter:image\" content=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.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=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II\",\"datePublished\":\"2013-09-03T10:00:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/\"},\"wordCount\":3057,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\\\/figura1.png\",\"keywords\":[\"compartimoss\",\"JavaScript\",\"sencha\"],\"articleSection\":[\"buenas practicas\",\"encamina\",\"sharepoint 2013\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/\",\"name\":\"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\\\/figura1.png\",\"datePublished\":\"2013-09-03T10:00:24+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"En el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\\\/figura1.png\",\"contentUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\\\/figura1.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 n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II - Desarrollando sobre SharePoint","description":"En el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.","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":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/","twitter_card":"summary_large_image","twitter_title":"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II - Desarrollando sobre SharePoint","twitter_description":"En el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.","twitter_image":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II","datePublished":"2013-09-03T10:00:24+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/"},"wordCount":3057,"image":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.png","keywords":["compartimoss","JavaScript","sencha"],"articleSection":["buenas practicas","encamina","sharepoint 2013"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/","name":"[CompartiMOSS n17] Usar Framework JavaScript en nuestros desarrollos SharePoint II - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.png","datePublished":"2013-09-03T10:00:24+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"En el art\u00edculo de este n\u00famero vamos a continuar introduciendo Frameworks JavaScript en esta ocasi\u00f3n es el turno de ExtJS de Sencha. ExtJS es uno de los Frameworks m\u00e1s populares y m\u00e1s utilizados para el desarrollo web. Proporciona un rendimiento muy r\u00e1pido y veloz en las aplicaciones que lo utilizan debido a que el lenguaje generado es perfectamente interpretado por los navegadores modernos. Otra de las ventajas que tiene ExtJS es que tiene un IDE propio (Sencha Arquitect), que aunque no es Visual Studio, es una interfaz relativamente simple y nos ahorra bastante trabajo.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-n17-usar-framework-javascript-en-nuestros-desarrollos-sharepoint-ii\/#primaryimage","url":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.png","contentUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/Usar-Framework-JavaScript-en-nuestros-desarrollos-SharePoint-Parte-II\/figura1.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\/818","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=818"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/818\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}