{"id":256,"date":"2013-04-23T10:00:41","date_gmt":"2013-04-23T09:00:41","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=256"},"modified":"2013-07-16T10:07:32","modified_gmt":"2013-07-16T09:07:32","slug":"sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/","title":{"rendered":"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript"},"content":{"rendered":"<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-259\" title=\"Ninja Jquery\" alt=\"LogoJ query\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery-157x300.png\" width=\"157\" height=\"300\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery-157x300.png 157w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery.png 249w\" sizes=\"auto, (max-width: 157px) 100vw, 157px\" \/><\/a>En la anterior <a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/2013\/04\/16\/sharepoint-app-operaciones-basicas-utilizando-la-api-rest\/\" target=\"_blank\">post<\/a> vimos como pod\u00edamos hacer uso las operaciones b\u00e1sicas de la <strong>API Rest<\/strong>, en este post vamos a introducir un poco el modelo de objetos en cliente utilizando <strong>JavaScript<\/strong>. Por lo general JavaScript ha sido un lenguaje poco querido por los desarrolladores de .NET, en esta nueva versi\u00f3n de SharePoint nos obligan un poco a reciclarnos y aprender \u00a0este lenguaje de programaci\u00f3n y sacar todas sus bondades (que las tiene). No va a ser en este post en el que las describa,debido a que a\u00fan no dispongo de los conocimientos propios para poder explicar este lenguaje y aconsejar sobre \u00e9l, esta tarea mejor para expertos en esta materia como mi compa\u00f1ero <a href=\"https:\/\/twitter.com\/soyrochus\" target=\"_blank\">Iwan<\/a> (<a href=\"http:\/\/blogs.encamina.com\/returnvalue\/\" target=\"_blank\">Return Value<\/a>). Pero si que os voy a introducir operaciones que se pueden utilizar haciendo uso de este lenguaje contra nuestro querido Servidor.<br \/>\n<!--more--><br \/>\nPara empezar con este ejemplo abrimos el Visual Studio 2012, seleccionamos un proyecto Office\/SharePoint y escogemos la plantilla Aplicaci\u00f3n para SharePoint 2013, y indicamos el nombre de nuestro sitio y seleccionamos el tipo de Alojamiento (AutoHosted ya que va a estar alojado en nuestro Office 365) tal y como se muestra en la siguiente\u00a0imagen:<\/p>\n<p style=\"text-align: left\"><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/SeleccionaProyecto.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-262 aligncenter\" title=\"Proyecto AutoHosted\" alt=\"Proyecto AutoHosted\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/SeleccionaProyecto-300x219.png\" width=\"300\" height=\"219\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/SeleccionaProyecto-300x219.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/SeleccionaProyecto.png 686w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Una vez nos crea el proyecto vemos que nos ha creado una P\u00e1gina aspx y una carpeta con Script, en esta carpeta con Script a\u00f1adimos un fichero<strong> javascript<\/strong> llamado App.js (En el que posteriormente a\u00f1adiremos la l\u00f3gica que le queremos implementar en la aplicaci\u00f3n). Pero antes de nada el primer paso es hacer referencia a las\u00a0librer\u00edas\u00a0que vamos a utilizar para ello tendremos que a\u00f1adir las dentro de la p\u00e1gina donde las vayamos a utilizar en nuestro caso en el Default.aspx:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script type=&quot;text\/javascript&quot; src=&quot;http:\/\/ajax.aspnetcdn.com\/ajax\/4.0\/1\/MicrosoftAjax.js&quot;&gt;\/\/ &lt;!&#x5B;CDATA&#x5B;\r\n\r\n\/\/ ]]&gt;&lt;\/script&gt;\r\n&lt;script type=&quot;text\/javascript&quot; src=&quot;\/_layouts\/15\/sp.runtime.js&quot;&gt;\/\/ &lt;!&#x5B;CDATA&#x5B;\r\n\r\n\/\/ ]]&gt;&lt;\/script&gt;\r\n&lt;script type=&quot;text\/javascript&quot; src=&quot;\/_layouts\/15\/sp.js&quot;&gt;\/\/ &lt;!&#x5B;CDATA&#x5B;\r\n\r\n\/\/ ]]&gt;&lt;\/script&gt;\r\n<\/pre>\n<p>La primera de ellas hace referencia referencia a la biblioteca AJAX desde la CDN de Microsoft y las otras dos son las librer\u00edas propias para obtener las conexiones b\u00e1sicas de SharePoint.<br \/>\nEl primer ejemplo de hoy vamos a ver las listas que tenemos en nuestro sitio para ello nos basta con un c\u00f3digo como el siguiente:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\nfunction retrieveAllListProperties(siteUrl) {\r\n    var clientContext = new SP.ClientContext(siteUrl);\r\n    var oWebsite = clientContext.get_web();\r\n    this.collList = oWebsite.get_lists();\r\n    clientContext.load(collList);\r\n    clientContext.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\n    var listInfo = '';\r\n    var listEnumerator = collList.getEnumerator();\r\n    while (listEnumerator.moveNext()) {\r\n        var oList = listEnumerator.get_current();\r\n        listInfo += 'Title: ' + oList.get_title() + ' Created: ' +\r\n            oList.get_created().toString() + '\\n';\r\n    }\r\n    alert(listInfo);\r\n}\r\n\r\nfunction onQueryFailed(sender, args) {\r\n    alert('Request failed. ' + args.get_message() +\r\n        '\\n' + args.get_stackTrace());\r\n}\r\n<\/pre>\n<p>Para las personas que hemos trabajado un poco con el modelo de objetos de cliente de .NET la verdad es que es pr\u00e1cticamente igual, tenemos los mismos m\u00e9todos y la \u00fanica dificultad es conocer JavaScript.<br \/>\nOtra de las opciones que podemos hacer utilizando, es hacer consultas CAML sobre los elementos de una lista para ello con un ejemplo como el siguiente lo solucionamos de una manera muy sencilla:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nfunction retrieveListItems(siteUrl) {\r\n    var clientContext = new SP.ClientContext(siteUrl);\r\n    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');\r\n    var camlQuery = new SP.CamlQuery();\r\n    camlQuery.set_viewXml(\r\n        '' +\r\n        '1' +\r\n        '10'\r\n    );\r\n    this.collListItem = oList.getItems(camlQuery);\r\n    clientContext.load(collListItem);\r\n    clientContext.executeQueryAsync(\r\n        Function.createDelegate(this, this.onQuerySucceeded),\r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\n\r\nfunction onQuerySucceeded(sender, args) {\r\n    var listItemInfo = '';\r\n    var listItemEnumerator = collListItem.getEnumerator();\r\n    while (listItemEnumerator.moveNext()) {\r\n        var oListItem = listItemEnumerator.get_current();\r\n        listItemInfo += '\\nID: ' + oListItem.get_id() +\r\n            '\\nTitle: ' + oListItem.get_item('Title') +\r\n            '\\nBody: ' + oListItem.get_item('Body');\r\n    }\r\n    alert(listItemInfo.toString());\r\n}\r\nfunction onQueryFailed(sender, args) {\r\n    alert('Request failed. ' + args.get_message() +\r\n        '\\n' + args.get_stackTrace());\r\n}\r\n<\/pre>\n<p>Ahora como podemos hacer operaciones de a\u00f1adir, modificar, elementos sobre una lista:<br \/>\nPara <strong>crear elementos de una lista<\/strong>  debe crear un objeto ListItemCreationInformation, establecer sus propiedades y pasarlo como par\u00e1metro a la funci\u00f3n addItem(parameters) del objeto List. Establezca las propiedades en el objeto de elemento de lista que este m\u00e9todo devuelve y luego llame a la funci\u00f3n update(), como se ve en el ejemplo siguiente:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nfunction createListItem(siteUrl) {\r\n    var clientContext = new SP.ClientContext(siteUrl);\r\n    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');\r\n\r\n    var itemCreateInfo = new SP.ListItemCreationInformation();\r\n    this.oListItem = oList.addItem(itemCreateInfo);\r\n    oListItem.set_item('Title', 'My New Item!');\r\n    oListItem.set_item('Body', 'Hello World!');\r\n    oListItem.update();\r\n    clientContext.load(oListItem);\r\n    clientContext.executeQueryAsync(\r\n        Function.createDelegate(this, this.onQuerySucceeded),\r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\nfunction onQuerySucceeded() {\r\n    alert('Item created: ' + oListItem.get_id());\r\n}\r\nfunction onQueryFailed(sender, args) {\r\n    alert('Request failed. ' + args.get_message() +\r\n        '\\n' + args.get_stackTrace());\r\n}\r\n<\/pre>\n<p>Para <strong> actualizar un elemento de lista <\/strong> Para establecer la mayor\u00eda de las propiedades del elemento de lista, se puede usar un indizador de columna para realizar una asignaci\u00f3n y llamar a la funci\u00f3n update() para que los cambios se realicen al llamar a executeQueryAsync(succeededCallback, failedCallback). En el ejemplo siguiente se establece el t\u00edtulo del tercer elemento de la lista de anuncios.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nFunction updateListItem(siteUrl) {\r\n    var clientContext = new SP.ClientContext(siteUrl);\r\n    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');\r\n    this.oListItem = oList.getItemById(3);\r\n    oListItem.set_item('Title', 'My Updated Title');\r\n    oListItem.update();\r\n    clientContext.executeQueryAsync(\r\n        Function.createDelegate(this, this.onQuerySucceeded),\r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\nfunction onQuerySucceeded() {\r\n    alert('Item updated!');\r\n}\r\nfunction onQueryFailed(sender, args) {\r\n    alert('Request failed. ' + args.get_message() +\r\n        '\\n' + args.get_stackTrace());\r\n}\r\n<\/pre>\n<p>Para <strong>eliminar un elemento de lista<\/strong>: llame a la funci\u00f3n deleteObject() del objeto. En el siguiente ejemplo se usa la funci\u00f3n getItemById(id) para devolver el segundo elemento de la lista y luego se elimina el elemento. SharePoint mantiene los identificadores de enteros de los elementos dentro de las colecciones aunque se hayan eliminado. Por ejemplo, el segundo elemento de una lista podr\u00eda no tener el 2 como identificador. Si se llama a la funci\u00f3n deleteObject() para un elemento que no existe, se devuelve la excepci\u00f3n ServerException.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nfunction deleteListItem(siteUrl) {\r\n    this.itemId = 2;\r\n    var clientContext = new SP.ClientContext(siteUrl);\r\n    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');\r\n    this.oListItem = oList.getItemById(itemId);\r\n    oListItem.deleteObject();\r\n    clientContext.executeQueryAsync(\r\n        Function.createDelegate(this, this.onQuerySucceeded),\r\n        Function.createDelegate(this, this.onQueryFailed)\r\n    );\r\n}\r\nfunction onQuerySucceeded() {\r\n    alert('Item deleted: ' + itemId);\r\n}\r\nfunction onQueryFailed(sender, args) {\r\n    alert('Request failed. ' + args.get_message() +\r\n        '\\n' + args.get_stackTrace());\r\n}\r\n<\/pre>\n<p><strong>Autentificaci\u00f3n<\/strong><br \/>\nPara realizar la autentificaci\u00f3n al hacer llamadas entre distintos dominios ya que si queremos realizar llamadas al sitio donde este alojado SharePoint necesitaremos de alguna forma autentificarnos, al alojar la APP dentro de un SharePoint Online todo es m\u00e1s sencillo pero hace falta realizar algunas modificaciones en las llamadas y esas no es otra que llamar a esta funci\u00f3n SP.ProxyWebRequestExecutorFactory (que hace que sea transparente la invocaci\u00f3n desde una APP al contenido que tenemos dentro de nuestro site. Por ejemplo si queremos consultar el titulo de nuestro Site nos hace falta el siguiente c\u00f3digo:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nfunction execCrossDomainRequest() {\r\n    \/\/ context: The ClientContext object provides access to\r\n    \/\/      the web and lists objects.\r\n    \/\/ factory: Initialize the factory object with the\r\n    \/\/      app web URL.\r\n    var context;\r\n    var factory;\r\n    var appContextSite;\r\n\r\n    context = new SP.ClientContext(appweburl);\r\n    factory = new SP.ProxyWebRequestExecutorFactory(appweburl);\r\n    context.set_webRequestExecutorFactory(factory);\r\n    appContextSite = new SP.AppContextSite(context, hostweburl);\r\n\r\n    this.web = appContextSite.get_web();\r\n    context.load(this.web);\r\n\r\n    \/\/Execute the query with all the previous\r\n    \/\/  options and parameters\r\n    context.executeQueryAsync(\r\n        Function.createDelegate(this, successHandler),\r\n        Function.createDelegate(this, errorHandler)\r\n    );\r\n    \/\/ Function to handle the success event.\r\n    \/\/ Prints the host web's title to the page.\r\n    function successHandler() {\r\n        document.getElementById(&quot;HostwebTitle&quot;).innerHTML =\r\n            &quot;&lt;b&gt;&quot; + this.web.get_title() + &quot;&lt;\/b&gt;&quot;;\r\n    }\r\n\r\n    \/\/ Function to handle the error event.\r\n    \/\/ Prints the error message to the page.\r\n    function errorHandler(data, errorCode, errorMessage) {\r\n        document.getElementById(&quot;HostwebTitle&quot;).innerText =\r\n            &quot;Could not complete cross-domain call: &quot; + errorMessage;\r\n    }\r\n}\r\n<\/pre>\n<h2><strong>Conclusi\u00f3n<\/strong><\/h2>\n<p>Con estos ejemplos son solo unas de las acciones b\u00e1sicas que podemos hacer con el modelo de objetos cliente de JavaScript, como hemos visto sino lo ponemos en contexto no sabemos bien si es JavaScript o bien es C#.<br \/>\nHa diferencia de lo que ocurr\u00eda en la versi\u00f3n de 2010, ahora con el modelo de objetos en cliente podemos hacer lo mismo que con el modelo de objetos de servidor, lo cual es una grandisima ventaja ya que dado que ahora los requisitos son de multidispositivo bien sea tablets, smartphone, o los antiguos navegadores podemos realizar aplicaciones que utilicen SharePoint en alguna de sus variantes y podemos hacer aplicaciones de calidad. Ahora que disponemos de las herramientas oportunas no nos queda otra que potenciar nuestra comprensi\u00f3n sobre JavaScript e introducir sus mejoras en nuestros desarrollos.<\/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>En la anterior post vimos como pod\u00edamos hacer uso las operaciones b\u00e1sicas de la API Rest, en este post vamos a introducir un poco el modelo de objetos en cliente utilizando JavaScript. Por lo general JavaScript ha sido un lenguaje &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/\">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":[34],"tags":[],"class_list":["post-256","post","type-post","status-publish","format-standard","hentry","category-app"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript - Desarrollando sobre SharePoint<\/title>\n<meta name=\"description\" content=\"Introducci\u00f3n al modelo de objetos en cliente de JavaScript en las Apps de SharePoint, como aprender a utilizarlo y adaptarnos a los nuevos est\u00e1ndares de la web.\" \/>\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\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"Introducci\u00f3n al modelo de objetos en cliente de JavaScript en las Apps de SharePoint, como aprender a utilizarlo y adaptarnos a los nuevos est\u00e1ndares de la web.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery.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=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript\",\"datePublished\":\"2013-04-23T09:00:41+00:00\",\"dateModified\":\"2013-07-16T09:07:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/\"},\"wordCount\":1547,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2013\\\/04\\\/LogoJquery-157x300.png\",\"articleSection\":[\"APP\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/\",\"name\":\"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2013\\\/04\\\/LogoJquery-157x300.png\",\"datePublished\":\"2013-04-23T09:00:41+00:00\",\"dateModified\":\"2013-07-16T09:07:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"Introducci\u00f3n al modelo de objetos en cliente de JavaScript en las Apps de SharePoint, como aprender a utilizarlo y adaptarnos a los nuevos est\u00e1ndares de la web.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2013\\\/04\\\/LogoJquery.png\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2013\\\/04\\\/LogoJquery.png\",\"width\":249,\"height\":474},{\"@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":"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript - Desarrollando sobre SharePoint","description":"Introducci\u00f3n al modelo de objetos en cliente de JavaScript en las Apps de SharePoint, como aprender a utilizarlo y adaptarnos a los nuevos est\u00e1ndares de la web.","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\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/","twitter_card":"summary_large_image","twitter_title":"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript - Desarrollando sobre SharePoint","twitter_description":"Introducci\u00f3n al modelo de objetos en cliente de JavaScript en las Apps de SharePoint, como aprender a utilizarlo y adaptarnos a los nuevos est\u00e1ndares de la web.","twitter_image":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript","datePublished":"2013-04-23T09:00:41+00:00","dateModified":"2013-07-16T09:07:32+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/"},"wordCount":1547,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery-157x300.png","articleSection":["APP"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/","name":"[SharePoint APP] Introducci\u00f3n al modelo de objetos cliente de JavaScript - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery-157x300.png","datePublished":"2013-04-23T09:00:41+00:00","dateModified":"2013-07-16T09:07:32+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"Introducci\u00f3n al modelo de objetos en cliente de JavaScript en las Apps de SharePoint, como aprender a utilizarlo y adaptarnos a los nuevos est\u00e1ndares de la web.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-app-introduccion-al-modelo-de-objetos-cliente-de-javascript\/#primaryimage","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery.png","contentUrl":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2013\/04\/LogoJquery.png","width":249,"height":474},{"@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\/256","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=256"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}