<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8876593780817784227</id><updated>2012-01-10T16:13:50.030+01:00</updated><category term='xsl'/><category term='Windows 8'/><category term='javascript'/><category term='Designer'/><category term='seguridad'/><category term='certifications'/><category term='fast'/><category term='social'/><category term='[offtopic]'/><category term='crm'/><category term='calidad'/><category term='Office365'/><category term='ALM'/><category term='fba'/><category term='csp'/><category term='variations'/><category term='licensing'/><category term='CCF'/><category term='Workflows'/><category term='CRM2011'/><category term='Eventos'/><category term='despliegue'/><category term='access'/><category term='surface'/><category term='CompartiMOSS'/><category term='SandBox'/><category term='branding'/><category term='blogs'/><category term='site templates'/><category term='wcf'/><category term='redmond'/><category term='virtualización'/><category term='custom fields'/><category term='iis'/><category term='azure'/><category term='streetcare'/><category term='BiscayTIK'/><category term='SharePoint 2010'/><category term='autenticación'/><category term='temas'/><category term='CEUS'/><category term='ws2008r2'/><category term='sug.cat'/><category term='publishing'/><category term='visual studio'/><category term='claims'/><category term='vb6'/><category term='teched'/><category term='site definitions'/><category term='spenta'/><category term='feature'/><category term='SPC2009'/><category term='multi-lenguaje'/><category term='esp'/><category term='search'/><category term='cks'/><category term='installacion'/><category term='microsoft'/><category term='content type'/><category term='Sistemas'/><category term='Lync Server'/><category term='moss'/><category term='vista'/><category term='.NET'/><category term='InfoPath'/><title type='text'>El Blog de David Martos</title><subtitle type='html'>SharePoint... desde mi punto de vista</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default?start-index=101&amp;max-results=100'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>169</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-246038054204858460</id><published>2012-01-05T15:40:00.001+01:00</published><updated>2012-01-10T16:13:50.035+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>Material de estudio para certificaciones</title><content type='html'>&lt;p&gt;Como ya viene siendo habitual, el inicio de un nuevo año trae consigo un montón de promesas para los próximos 365 días (366 en este caso). Una de las eternas promesas recurrentes es poner más foco en las certificaciones para completar así un poquito más mi perfil profesional. No soy muy partidario de dar valor al hecho de disponer de las certificaciones (en muchos casos se obtienen mucho más fácilmente de lo que convendría) pero sí estoy convencido de que si estas certificaciones se obtienen a través del trabajo y del estudio aportan el valor que deberían al perfil de uno.&lt;/p&gt;  &lt;p&gt;En relación con este asunto, me han ofrecido la posibilidad de evaluar el material de la compañía uCertify y he empezado a echarle un ojo a la preparación del examen &lt;a href="http://www.ucertify.com/exams/Microsoft/70-667.html"&gt;70-667&lt;/a&gt; (Configuring SharePoint 2010) ya que aunque tengo bastantes conocimientos sobre la plataforma, me considero más bien desarrollador y podré evaluar positivamente si el material me ayuda a obtener más conocimientos que me sirvan de cara al eventual examen.&lt;/p&gt;  &lt;p&gt;De momento tengo la sensación de que el material es relativamente bueno. No es un compendio de 70 preguntas y respuestas que, casualmente, coinciden con el examen final, sino que es una aplicación que te guía pregunta a pregunta ofreciendote información en cada una de ellas de cara, no sólo a que memorices la respuesta correcta sino que entiendas por qué una opción es válida o no.&lt;/p&gt;  &lt;p&gt;Dentro de dos o tres semanas volveré a escribir en este blog con más información acerca de la utilidad de la herramienta y, si merece la pena con algún código de promoción para que podáis beneficiaros de alguna oferta si es que estáis interesados en adquirir alguno de sus productos.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-246038054204858460?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/246038054204858460/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=246038054204858460' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/246038054204858460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/246038054204858460'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2012/01/material-de-estudio-para.html' title='Material de estudio para certificaciones'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-7134277622446525223</id><published>2011-12-21T18:18:00.001+01:00</published><updated>2011-12-21T18:18:36.177+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>[offtopic] Beezy y Papa Noel</title><content type='html'>&lt;p&gt;Ya me ha tocado hablar de Beezy en este mismo espacio unas cuantas veces (aunque muchas de las veces no mencione directamente el producto, siempre está detrás de lo que vengo haciendo estos últimos meses). El caso es que estas son sus primeras navidades. Bueno, en realidad podríamos decir que son las segundas porque a estas alturas del año pasado el concepto ya se estaba trabajando y teníamos algunas cosas desarrolladas, pero la verdad es que realidad estas son las primeras navidades en las que Beezy está funcionando al 100%. Tanto es así que el mismísimo Papa Noel se ha decidido a usarlo para optimizar su productividad con el trabajo que se le viene encima en los próximos días.&lt;/p&gt;  &lt;p&gt;Aquí os dejo un video para que lo veáis en funcionamiento. Espero que a vosotros también os saque una sonrisa como nos la ha sacado a los miembros del equipo de desarrollo cuando lo hemos visto.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:fe94855d-a841-4ecb-bd2f-d8f6b42596f2" class="wlWriterEditableSmartContent"&gt;&lt;div id="e2e63a70-f525-48f0-8d95-e20c6cb08de3" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=TWQUH0QqeGQ" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/-LRmByPPKgJ8/TvIU6r7RNNI/AAAAAAAAAqM/Nydis-_iWxc/videoa414e9450a04%25255B6%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('e2e63a70-f525-48f0-8d95-e20c6cb08de3'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/TWQUH0QqeGQ?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/TWQUH0QqeGQ?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;Beezy y Papa Noel&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Y de regalo, aquí tenéis algo que espero que os saque aún más sonrisas que el video anterior.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sendables.jibjab.com/view/D73s6y9TmMHuH4Yb"&gt;http://sendables.jibjab.com/view/D73s6y9TmMHuH4Yb&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-7134277622446525223?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/7134277622446525223/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=7134277622446525223' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7134277622446525223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7134277622446525223'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/12/offtopic-beezy-y-papa-noel.html' title='[offtopic] Beezy y Papa Noel'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-LRmByPPKgJ8/TvIU6r7RNNI/AAAAAAAAAqM/Nydis-_iWxc/s72-c/videoa414e9450a04%25255B6%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4203839004559084329</id><published>2011-12-20T09:10:00.001+01:00</published><updated>2011-12-20T09:15:31.627+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CompartiMOSS'/><title type='text'>Número 10 de la revista compartimos</title><content type='html'>&lt;p&gt;Hoy ha sido publicado el &lt;a href="http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx"&gt;número 10 de CompartiMOSS&lt;/a&gt;, la revista de referencia del mundo SharePoint en habla hispana. Este mes el número viene cargadito con todos estos artículos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Editorial &lt;/li&gt;    &lt;li&gt;Cómo crear una página de error personalizada en SharePoint 2010 (Luis Máñez) &lt;/li&gt;    &lt;li&gt;Aplicando buenas prácticas a una solución SandBoxed que despliega noticias gráficas (Juan Manuel Herrera) &lt;/li&gt;    &lt;li&gt;SharePoint Governance - I (Randy Williams - Roberto Delgado) &lt;/li&gt;    &lt;li&gt;Como remplazar controles delegados en sitios de SharePoint 2010 (Juan Carlos González Martín) &lt;/li&gt;    &lt;li&gt;Datos externos desde Office365 (Mario Cortés Flores) &lt;/li&gt;    &lt;li&gt;Gestión de documentos para ISO 9001 con SharePoint 2010 (Juan Emilio Martinez) &lt;/li&gt;    &lt;li&gt;Entrevista con Daniel Seara &lt;/li&gt;    &lt;li&gt;Timer Jobs en SharePoint 2010 (Carlos Ariel Dantiags) &lt;/li&gt;    &lt;li&gt;NPS ENGINE, herramienta de Diseño de Procesos para SharePoint &lt;/li&gt;    &lt;li&gt;el caso de los Centros Tecnológicos de Microsoft (MTC) (Roberto Delgado) &lt;/li&gt;    &lt;li&gt;CUDISS - SharePoint BI para hospitales (Luis Máñez) &lt;/li&gt;    &lt;li&gt;SSD: El Síndrome de la SharePoint Dependencia (Juan Pablo Pussacq Laborde) &lt;/li&gt;    &lt;li&gt;Sitios web públicos en Office 365 (Alberto Diaz Martin) &lt;/li&gt;    &lt;li&gt;Aprovisionamiento de Páginas Wiki en SharePoint 2010 (David Martos) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Como podéis leer, tengo el placer y el privilegio (aunque por las fechas que son tendría que decir me llena de orgullo y satisfacción) de formar parte del índice de este número con un artículo en el que hablo de aprovisionamiento de páginas Wiki en SharePoint 2010 y del que podéis encontrar el código relacionado en &lt;a href="http://spwikiprovisioning.codeplex.com"&gt;http://spwikiprovisioning.codeplex.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Por si no escribo más este año (algunos ya sabéis que estoy pendiente del teléfono para desaparecer una temporadita) desearos a todos unas felices fiestas y una gran entrada de año. Sed buenos y no hagáis nada que yo haría, ¿o era al revés? #whatever&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4203839004559084329?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4203839004559084329/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4203839004559084329' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4203839004559084329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4203839004559084329'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/12/numero-10-de-la-revista-compartimos.html' title='Número 10 de la revista compartimos'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-7525877018596701061</id><published>2011-12-19T17:28:00.001+01:00</published><updated>2011-12-19T17:28:38.267+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office365'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>La característica de dependencia 'PublishingSite' no se activa en este ámbito.</title><content type='html'>&lt;p&gt;Siguiendo con el anterior artículo en relación a la creación de sitios de alto nivel en Office365 y a raíz de la pregunta de un lector que necesitaba crear sitios con las características de publicación habilitadas, os doy un pequeño truco que os puede ser de utilidad. Resulta que si a la hora de crear la plantilla de sitio, éste tenía habilitadas dichas características, a la hora de activar la solución previamente exportada en un nuevo sitio nos encontraremos con un error similar al siguiente:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;La característica de dependencia 'PublishingSite' (Id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) para la característica 'xxx_Feature3' (Id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) no se activa en este ámbito.&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;La causa de este error radica en que al crear la plantilla de sitio, SharePoint detecta que la característica de publicación de ámbito ‘sitio’ tiene una dependencia en la característica de publicación de ámbito ‘colección de sitios’ y así lo marca en el paquete de despliegue. No obstante, el fichero &lt;strong&gt;onet.xml&lt;/strong&gt; que genera para nuestra plantilla ya incorpora la activación de ambas características, con lo que el error no debería aparecer. Aquí pongo un warning muy importante: &lt;u&gt;lo que voy a hacer a partir de ahora lo podéis hacer siempre que entendáis el motivo de lo que estáis haciendo, ya que en ciertas circunstancias podéis provocar efectos muy negativos.&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Para solucionar el error bastará con importar el fichero wsp que habéis exportado anteriormente desde Visual Studio mediante la plantilla de proyecto &lt;strong&gt;Import SharePoint Solution Package&lt;/strong&gt;. Una vez allí será necesario hacer doble click en aquella característica que nos está indicando el sistema (xxx_Feature3 en el ejemplo de arriba) y acceder al final de la pantalla, ahí donde están las &lt;strong&gt;Feature Activation Dependencies&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-uNrqsYvpLUA/Tu9mMurm-TI/AAAAAAAAAp8/ZQ2bNzzLVl4/s1600-h/image%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-75CoOOK4wtg/Tu9mNA-zrII/AAAAAAAAAqE/WVy7-wyJwoI/image_thumb%25255B8%25255D.png?imgmax=800" width="572" height="161" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Bastará con eliminar la dependencia y generar de nuevo la solución para resolver el problema anterior.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-7525877018596701061?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/7525877018596701061/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=7525877018596701061' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7525877018596701061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7525877018596701061'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/12/la-caracteristica-de-dependencia-no-se.html' title='La característica de dependencia &amp;#39;PublishingSite&amp;#39; no se activa en este ámbito.'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-75CoOOK4wtg/Tu9mNA-zrII/AAAAAAAAAqE/WVy7-wyJwoI/s72-c/image_thumb%25255B8%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-7806769627425377160</id><published>2011-12-19T15:57:00.001+01:00</published><updated>2011-12-19T15:57:11.782+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office365'/><title type='text'>Como crear sitios personalizados de primer nivel en Office365</title><content type='html'>&lt;p&gt;Desplegar soluciones en Office365 (SharePoint Online) supone normalmente muchos más quebraderos de cabeza que hacerlo sobre SharePoint &lt;em&gt;on-premises&lt;/em&gt;. Esto, evidentemente, es debido a las restricciones de seguridad que supone disponer de una solución hospedada en una granja compartida por miles de organizaciones.&lt;/p&gt;  &lt;p&gt;Uno de los escenarios típicos de desarrollo o personalización en Office365 es el que se conoce comunmente como “ad-hoc”.&amp;#160; En ese escenario un administrador crea un sitio vacío y, desde el nuevo sitio, los usuarios que tengan los permisos necesarios crean todos aquellos elementos que consideran necesarios. Cuando nuestros requerimientos van un poco más allá y necesitamos aprovisionar diferentes sitios con una estructura común la cosa se complica un poco, como veremos a continuación.&lt;/p&gt;  &lt;p&gt;El principal problema radica en la imposibilidad de subir soluciones de tipo granja, y en el hecho que las definiciones de sitio únicamente pueden incluirse en soluciones de este tipo. Una aproximación a las definiciones de sitio son las plantillas de sitio, pero éstas se despliegan normalmente sobre colecciones de sitios existentes. ¿Qué pasa si necesitamos crear sitios de primer nivel? La respuesta es más simple de lo que parece.&lt;/p&gt;  &lt;p&gt;Lo primero que deberemos hacer es crear el sitio tal y como lo queremos desplegar y, una vez lo tengamos, guardarlo como plantilla accediendo a la administración del sitio y pulsando sobre &lt;strong&gt;Save site as template&lt;/strong&gt; dentro del apartado &lt;strong&gt;Site Actions&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Lkmk092_nv0/Tu9Qps_KDjI/AAAAAAAAAos/p7If-JKePH0/s1600-h/image%25255B9%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-zha_IVLkUfI/Tu9QqT74wEI/AAAAAAAAAo0/Vz1YLqgCr8k/image_thumb%25255B12%25255D.png?imgmax=800" width="477" height="136" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El sistema solicitará un título y un nombre de fichero para la plantilla que queremos guardar. Una vez hecho esto podremos pulsar en el enlace &lt;strong&gt;Solutions&lt;/strong&gt; dentro del apartado &lt;strong&gt;Galleries &lt;/strong&gt;de la administración del sitio.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-WdaO-ywnOio/Tu9Qq5-h9iI/AAAAAAAAAo8/69D2Be-2ivQ/s1600-h/image%25255B15%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-xlRi4jiACH0/Tu9QsB5XJMI/AAAAAAAAApE/tCORuA0N_yk/image_thumb%25255B19%25255D.png?imgmax=800" width="340" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En la galería encontraremos la plantilla que acabamos de guardar. Lo que haremos es pulsar sobre la plantilla y guardarla en algún rincón de nuestro disco duro.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Wu_NtR2kqz8/Tu9Qs69DIZI/AAAAAAAAApM/hLe_xxq0lJc/s1600-h/image%25255B21%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-lTlYxGTq-DQ/Tu9Qt0-Jb8I/AAAAAAAAApU/YxQWWulPWQE/image_thumb%25255B28%25255D.png?imgmax=800" width="629" height="227" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Si no queremos (o no necesitamos) hacer ningún cambio sobre la plantilla antes de desplegarla simplemente iremos a la administración de Office365 y crearemos una nueva colección de sitios privada.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-OoIRmB1wIU8/Tu9Qur5pE0I/AAAAAAAAApY/Y_rGDN1zFek/s1600-h/image%25255B27%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-vYgZ2xWKK5Q/Tu9QvX6AdhI/AAAAAAAAApk/ho-OK9q5J9U/image_thumb%25255B35%25255D.png?imgmax=800" width="331" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A la hora de seleccionar la plantilla escogeremos seleccionar una plantilla más adelante, dentro de la sección &lt;strong&gt;Personalizado&lt;/strong&gt; .&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-k-qv5NxHb5M/Tu9QwiezIdI/AAAAAAAAAps/ssjbJ7QlNmY/s1600-h/image%25255B26%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-ukPzQD1X9vE/Tu9QxQIO_vI/AAAAAAAAAp0/tg002_eacfU/image_thumb%25255B34%25255D.png?imgmax=800" width="430" height="275" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;De esta manera, una vez finalizado el proceso de creación de sitio podremos ir a la galería de soluciones, añadir la solución que hemos creado previamente y activarla. Finalmente, cuando intentemos acceder al sitio por primera vez veremos que en la sección &lt;strong&gt;Personalizado&lt;/strong&gt; nos aparece la plantilla de sitio que creamos al inicio.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-7806769627425377160?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/7806769627425377160/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=7806769627425377160' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7806769627425377160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7806769627425377160'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/12/como-crear-sitios-personalizados-de.html' title='Como crear sitios personalizados de primer nivel en Office365'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-zha_IVLkUfI/Tu9QqT74wEI/AAAAAAAAAo0/Vz1YLqgCr8k/s72-c/image_thumb%25255B12%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5436998703692617694</id><published>2011-12-05T11:52:00.001+01:00</published><updated>2011-12-05T11:52:49.102+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='ALM'/><title type='text'>SharePoint 2010 y ALM (II)</title><content type='html'>&lt;p&gt;Hace unas semanas &lt;a href="http://david-martos.blogspot.com/2011/10/sharepoint-2010-y-alm-es-posible.html"&gt;comencé&lt;/a&gt; una serie de artículos sobre ALM y SharePoint 2010. Después de haber realizado tres eventos presenciales al respecto y de haber recogido vuestro feedback en relación a los puntos que más os interesaban sigo con la lista de artículos que tenía prevista.&lt;/p&gt;  &lt;p&gt;Como os decía en la primera entrada introductoria, dos de los elementos fundamentales a tener en cuenta a la hora de plantearnos la gestión del ciclo de vida de nuestras aplicaciones son los procesos que llevaremos a cabo y las herramientas que utilizaremos para hacerlo. En este segundo artículo quiero reflexionar, precisamente, de las herramientas que nos pueden ayudar en el camino para mejorar la calidad de nuestros proyectos sobre SharePoint 2010.&lt;/p&gt;  &lt;p&gt;El primer nombre de nos tiene que venir a la cabeza cuando hablamos de ALM y de SharePoint 2010 es Team Foundation Server. Es un producto de Microsoft, al igual que SharePoint, y seguramente será el que mejor se integre con esta plataforma. Además es una suite completa que nos va a ayudar en todas las fases del desarrollo, desde la gestión inicial de los requerimientos a la gestión de las incidencias que aparezcan. Por otro lado, tenemos que tener en cuenta que es una herramienta con un coste elevado, que no quiere decir que sea un producto caro. Como siempre dependerá de si necesitamos o no todo lo que el producto nos ofrece y de si el producto cubre o no todas nuestras necesidades. Tened también en cuenta que cada criterio que escojamos para elegir una herramienta u otra tendrá una importancia determinada y una valoración relativa. Un ejemplo ilustrativo es el coste. No podemos centrarnos únicamente en lo que cuestan las licencias del software que vamos a utilizar, sino el tiempo que vamos a invertir en implementarla y lo que nos va a costar encontrar gente capacitada para hacerlo.&lt;/p&gt;  &lt;p&gt;En mi opinión, la herramienta que escojamos será lo de menos, siempre y cuando cumplamos el objetivo de gestionar adecuadamente el ciclo de vida de nuestras aplicaciones. No hay una verdad absoluta que indique que tienes que elegir una herramienta determinada cuando se cumplen ciertas condiciones. En nuestro caso particular, tuvimos en cuenta los conocimientos del equipo técnico de diferentes herramientas y al final decidimos no utilizar TFS por las siguientes razones:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Nuestro equipo técnico tenía más experiencia en otras herramientas &lt;/li&gt;    &lt;li&gt;El coste de la herramienta era demasiado elevado para asumirlo &lt;/li&gt;    &lt;li&gt;Necesitamos desarrollar aplicaciones para otros dispositivos como iPhone o Blackberry &lt;/li&gt;    &lt;li&gt;Necesitabamos tener todo montado en un corto espacio de tiempo &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;A partir de este momento hablaré, por lo tanto, de otras herramientas. En cualquier caso, en ningún momento desaconsejo el uso de TFS. Es más, si no conocéis otra alternativa que os satisfaga, siempre sería una opción recomendable. De hecho, si estáis interesados, os recomiento unos &lt;a href="http://www.sharepointnutsandbolts.com/search/label/Continuous%20Integration"&gt;artículos&lt;/a&gt; de Chris o'Brien que os darán muchas pistas sobre cómo comenzar (&lt;a href="http://www.sharepointnutsandbolts.com/search/label/Continuous%20Integration)"&gt;)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dicho esto, y para daros algún nombre, antes de descartar TFS tuvimos que buscar alternativas que nos permitieran gestionar el ciclo de vida de nuestras aplicaciones. Según el area de actuación, escogimos estas herramientas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Pruebas unitarias y de aceptación: NUnit y NCover &lt;/li&gt;    &lt;li&gt;Pruebas de aceptación: Cucumber y Capybara &lt;/li&gt;    &lt;li&gt;Build Server: Jenkins y MSBuild &lt;/li&gt;    &lt;li&gt;Gestión de requerimientos y de incidencias: Beezy &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Como tampoco pretendo escribir la biblia del ALM, sino incidir en aquellos puntos de dolor a la hora de trabajar con SharePoint 2010, los siguientes artículos los destinaré a cubrir aquellas áreas que más nos van a ayudar a mejorar la calidad de nuestros proyectos SharePoint. De aquí a final de año escribiré sobre los siguientes temas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Pruebas unitarias &lt;/li&gt;    &lt;li&gt;Pruebas de aceptación &lt;/li&gt;    &lt;li&gt;Automatización del despliegue &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Si, además de estos tres puntos, estáis interesados en algo concreto sobre lo que habéis visto en las sesiones que he ido haciendo, no dudéis en ponerme un comentario y haré todo lo posible por escribir también algo al respecto.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5436998703692617694?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5436998703692617694/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5436998703692617694' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5436998703692617694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5436998703692617694'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/12/sharepoint-2010-y-alm-ii.html' title='SharePoint 2010 y ALM (II)'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-7192528845297028590</id><published>2011-11-30T13:26:00.001+01:00</published><updated>2011-11-30T13:26:40.249+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Ojo al modificar tu servicio WCF…</title><content type='html'>&lt;p&gt;Hoy he pasado un mal rato intentando solucionar un problema que, al final, era más simple de lo que parecía. Resulta que para cambiar una pequeña funcionalidad tuve que añadir un parámetro a uno de los métodos de un servicio WCF. El cambio vendría ser de lo siguiente:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;[OperationContract,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;WebGet(UriTemplate = &lt;span style="color: #006080"&gt;&amp;quot;/MyMethod?parameter1={parameter1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;       ResponseFormat = WebMessageFormat.Json)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; MyMethod(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; parameter1);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;A lo siguiente:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;[OperationContract,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;WebGet(UriTemplate = &lt;span style="color: #006080"&gt;&amp;quot;/MyMethod?parameter1={parameter1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;       ResponseFormat = WebMessageFormat.Json)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; MyMethod(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; parameter1, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; parameter2);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Bueno, pues que sepáis que hacer esto hacía que cualquier otro método de mi servicio dejara de funcionar con un error 401 (cortesía de SharePoint). Tras depurar el error vi que en realidad la causa de mi problema era que el método está declarado como GET y que en el UriTemplate no estaba especificando mi nuevo parámetro. Al final el método debería quedar así:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;[OperationContract,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;WebGet(UriTemplate = &lt;span style="color: #006080"&gt;&amp;quot;/MyMethod?parameter1={parameter1}&amp;amp;parameter2={parameter2}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;       ResponseFormat = WebMessageFormat.Json)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; MyMethod(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; parameter1, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; parameter2);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Sí, lo sé, es una chorrada de artículo y no sólo no aporto nada sino que os he hecho perder el tiempo a la mayoría, pero de alguna manera tenía que expulsar la mala leche que me ha entrado al descubrir el motivo de que mi sitio hubiera dejado de funcionar.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-7192528845297028590?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/7192528845297028590/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=7192528845297028590' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7192528845297028590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7192528845297028590'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/11/ojo-al-modificar-tu-servicio-wcf.html' title='Ojo al modificar tu servicio WCF…'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1920626290204016936</id><published>2011-11-28T22:46:00.001+01:00</published><updated>2011-11-28T22:46:31.942+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>[EVENTO] SharePoint 2010 y ALM ¿Es posible?</title><content type='html'>&lt;p&gt;Antes de que lo digáis, no, no es un dejavú. Será el tercer evento relacionado con SharePoint 2010 y ALM en muy poco tiempo, pero es un tema que merece la pena y seguiré insistiendo tanto como pueda en su importancia. Después de haber hecho un evento presencial en Barcelona y otro presencial en Andorra, le ha llegado el momento a la gente del SUGES (Grupo de Usuarios de SharePoint de España) para aguantarme una hora y media hablando de conceptos tales como calidad de software, pruebas unitarias y de integración, tests de aceptación o integración contínua y, evidentemente, siempre desde el punto de vista del profesional del mundo del SharePoint.&lt;/p&gt;  &lt;p&gt;Sé que mezclar ambos mundos no es tarea sencilla, y sé que muchos de vosotros tendríais mucho que decir al respecto, tanto si trabajáis con SharePoint como si no, así que espero que se presente tanta gente como sea posible y me déis caña hasta en el carné de identidad.&lt;/p&gt;  &lt;p&gt;Decir también que dejé parada la serie de artículos que tengo preparada relacionados con esta temática, justamente esperando a estos tres eventos, con la intención de recoger vuestro feedback y, sobretodo, vuestras dudas. Os invito, por tanto, a que vengáis y me expongáis aquellas cuestiones que más despierten vuestro interés. Además de responder todas las dudas que me sea posible, prometo escribir tantos artículos específicos como sea necesario para resolver todas las cuestiones que se abran.&lt;/p&gt;  &lt;p&gt;Os dejo &lt;a href="http://geeks.ms/blogs/ciin/archive/2011/11/28/evento-alm-y-sharepoint-191-es-posible.aspx"&gt;aquí&lt;/a&gt; más información del evento así como los links de registro.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1920626290204016936?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1920626290204016936/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1920626290204016936' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1920626290204016936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1920626290204016936'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/11/evento-sharepoint-2010-y-alm-es-posible.html' title='[EVENTO] SharePoint 2010 y ALM ¿Es posible?'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-6461510409681307138</id><published>2011-11-28T22:31:00.001+01:00</published><updated>2011-11-28T22:31:21.684+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='claims'/><title type='text'>SharePoint 2010, Servicios REST y Claims</title><content type='html'>&lt;p&gt;Una de las cosas en las que estoy trabajando actualmente requería disponer de un servicio WCF REST para interactuar con SharePoint 2010. Este servicio se consumía mayoritariamente desde javascript via AJAX y no presentaba mayores problemas y hace un tiempo surgió la necesidad de hacer llamadas al mismo servicio desde diversos webparts y event receivers de manera que el punto de entrada al corazón de la aplicación fuera siempre el mismo. Todo parecía funcionar correctamente hasta que en una de las pruebas de despliegue detectamos un error extraño similar al siguiente:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The remote server returned an error: (400) Bad Request. Exception: System.Net.WebException: The remote server returned an error: (400) Bad Request.&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.Net.WebClient.UploadDataInternal&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Como el error en sí no era demasiado descriptivo metí unas cuantas trazas y utilicé algún que otro Fiddler para determinar la causa real del problema. Así es como di con el siguiente error:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Message: 403 FORBIDDEN﻿&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Perfecto, habíamos pasado de un Bad Request (400) a un Forbidden (403). Además tenía todo el sentido del mundo porque el error se daba únicamente en el entorno donde teníamos corriendo el código en una aplicación web con autenticación basada en Claims. Determinado el error y su más que probable causa, encontrar una solución era sólo cuestión de tiempo. Y la solución vino de la mano de Justin Kobel y de &lt;a href="http://justinkobel.com/post/2011/07/09/making-webclienthttprequest-calls-with-claims-authentication-in-sharepoint-2010.aspx"&gt;este&lt;/a&gt; artículo. &lt;/p&gt;  &lt;p&gt;Aquí no sólo encontramos el código necesario para realizar las llamadas de manera adecuada, sino que se explica también cómo hacer para distinguir si estamos en una aplicación web clásica o en una basada en notificaciones. Yo tuve que cambiar algo el código para adaptarlo a mis necesidades pero la esencia es la misma y consiste en aprovechar la cabecera Cookie para nuestra llamada, tal y como muestra el siguiente listado.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;webClient = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WebClient { Credentials = CredentialCache.DefaultNetworkCredentials };&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;webClient.Headers[HttpRequestHeader.ContentType] = &lt;span style="color: #006080"&gt;&amp;quot;application/json&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;IClaimsPrincipal principal = HttpContext.Current.User &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; IClaimsPrincipal;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (principal != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   NameValueCollection headers = HttpContext.Current.Request.Headers;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   webClient.Headers[&lt;span style="color: #006080"&gt;&amp;quot;Cookie&amp;quot;&lt;/span&gt;] = headers[&lt;span style="color: #006080"&gt;&amp;quot;Cookie&amp;quot;&lt;/span&gt;];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;var receivedData = webClient.UploadData(url, verb, memoryStream.ToArray());&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;var response = (T)jsonSerializer.ReadObject(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MemoryStream(receivedData));&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Veréis que en un punto del artículo hace el autor se salta la validación de los certificados en el momento de la autenticación. Si queréis información sobre como hacer esto de manera adecuada, os recomiendo &lt;a href="http://jordiruiznet.blogspot.com/2011/11/llamando-un-web-service-sobre-https-ssl.html"&gt;este&lt;/a&gt; artículo de mi compañero Jordi Ruiz.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-6461510409681307138?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/6461510409681307138/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=6461510409681307138' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6461510409681307138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6461510409681307138'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/11/sharepoint-2010-servicios-rest-y-claims.html' title='SharePoint 2010, Servicios REST y Claims'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-9102549085958613438</id><published>2011-11-21T13:38:00.001+01:00</published><updated>2011-11-21T13:38:03.742+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='ALM'/><title type='text'>[EVENTO] SharePoint 2010 y ALM</title><content type='html'>&lt;p&gt;El próximo viernes día 25 de Noviembre tendré el placer de participar en un evento para el grupo AndorraDotNet. En dicho evento daré algunas ideas sobre cómo se puede mejorar la calidad y la mantenibilidad de nuestro trabajo cuando desarrollamos sobre SharePoint 2010. &lt;/p&gt;  &lt;p&gt;Os dejo &lt;a href="http://andorradotnet.com/2011/11/18/nou-event-alm-sharepoint/"&gt;aquí&lt;/a&gt; un enlace con más información sobre el evento por si alguien se anima a acercarse a Andorra. Como siempre, no prometo nada sobre la calidad del ponente, pero se hará todo lo posible para que el tiempo que dediquéis esté bien invertido. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-9102549085958613438?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/9102549085958613438/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=9102549085958613438' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/9102549085958613438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/9102549085958613438'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/11/el-proximo-viernes-dia-25-de-noviembre.html' title='[EVENTO] SharePoint 2010 y ALM'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5596804437222902909</id><published>2011-11-09T12:33:00.001+01:00</published><updated>2011-11-09T12:33:54.929+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>Novedades, eventos y demás…</title><content type='html'>&lt;p&gt;Estas últimas semanas han sido un poco especiales. Entre los días de fiesta, los eventos y las certificaciones he andado más fuera de la oficina que dentro de ella. A modo de resumen, y también como recordatorio de lo que queda hasta fin de semana, deciros que la semana pasada se organizó el &lt;a href="http://david-martos.blogspot.com/2011/10/segundo-evento-presencial-del-sugcat.html"&gt;segundo evento presencial&lt;/a&gt; del Grupo de Usuarios de Catalunya de SharePoint (&lt;a href="http://www.linkedin.com/groups/SUGCAT-2883719?gid=2883719&amp;amp;trk=hb_side_g"&gt;SUG.CAT&lt;/a&gt;) y del cual podéis descargar todo el material &lt;a href="http://david-martos.blogspot.com/2011/11/disponible-la-documentacion-del-segundo.html"&gt;aquí&lt;/a&gt;. Aproveché también un momento de ocio para acercarme a un centro de certificaciones y sacarme, por fin, la certificación PRO de SharePoint 2010 Development que estaba pendiente desde hacía ya demasiados meses.&lt;/p&gt;  &lt;p&gt;Por otro lado, mañana estaré en Madrid junto a algunos compañeros MVP de SharePoint, Proyect Server y Office 365 en el CEUS, en la sesión de &lt;a href="http://geeks.ms/blogs/adiazmartin/archive/2011/11/04/evento-c-e-u-s-vii-mvps-y-ask-the-experts.aspx"&gt;Ask to the Experts&lt;/a&gt; de la tarde. Pasaré el día por allí así que si alguien quiere charlar seguro que podremos encontrar un hueco. De Madrid iré a Fuengirola a participar en los Community Days de Microsoft. Tanto de una cosa como de la otra, intentaré sacar algo de tiempo para escribir en este blog las experiencias que tenga.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5596804437222902909?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5596804437222902909/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5596804437222902909' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5596804437222902909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5596804437222902909'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/11/novedades-eventos-y-demas.html' title='Novedades, eventos y demás…'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1136120645290186490</id><published>2011-11-07T20:13:00.001+01:00</published><updated>2011-11-07T20:13:29.145+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Disponible la documentación del segundo evento presencial de SUG.CAT</title><content type='html'>&lt;p&gt;Ya podéis descargar &lt;a href="https://skydrive.live.com/?cid=7127a829d27ab782#!/?cid=7127a829d27ab782&amp;amp;sc=documents&amp;amp;uc=3&amp;amp;id=7127A829D27AB782%21643"&gt;aquí&lt;/a&gt; toda la información sobre el evento presencial del pasado jueves 3 de Noviembre. Podréis encontrar las dos presentaciones que hicimos el compañero Edin Kapic y yo, así como la sesión completa grabada en video. En lo que a mí respecta, empiezo a concentrarme en ampliar aquellas partes de la presentación que quedaron poco desarrolladas en forma de artículos en este blog. &lt;/p&gt;  &lt;p&gt;Si alguno de vosotros asistió al evento, o ha visto el video, y quiere información adicional sobre alguno de los puntos, que no dude en poner aquí un comentario para meterme presión &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh3.ggpht.com/-XF663LR76i0/Trgtze15A-I/AAAAAAAAAok/rq3M4l-jRI0/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1136120645290186490?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1136120645290186490/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1136120645290186490' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1136120645290186490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1136120645290186490'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/11/disponible-la-documentacion-del-segundo.html' title='Disponible la documentación del segundo evento presencial de SUG.CAT'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-XF663LR76i0/Trgtze15A-I/AAAAAAAAAok/rq3M4l-jRI0/s72-c/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5227195881644793168</id><published>2011-10-27T22:01:00.001+02:00</published><updated>2011-10-27T22:01:04.279+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='xsl'/><title type='text'>Anidando CDATAs, o cómo no morir personalizando el CoreResultsWebPart</title><content type='html'>&lt;p&gt;Cada vez que he tenido que hacer una personalización del elemento web de resultados de búsqueda de SharePoint (CoreResultsWebPart) me he encontrado con el mismo problema: el despliegue. La teoría es muy simple, sobre un sitio creado se edita el elemento web, se obtiene el valor del campo XSL, se edita con cualquier editor de XSL, se guarda el webpart con el nuevo valor de la propiedad hasta que obtenemos el resultado deseado y finalmente exportamos el elemento web para insertarlo donde nos convenga en nuestro paquete de despliegue.&lt;/p&gt;  &lt;p&gt;¿Pero qué pasa cuando metemos variables en juego? En ocasiones tenemos que introducir valores multilenguaje o urls relativas a la colección de sitios en la que nos encontramos. Por cierto, si habéis llegado hasta aquí y no he despertado vuestro interés, o bien es por que tenéis totalmente resuelto este problema, o bien es porque no os habéis visto en la necesidad de crear algo &lt;em&gt;productizable&lt;/em&gt;. Si, como digo, no he despertado vuestra curiosidad a estas alturas, os recomiendo no perder más tiempo en este artículo, ya escribiré cosas mejores &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh4.ggpht.com/-3qpQML1BJQ0/Tqm4fVbZYpI/AAAAAAAAAoc/XJF9PMNWW-Y/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" /&gt;.&lt;/p&gt;  &lt;p&gt;Bien, si seguís leyendo a estas alturas, imagino que estaréis esperando la fórmula mágica para hacer esta tarea un poquito más simple de lo habitual. Primero, dediquemos unas líneas al método tradicional. Una vez obtenido el valor para la propiedad XSL anteriormente mencionada, escapamos el código y lo insertamos en el XML de aprovisionamiento. Si habéis hecho esto en alguna ocasión, estaréis conmigo en que como se te escape algún pequeño error en este punto, depurarlo va a ser poco menos que imposible. Además, la próxima vez que hagas un cambio vas a tener que repetir todo el proceso. No sé a vosotros, pero a mí eso no me gusta nada de nada. Hasta hoy esto era un trance por el que tenía que pasar, pero el frotar se va a acabar…&lt;/p&gt;  &lt;p&gt;Una solución, como habréis deducido del título del post, consiste en anidar CDATAs. Pero, ¡si no se puede! ¡si no está permitido según el estándar! Hoy he encontrado una solución muy original de un tal Nat Dunn y que podéis encontrar &lt;a href="http://web-design.blogs.webucator.com/2010/11/20/nesting-cdata-blocks/"&gt;aquí&lt;/a&gt;. La solución consiste en utilizar el siguiente patrón, teniendo en cuenta que el primer CDATA contendría el elemento web y que el CDATA anidado contendría el valor de la propiedad XSL.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;span style="color: #008000"&gt;&amp;lt;!-- Contenido del CDATA anidado --&amp;gt;&lt;/span&gt;]]]]&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;]]&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;De acuerdo pero, ¿cómo queda esto al final? El siguiente listado muestra partes del fichero de aprovisionamiento con el que he hecho las pruebas. He dejado a propósito otra propiedad (SampleData) para demostrar las diferencias entre el modo habitual de tratar este tipo de propiedades y el modo que os estoy proponiendo.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;webParts&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;webPart&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/WebPart/v3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;metaData&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;type&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;...&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;metaData&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;data&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;properties&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;SampleData&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;All_Results&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;Result&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;workid&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;1&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/workid&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;rank&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;222&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/rank&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;title&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;Title of document or web page&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/title&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;author&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;Author of document or web page&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/author&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;size&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;1025&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/size&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;sitename&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;http://www.sample.com&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/sitename&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;url&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;http://www.sample.com/folder/document.aspx&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/url&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;imageurl&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;/_layouts/images/aspx16.gif&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/imageurl&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;description&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;This is the summary of the document or web page. The summary is generated from the original document based on matches with query terms. In some cases, the summary is a description provided by the author.&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/description&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;write&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;December 26, 2004&lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/write&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/Result&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: #ff0000"&gt;&amp;amp;lt;&lt;/span&gt;/All_Results&lt;span style="color: #ff0000"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Xsl&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;iso-8859-1&amp;quot;&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:stylesheet&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;              &lt;span style="color: #ff0000"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;              &lt;span style="color: #ff0000"&gt;xmlns:srwrt&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/WebParts/v3/searchresults/runtime&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;              &lt;span style="color: #ff0000"&gt;xmlns:ddwrt&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/WebParts/v2/DataView/runtime&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:output&lt;/span&gt; &lt;span style="color: #ff0000"&gt;method&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;xml&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;indent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;no&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Keyword&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ResultsBy&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ViewByUrl&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ShowDropDown&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #008000"&gt;&amp;lt;!-- Un montón de código aquí --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;              &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:choose&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:template&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #008000"&gt;&amp;lt;!-- End of Stylesheet --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;          &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        ]]]]&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: #008000"&gt;&amp;lt;!-- Un montón de propiedades aquí --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;properties&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;data&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;webPart&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;webParts&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;]]&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;No se vosotros, pero yo me he llevado una alegría al ver que esto funcionaba. Antes de acabar, un par de puntos:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Esto está funcionando ahora, pero puede tener algún efecto secundario, como siempre. Si detecto alguno, actualizaré el artículo e indemnizaré a todos mis subscriptores con 100€ en la MartosStore&lt;/li&gt;

  &lt;li&gt;He leído por ahí que nunca deberíamos anidar CDATAs jamás de los jamases. Lo único que os puedo decir es que si por cada vez que lo haces, dios mata a un gatito… lo dejaré de hacer.&lt;/li&gt;
&lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5227195881644793168?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5227195881644793168/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5227195881644793168' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5227195881644793168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5227195881644793168'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/10/anidando-cdatas-o-como-no-morir.html' title='Anidando CDATAs, o cómo no morir personalizando el CoreResultsWebPart'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-3qpQML1BJQ0/Tqm4fVbZYpI/AAAAAAAAAoc/XJF9PMNWW-Y/s72-c/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1078767102860304073</id><published>2011-10-24T09:21:00.001+02:00</published><updated>2011-10-24T09:21:44.481+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SandBox'/><title type='text'>¿Te funciona el intellisense pero no compila?</title><content type='html'>&lt;p&gt;Hoy toca ese tipo de recordatorios que, no por ser cosas aparentemente triviales, dejan de ser importantes. En el caso que me ocupa, estuve el otro día haciendo una pequeña prueba de concepto y me pasé un buen rato con un error bastante curioso. Un código que tenía funcionando perfectamente en un proyecto no me compilaba en esta prueba de concepto. Las líneas conflictivas eran:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;SPLimitedWebPartManager limitedWebPartManager;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;SPUtility.GetGenericSetupPath(&lt;span style="color: #006080"&gt;&amp;quot;TEMPLATE&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Estas dos líneas, aparentemente sencillas, devolvían los siguientes dos errores:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;'Microsoft.SharePoint.Utilities.SPUtility' does not contain a definition for 'GetGenericSetupPath'&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;The type or namespace name 'SPLimitedWebPartManager' could not be found (are you missing a using directive or an assembly reference?)&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Antes de ir a la solución, es necesario entender el momento de frustración por el que se pasa. El sistema no encuentra elementos que debería encontrar y que además, son de lo más común del mundo. Eliminas y vuelves a crear la referencia a &lt;strong&gt;Microsoft.SharePoint.dll&lt;/strong&gt; una y otra vez. Haces mil cambios en el código hasta dejar prácticamente aisladas estas dos llamadas. Nada, siempre el mismo error.&lt;/p&gt;

&lt;p&gt;Como no podía ser de otra manera, el error viene causado por una tontería. Como sabréis, cuando creáis un proyecto de SharePoint se os da la opción de elegir entre &lt;strong&gt;Farm Solution&lt;/strong&gt; y &lt;strong&gt;Sanboxed Solution&lt;/strong&gt;. No os voy a hablar de las diferencias entre un modo y el otro, pero simplemente deciros que el modelo de objetos de SharePoint cuando estáis en modo &lt;strong&gt;Sanbox&lt;/strong&gt; se reduce bastante. De esa manera, espacios de nombre, clases o miembros que funcionan perfectamente en soluciones de tipo granja, quedan deshabilitados completamente en modo &lt;strong&gt;Sandbox&lt;/strong&gt;. Si váis, por ejemplo, a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webpartpages.splimitedwebpartmanager.aspx"&gt;esta&lt;/a&gt; página, Veréis que la clase &lt;strong&gt;SPLimitedWebPartManager&lt;/strong&gt; no está disponible para &lt;strong&gt;Sandbox&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;La solución a este problema puede ser muy simple o muy compleja en función de la siguiente pregunta: ¿realmente necesitáis que el código funcione en modo SandBox? si la respuesta es &lt;strong&gt;no&lt;/strong&gt;, os bastará con ir a las propiedades del proyecto y cambiar el valor de la propiedad &lt;strong&gt;Sandboxed solution&lt;/strong&gt;. Si la&amp;#160; respuesta es &lt;strong&gt;sí&lt;/strong&gt; seguramente la solución pasará por buscar una alternativa, si es que la hay, que no haga uso de los elementos que nos están dando problemas. Si tenemos la opción de desplegar un &lt;strong&gt;Sandbox Proxy&lt;/strong&gt; será una buena noticia, porque siempre podremos trasladar allí el código conflictivo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1078767102860304073?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1078767102860304073/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1078767102860304073' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1078767102860304073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1078767102860304073'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/10/te-funciona-el-intellisense-pero-no.html' title='¿Te funciona el intellisense pero no compila?'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4721567693916585075</id><published>2011-10-20T11:53:00.001+02:00</published><updated>2011-10-20T11:53:41.293+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='ALM'/><title type='text'>SharePoint 2010 y ALM. ¿Es posible?</title><content type='html'>&lt;p&gt;Muchos de vosotros habréis notado un descenso importante en la frecuencia de artículos en este blog. Históricamente siempre me ha pasado esto, empezando con mucho ritmo pero, a medida que se acercaba el final del año y con las urgencias que esto acaba acarreando, me acababa dedicando a todo menos a actualizar el blog.&lt;/p&gt;  &lt;p&gt;Este año, no obstante, la razón ha sido otra. Las últimas semanas las he dedicado a una parte de mi trabajo que siempre he identificado como la más importante, pero que siempre ha quedado en un segundo plano: &lt;b&gt;ALM o la Gestión del Ciclo de Vida de las Aplicaciones&lt;/b&gt;. Ahora que ya puedo decir con orgullo que la mayor parte de la infraestructura necesaria está en su lugar, y aprovechando que tengo preparados unos cuantos eventos que giran en torno a este asunto he pensado escribir una serie de artículos, empezando por la introducción que haré a continuación.&lt;/p&gt;  &lt;p&gt;Antes de comenzar, una puntualización: ahí fuera hay verdaderos expertos en ALM y no querría yo meterme en su terreno. Aunque en ocasiones hablaré de forma genérica, quiero dejar claro que yo voy a hablar de ALM en el mundo SharePoint, una combinación sobre la que no hay tanto material, almenos en este país. No obstante, si digo alguna barbaridad y algún experto en ALM quiere corregirme, será más que bienvenido J&lt;/p&gt;  &lt;p&gt;ALM es un asunto que genera cierta controversia. Pese a que la mayoría de profesionales del sector opinamos que poner atención a este asunto es primordial y aumenta espectacularmente la calidad de nuestro software, es rara la ocasión en que realmente se ponen todos los medios necesarios. Normalmente el argumento que se utiliza para no destinar presupuesto a esta partida es que &lt;b&gt;es difícil de justificar de cara al cliente&lt;/b&gt; y, efectivamente, es un argumento totalmente válido. Cuando te compras un coche tú eliges las llantas, el número de marchas, los caballos, etc., pero el vendedor nunca pone en el presupuesto una línea donde se te cobren los procesos de calidad que han seguido y el I+D que han necesitado para construir el coche que tú estás comprando. ¿Cuál es la solución entonces? Mi opinión es que &lt;b&gt;SIEMPRE&lt;/b&gt; hay que poner especial atención a este tema y después, a la hora de justificarlo de cara al cliente, plantear que el coste de hacer las cosas bien es un factor multiplicador en el precio por funcionalidad que se le va a cobrar.&lt;/p&gt;  &lt;p&gt;Muchos diréis que es imposible, al menos en países como España, hacer esto que digo. Que en general aquí se mira el precio por hora final o el precio total del proyecto para decidirse entre un proveedor u otro. Pues mi objetivo con esta serie de artículos es convenceros de que ahí estáis equivocados. Yo no creo que hacer las cosas bien sea necesariamente más caro que hacerlas rápido. En los próximos artículos os explicaré cómo un buen trabajo en este apartado hace que la calidad de los desarrollos aumente, y un aumento de la calidad del software implica una disminución del número de errores y una mayor mantenibilidad del código, con lo que hacemos que el tiempo total del desarrollo y los costes recurrentes de nuestros clientes disminuyan. ¿Acaso no pasa esto en otros sectores? ¿Acaso no prefieres pagar más dinero por un elemento de más calidad que nos asegure más durabilidad o menos problemas a futuro? Evidentemente siempre nos encontraremos con quien prefiere pagar menos (o dispone de menos dinero para gastar) y se decantará siempre por la solución más barata pero, desengáñate, siempre habrá alguien más barato que tú. Si quieres luchar por conseguir esos clientes entrarás en un sistema perverso en el que facturas por debajo de coste (si no lo haces tú lo harán otros) esperando a que una vez conseguido el cliente sea más fácil subir la tarifa. ¿Cuántas veces habéis visto que, cuando quieres subir la tarifa para cubrir tus costes, el cliente se decanta por un proveedor más barato? Mi idea es que si un proveedor cobra X por un trabajo de 1 mes y tú cobras 2X por ese mismo trabajo, a priori estás cobrando más dinero. Si el primer proveedor se retrasa un mes y sigue cobrando lo mismo, evidentemente el cliente estará pagando menos dinero pero tendrá que asumir un retraso. Si resulta que ese proveedor te cobra por horas al final estarás pagando lo mismo. Además, si después estás un año resolviendo incidencias o si después el código fuente acaba siento tan poco mantenible que necesitas perfiles extremadamente altos para resolver sus incidencias, te aseguro que los costes se multiplicarán exponencialmente.&lt;/p&gt;  &lt;p&gt;En mi opinión todos deberíamos luchar en este sector para que todo el software que se desarrollase tuviese la máxima calidad. En ese momento podríamos usar términos como Ingeniero/a o Arquitecto/a con todas las de la ley. Seguramente al inicio podría resultar un poco caos porque, no nos engañemos, la inversión inicial necesaria para poner todo esto en marcha no es pequeña, y no todas las empresas están dispuestas a hacerla. Es nuestro trabajo educar primero a nuestras empresas, haciendo ver a las personas que toman decisiones lo importante de esta inversión y las ventajas que aportan a medio y a largo plazo, y de la misma manera hacer ver esto a nuestros clientes. Yo creo que con un poco de paciencia podremos conseguir grandes cosas en este aspecto.&lt;/p&gt;  &lt;p&gt;En los siguientes artículos de esta serie os hablaré de dos cosas que necesitáis para convencer a la gente de la importancia del ALM: &lt;b&gt;herramientas&lt;/b&gt; y &lt;b&gt;métricas&lt;/b&gt;. Las herramientas nos van a ayudar a llevar todos los procesos necesarios a cabo, y las métricas nos van a servir para mostrar el valor del tiempo invertido de manera que sea entendible por personal no técnico. Imaginad, por ejemplo, que sois capaces de decir que el número de errores decrece en un 80% o que el porcentaje de código fuente cubierto por una prueba unitaria es del 95%. Con este tipo de datos no resulta demasiado complejo poner un número al lado indicando la cantidad de horas no malgastadas en mantener un código y que pueden ser facturadas en otro proyecto. En el momento en que ese número de horas se equipare con el número de horas utilizadas para montar las herramientas de las que os hablaré ya habremos hecho buena la inversión y, a partir de ese momento, el beneficio será evidente.&lt;/p&gt;  &lt;p&gt;En fin, acabo aquí la introducción a este asunto que seguro que genera muchas discusiones. Seguro que al leer esto algunos pensáis que en vuestra empresa esto no es viable o que lo habéis probado pero no os han dejado. Después habrá gente que no estará de acuerdo con las herramientas que os iré exponiendo a medida que escriba los siguientes artículos y también habrá alguno que saque a relucir el eterno dilema de lo que es un arquitecto y lo que no lo es. Ya sabréis lo que diré: cualquier opinión tiene que ser respetada ;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4721567693916585075?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4721567693916585075/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4721567693916585075' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4721567693916585075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4721567693916585075'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/10/sharepoint-2010-y-alm-es-posible.html' title='SharePoint 2010 y ALM. ¿Es posible?'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3251120940381626691</id><published>2011-10-09T20:07:00.000+02:00</published><updated>2011-10-09T20:07:14.751+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='csp'/><title type='text'>Nuevo curso de CSP 2 en Copenhague</title><content type='html'>Aunque teóricamente el pasado curso de CSP 2 realizado en Mayo de 2011 en APAC era el último para mí, parece ser que todavía me quedaba un lugar por visitar. Ese lugar es Copenhague, y allí estaré los 2 próximos días compartiendo con mi compañero &lt;a href="http://sharejoint.blogspot.com/"&gt;Enric Carrión&lt;/a&gt; el que se postula como último curso de mi carrera sobre CSP 2 (al menos por el momento...)&lt;br /&gt;
&lt;br /&gt;
Si alguno de vosotros se encuentra estos días por allí, que no dude en dejarme un mensaje por aquí para compartir una cerveza, o las que se tercien ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3251120940381626691?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3251120940381626691/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3251120940381626691' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3251120940381626691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3251120940381626691'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/10/nuevo-curso-de-csp-2-en-copenhague.html' title='Nuevo curso de CSP 2 en Copenhague'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total><georss:featurename>Copenhague, Dinamarca</georss:featurename><georss:point>55.6760968 12.5683371</georss:point><georss:box>55.604469300000005 12.4104086 55.7477243 12.726265600000001</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-124494495514817590</id><published>2011-10-05T13:29:00.001+02:00</published><updated>2011-10-27T09:53:19.320+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='sug.cat'/><title type='text'>Segundo evento presencial del SUG.CAT</title><content type='html'>&lt;p&gt;Desde &lt;a href="http://sug.cat/"&gt;SUG.CAT&lt;/a&gt; y con el apoyo de Microsoft Ibérica queremos continuar con las sesiones presenciales del Grupo de Usuarios de SharePoint de Catalunya con dos presentaciones de algunas de las características de SharePoint 2010 que más interés han despertado en la comunidad. En una de estas presentaciones os enseñaremos como podéis gestionar el ciclo de vida de las aplicaciones (ALM) en proyectos que involucren SharePoint 2010 y en la otra veremos los factores de éxito clave para que una solución de SharePoint sea adoptada por los usuarios finales, evitando los problemas asociados a la gestión del cambio y de adopción entre los usuarios.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Agenda:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;ALM en SharePoint 2010. Aumenta la calidad de tus proyectos.&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Cómo vender tu solución de SharePoint al usuario final&amp;quot; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Datos de interés:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Audiencia&lt;/b&gt;: Profesionales de IT. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Requisitos previos&lt;/b&gt;: Conocimientos de la plataforma SharePoint 2010. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Fecha&lt;/b&gt;: Jueves 3 de Noviembre de 2011. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Hora&lt;/b&gt;: 18:00 a 20:00. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Formato&lt;/b&gt;: Presencial y online, gratuito. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Ponentes&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;Edin Kapic, Key Consultant de SharePoint en Pasiona Consulting. Miembro fundador de&lt;a href="http://sug.cat/"&gt;SUG.CAT&lt;/a&gt; y moderador oficial del foro de desarrollo SharePoint de MSDN &lt;a href="http://social.msdn.microsoft.com/Forums/es-ES/mossdeves"&gt;http://social.msdn.microsoft.com/Forums/es-ES/mossdeves&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;David Martos González, MVP de SharePoint Server y Arquitecto de software en Spenta Consulting. Miembro fundador de&lt;a href="http://sug.cat/"&gt;SUG.CAT&lt;/a&gt;, escribe habitualmente en su blog &lt;a href="http://david-martos.blogspot.com/"&gt;http://david-martos.blogspot.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Podéis inscribiros en esta dirección:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032496468&amp;amp;Culture=es-ES"&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032496468&amp;amp;Culture=es-ES&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Esta vez prometo, si queréis&lt;/p&gt;  &lt;p&gt;Si no podéis venir y queréis asistir de manera virtual, podéis utilizar la siguiente dirección:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032496476&amp;amp;Culture=es-ES"&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032496476&amp;amp;Culture=es-ES&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;¡Os esperamos a todos!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Actualizado el 27/10/2011&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Gracias a mi querido lector B, me he dado cuenta que voy prometiendo cosas a la ligera (leer 5 líneas más arriba). Lo que se quedó en el tintero fue que esta vez, si alguien gusta, se harán unas pertinentes birras al finalizar el evento &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/-L0g9LC8xAmk/TqkN6zFGDgI/AAAAAAAAAoU/b95wiqvi_wA/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-124494495514817590?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/124494495514817590/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=124494495514817590' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/124494495514817590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/124494495514817590'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/10/segundo-evento-presencial-del-sugcat.html' title='Segundo evento presencial del SUG.CAT'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-L0g9LC8xAmk/TqkN6zFGDgI/AAAAAAAAAoU/b95wiqvi_wA/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-2990620779995383171</id><published>2011-10-03T14:04:00.001+02:00</published><updated>2011-10-03T14:04:54.792+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>¡¡He sido reno-MVP-tizado!!</title><content type='html'>&lt;p&gt;No hay mejor manera de iniciar la semana (bueno, sí la hay pero en este blog no procede hablar de ellas…) que recibiendo la notificación de que te han renovado como MVP por un año más. Si hace un año informaba con orgullo que había entrado en tan selecto grupo, aún con más orgullo, si cabe, os informo de que me han brindado la posibilidad de seguir estando dentro hasta octubre del año 2012.&lt;/p&gt;  &lt;p&gt;A decir verdad no contaba con conseguirlo este año porque los compromisos profesionales me han impedido participar en la comunidad tanto como me hubiera gustado, y la competencia es realmente dura. Espero poder mantener el nivel durante este año aunque ya adelanto que va a ser realmente complicado teniendo en cuenta lo que me trae este año Papa Noel (SPOILER!!!!&amp;quot;)&lt;/p&gt;  &lt;p&gt;En fin, gracias a todos los que hacen posible que pueda disfrutar de este privilegio, comenzando por mi empresa (&lt;a href="http://www.spenta.es"&gt;Spenta Consulting&lt;/a&gt;) que permite que dedique un considerable número de horas a I+D y a organizar eventos y sin olvidarme de mi mujer y de mi gato, que permiten que dedique tantas horas de mi tiempo libre a &lt;em&gt;friquear&lt;/em&gt;. Un saludo a todos, y seguimos para bingo…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-2990620779995383171?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/2990620779995383171/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=2990620779995383171' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2990620779995383171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2990620779995383171'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/10/he-sido-reno-mvp-tizado.html' title='¡¡He sido reno-MVP-tizado!!'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3600794864376928439</id><published>2011-09-14T09:47:00.001+02:00</published><updated>2011-09-14T09:47:19.234+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><title type='text'>“A connection will not be made because credentials may not be sent to the remote computer” al instalar Windows 8 en Hyper-V</title><content type='html'>&lt;p&gt;Hoy, al igual que muchos de vosotros, lo primero que he hecho al empezar el día ha sido instalar mi primer Windows 8 para ver la pinta que tenía. Idealmente lo querría instalar sobre algún dispositivo multitouch en físico pero, a falta de uno, he comenzado por lo más fácil que es instalarlo en una máquina virtual en mi servidor de Hyper-V.&lt;/p&gt;  &lt;p&gt;El primer error con el que me he encontrado es el que da título a este artículo: &lt;strong&gt;A connection will not be made because credentials may not be sent to the remote computer&lt;/strong&gt;. La solución al problema ha sido sencilla. Bastará con ir a la consola de administración de Hyper-V, pulsar el botón &lt;strong&gt;Hyper-V settings &lt;/strong&gt;y, en el apartado &lt;strong&gt;User Credentials&lt;/strong&gt;, marcar la opción &lt;strong&gt;Use default credentials automatically&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;Seguiré informando de cualquier cosa que me encuentre en el proceso de instalación y pruebas.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3600794864376928439?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3600794864376928439/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3600794864376928439' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3600794864376928439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3600794864376928439'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/09/connection-will-not-be-made-because.html' title='“A connection will not be made because credentials may not be sent to the remote computer” al instalar Windows 8 en Hyper-V'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5153361265493502590</id><published>2011-07-25T12:22:00.001+02:00</published><updated>2011-07-25T12:22:41.816+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='iis'/><title type='text'>SharePoint 2010 y .NET Framework 4.0</title><content type='html'>&lt;p&gt;Hoy un compañero se ha encontrado con algo que no había visto hasta hoy. Como sabréis, SharePoint 2010 funciona con .NET Framework 3.5 (ASP.NET 2.0) y no con .NET Framework 4.0 (ASP.NET 4.0). En una instalación típica de SharePoint esto no será ningún problema pero al parecer en algunas condiciones os encontraréis con que a la hora de crear la aplicación web de la Administración Central durante el periodo de instalación, el sistema intentará crearla con ASP.NET 4.0 y os encontraréis con un error similar al siguiente:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;font face="Consolas"&gt;Failed to provision the SharePoint Central Administration Web Application.&lt;/font&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font face="Consolas"&gt;An exception of type System.Runtime.InteropServices.COMException was thrown. Additional exception information: Filename: \\?\C:\inetpub\wwwroot\wss\VirtualDirectories\46824\web.config&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font face="Consolas"&gt;Line number: 25&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Error: There is a duplicate 'system.web.extensions/scripting/scriptResourceHandler' section defined&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;El fallo es fácil de solucionar. Bastará con ir al IIS y cambiar la versión de .NET Framework establecida para el pool de aplicaciones de la Administración Central de SharePoint. El problema es que haciendo esto no evitaremos que el error vuelva a aparecer cada vez que creamos una nueva aplicación web. ¿Cómo lo solucionamos de manera permanente? Siguiendo los siguientes pasos:&lt;/p&gt;  &lt;p&gt;Abrimos la consola de administración de IIS y en el menú de acciones de la derecha pulsamos el enlace &lt;strong&gt;Set Application Pool Defaults…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-2gWSwV3komQ/Ti1D6f8g8GI/AAAAAAAAAoA/gfSo7MLpB88/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-Q4xepdo1bnY/Ti1D7Pe23MI/AAAAAAAAAoE/uFzhWFpmBVk/image_thumb%25255B1%25255D.png?imgmax=800" width="510" height="301" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En la sección &lt;strong&gt;General&lt;/strong&gt; establecemos el valor de .NET Framework Version como v2.0.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-1JQe22ZkL9I/Ti1D7l9OaBI/AAAAAAAAAoI/r5aIga_XVIE/s1600-h/image%25255B13%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-31Ul0C0GTiI/Ti1D8exYjqI/AAAAAAAAAoM/qEmEGFptM6I/image_thumb%25255B10%25255D.png?imgmax=800" width="511" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5153361265493502590?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5153361265493502590/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5153361265493502590' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5153361265493502590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5153361265493502590'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/07/sharepoint-2010-y-net-framework-40.html' title='SharePoint 2010 y .NET Framework 4.0'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-Q4xepdo1bnY/Ti1D7Pe23MI/AAAAAAAAAoE/uFzhWFpmBVk/s72-c/image_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1157913893821382989</id><published>2011-07-19T21:32:00.001+02:00</published><updated>2011-07-19T21:32:33.237+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Manten limpias tus características</title><content type='html'>&lt;p&gt;Una de las etapas más aburridas a la vez que necesarias en el desarrollo de software es aquella en la que, una vez lo tenemos todo funcionando perfectamente tenemos que limpiar, pulir y dar cera a los elementos que hemos creado. Algunas tareas que pueden ser relativamente divertidas como refactorizar código y otras que son un absoluto peñazo como, por ejemplo, asegurar que se siguen unas directrices básicas en cuanto a nomenclatura (sí, StyleCop y Resharper nos ayudan bastante pero no impiden que cada developer tiene sus manías a la hora de nombrar clases, por ejemplo).&lt;/p&gt;  &lt;p&gt;Hoy, realizando esas tareas de limpieza he dado con un error típico que solemos cometer los que trabajamos con SharePoint debido a cómo Visual Studio 2010 trabaja los conceptos de característica y módulo. El mayor de los problemas es que habitualmente es un error silencioso &lt;strike&gt;(y todos sabemos que si algo no hace ruido no es peligroso –salvo la excepción que todos conocemos–)&lt;/strike&gt; y no solemos prestarles atención. &lt;/p&gt;  &lt;p&gt;El problema radica en el hecho que cuando creas un módulo nuevo en Visual Studio 2010, éste se añade a la última característica que hemos añadido a la solución. Si, como es lógico, queremos añadir el módulo a una caacterística concreta, al hacerlo no observaremos ningún mensaje indicando que el módulo ya está añadido a la original. Para evitar este problema basta con mirar la ventana de output de Visual Studio cuando creamos el paquete wsp. Veremos mensajes como los siguientes&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;c:\code\MyProject\\Package\Package.package : warning SPT6: The Project Item &amp;quot;Module1&amp;quot; is included in the following Features: Feature1, Feature2      &lt;br /&gt;c:\code\MyProject\Package\Package.package : warning SPT6: The Project Item &amp;quot;Module2&amp;quot; is included in the following Features: Feature3, Feature4       &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Viendo esto resulta relativamente sencillo ir a aquellas características donde no deberían estar incluídos los módulos indicados en el error y eliminarlos fácilmente. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1157913893821382989?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1157913893821382989/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1157913893821382989' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1157913893821382989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1157913893821382989'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/07/manten-limpias-tus-caracteristicas.html' title='Manten limpias tus características'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-161669315334408539</id><published>2011-07-19T19:34:00.001+02:00</published><updated>2011-07-19T19:34:04.474+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>¿Es buena la complejidad?</title><content type='html'>&lt;p&gt;Siguiendo una conversación en Twitter de esta mañana, y a riesgo de polemizar un poco más, me tomo la libertad de expresar mi humilde opinión al respecto. No tiene por qué ser una opinión mejor que la del resto, pero tampoco tiene por qué ser peor, es simplemente una opinión más.&lt;/p&gt;  &lt;p&gt;Para introduciros en el asunto os resumo un poco la conversación de esta mañana. Aparentemente alguien se quejaba de la complejidad del proceso de instalación de SQL Server y yo apuntaba que en ocasiones los procesos de instalación de aplicaciones debían ser incluso más complejos para evitar problemas futuros causados por instalaciones realizadas por profesional no cualificado para la tarea. La conversación derivó en opiniones relativas a que la instalación de SQL Server en realidad no era tan compleja y, por otro lado, en que justificar la complejidad era fácil, no merecía la pena, y hacía referencia a mentalidades del pasado. A continuación os expongo los motivos que tengo yo para pensar de la manera que pienso.&lt;/p&gt;  &lt;p&gt;Primero, decir a los que no me conozcan que soy arquitecto de software especializado en .NET y sobretodo en SharePoint. Mi posición está claramente relacionada con el mundo del desarrollo y mis conocimientos de sistemas no son demasiado avanzados. No obstante, y debido a las particularidades del sector del desarrollo de software en España y debido las particularidades del desarrollo sobre la plataforma SharePoint tengo conocimientos básicos sobre Windows Server (especialmente en todo lo relacionado a los roles de servidor de aplicaciones y a IIS), SQL Server, Exchange Server, TMG, ForeFront, etc. También tengo conocimientos básicos de hardware (sé la diferencia entre RAM y HD, y conozco lo que tiene que tener un equipo para permitir virtualización) pero se me escapan conceptos que seguramente no son altamente avanzados como RAID 0, 1 o 5.&lt;/p&gt;  &lt;p&gt;Dicho esto, tengo que decir que en unas pocas horas tengo montado un entorno con varias máquinas virtuales y con todos los componentes mencionados anteriormente instalados y funcionando. Eso significa, en mi opinión, que los procesos de instalación no son excesivamente complejos. Además, si por casualidad tengo que instalar alguna de estas piezas en producción, sé que dispongo de documentación suficiente en Technet (para productos Microsoft) como para hacerlo de manera más o menos adecuada.&lt;/p&gt;  &lt;p&gt;Ahora bien, ¿cuál era la razón de mi tweet? Si yo soy capaz de instalar un SQL Server o un SharePoint siguiendo el asistente cualquier persona es capaz de hacerlo. Con cualquier persona no me refiero a “idiotas” (entre comillas que aparentemente no es lo mismo que idiotas) sino a personas que no tienen los conocimientos necesarios para desarrollar la tarea. Pero resulta que estamos en España y aquí, si puedo gastarme menos dinero en hacer una tarea, lo haré. Ahora no entraré en si es el mercado, si es nuestro caracter o si es una mezcla de ambos, pero es un hecho que si se plantea un proyecto de implantación de un producto, el 90% de los casos se lo lleva el que pone un precio hora más barato. Señores, ¿alguien sabe el coste de una persona con los conocimientos necesarios para instalar SharePoint, Exchange, SQL Server o TMG? ¿Alguien conoce una persona que tenga todas esas capacidades con un coste inferior a 20€/h? Que me lo diga que le doblo el sueldo.&lt;/p&gt;  &lt;p&gt;Y os preguntaréis qué me importa a mí todo esto. Pues en realidad nada, simplemente expresaba mi opinión. De hecho, mientras las cosas sigan como están seguiré teniendo trabajo arreglando las implantaciones de SharePoint que han sido realizadas siguiendo el asistente. Lo único que me preocupa es que esta práctica siga haciendo daño al nombre de SharePoint, que está lejos de ser una plataforma perfecta (por eso sigo y seguiré teniendo trabajo) pero está aún más lejos de ser la basura que mucha gente piensa que es. Y quien piense que es una basura, que me presente una alternativa y la discutiré con mucho placer.&lt;/p&gt;  &lt;p&gt;Y no penséis que estoy planteando proteger mi territorio para que nadie lo pise. Al contrario, fijaos que según lo que comento yo no debería tener “el carné” para instalar SQL Server, por ejemplo. Si pretendemos que traten la ingeniería de software como cualquier otra ingeniería tenemos que plantearnos que tiene que haber especialistas para cada una de las materias. Y ojo, tampoco estoy planteando que para instalar un SQL Server tengas que compilar un kernel. Contra más fácil sea hacer algo mayor será la productividad que es lo que interesa. Lo que yo planteo es que el proceso de instalación podría incorporar alguna característica que impidiera que el sistema funcione adecuadamente hasta que se cumplan ciertos requisitos, de la misma manera que se cambió la política con Windows Server donde por defecto todo está cerrado hasta que alguien va y lo abre.&lt;/p&gt;  &lt;p&gt;Ahí queda mi opinión… espero las vuestras para ver si aprendo algo, aunque seguro que ninguno hará cambiar la opinión del otro si no es con cerveza. Con mucha cerveza… &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-161669315334408539?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/161669315334408539/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=161669315334408539' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/161669315334408539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/161669315334408539'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/07/es-buena-la-complejidad.html' title='¿Es buena la complejidad?'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-2544425880182670547</id><published>2011-07-12T10:06:00.001+02:00</published><updated>2011-07-12T10:06:51.010+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>No tengo visor de sucesos - Error 2: The system cannot find the file specified</title><content type='html'>&lt;p&gt;El otro día un compañero me comentó que no podía conectarse a la VPN y que la máquina le iba, en general, muy mal. Como suele ser habitual en estos casos pasé el marrón a sistemas y me despreocupé por completo, porque para mí VPN son siglas de algo que sé que necesito, pero poco más…&lt;/p&gt;  &lt;p&gt;El caso es que hoy me ha tocado sufrir a mí las consecuencias de lo que sea que le pasó a mi compañero y me he quedado sin conexión VPN. El error indicaba que el servicio &lt;strong&gt;Remote Access Connection Manager&lt;/strong&gt; no estaba iniciado. La primera cosa que hice, obviamente, fue intentar iniciarlo. Como no lo conseguí, intenté acceder al visor de sucesos, encontrándome con otro error indicando que el visor de sucesos no estaba disponible. Volví a la consola de servicios y traté de iniciar el servicio &lt;strong&gt;Windows Event Log&lt;/strong&gt;. Fue en ese momento cuando vi el error que encabeza este artículo: &lt;strong&gt;Error 2: The system cannot find the file specified&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Después del ataque de pánico inicial y de la pregunta evidente (¿qué fichero?) decidí acudir a mis amigos los foros para dar con lo siguiente:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://social.msdn.microsoft.com/Forums/en/winserver2008appcompatabilityandcertification/thread/b803a3b0-559f-4a1b-ab44-4bb64e0c746d" href="http://social.msdn.microsoft.com/Forums/en/winserver2008appcompatabilityandcertification/thread/b803a3b0-559f-4a1b-ab44-4bb64e0c746d"&gt;http://social.msdn.microsoft.com/Forums/en/winserver2008appcompatabilityandcertification/thread/b803a3b0-559f-4a1b-ab44-4bb64e0c746d&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Resumiendo, borré la siguiente clave de registro y todo volvió a la normalidad:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Parameters&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Si os preguntáis el por qué, haré como con mi compañero, os redirigiré a sistemas. Lo único que puedo deciros es que de ayer a hoy lo único que cambió en mi entorno fue la instalación de DotTrace y de algunas actualizaciones de Windows.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-2544425880182670547?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/2544425880182670547/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=2544425880182670547' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2544425880182670547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2544425880182670547'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/07/no-tengo-visor-de-sucesos-error-2.html' title='No tengo visor de sucesos - Error 2: The system cannot find the file specified'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1594138903316041685</id><published>2011-06-28T09:42:00.000+02:00</published><updated>2011-06-28T09:47:00.684+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='autenticación'/><title type='text'>Autenticación en SharePoint 2010 con sistemas externos mediante Azure ACS v2</title><content type='html'>&lt;h3&gt;Introducción&lt;/h3&gt;  &lt;p&gt;Aprovechando la aparición del &lt;a href="http://david-martos.blogspot.com/2011/06/disponible-el-n-8-de-la-revista.html"&gt;número 8 de la revista CompartiMOSS&lt;/a&gt; he pensado publicar la traducción al español de un artículo que recientemente publiqué en el &lt;a href="http://blogs.msdn.com/b/mvpawardprogram/archive/2011/06/17/mvps-for-sharepoint-2010-using-azure-acs-v2-to-authenticate-external-systems-users.aspx"&gt;blog de MVP Award Program&lt;/a&gt; y que sirve para complementar lo que aparece en la revista ya que, debido a lo extenso que hubiera resultado, no pude detallar como me hubiera gustado.&lt;/p&gt;  &lt;p&gt;Antes de explicar cómo conseguir autenticar usuarios de &lt;u&gt;SharePoint 2010&lt;/u&gt; con un sistema externo mediante &lt;u&gt;Azure ACS v2&lt;/u&gt; es conveniente explicar los motivos que nos pueden empujar a querer hacerlo, así que voy a intentar dar mis razones en esta introducción con el lenguaje menos técnico posible.&lt;/p&gt;  &lt;h4&gt;¿Qué opciones tengo?&lt;/h4&gt;  &lt;p&gt;Por defecto, &lt;u&gt;SharePoint 2010&lt;/u&gt; permite autenticar a los usuarios mediante &lt;u&gt;Directorio Activo&lt;/u&gt;, pero además de esto podemos optar por un repositorio de usuarios diferente mantenido por nosotros mismos como, por ejemplo, una base de datos &lt;u&gt;SQL Server&lt;/u&gt; o incluso un sistema totalmente ajeno a nosotros como &lt;u&gt;Windows Live ID&lt;/u&gt;, &lt;u&gt;Google&lt;/u&gt; o &lt;u&gt;Facebook&lt;/u&gt;. En general, la primera opción se aconseja para entornos corporativos por la alta integración que obtendríamos con las herramientas de &lt;u&gt;Office&lt;/u&gt; mientras que las otras opciones se suelen recomendar para escenarios públicos. No es una fórmula matemática, pero funciona en la mayoría de casos &lt;/p&gt;  &lt;h4&gt;¿Por qué utilizar un sistema externo?&lt;/h4&gt;  &lt;p&gt;Si nos encontramos en una situación donde &lt;u&gt;Directorio Activo&lt;/u&gt; no es una opción podemos optar por implementar nuestro propio repositorio de datos o utilizar uno ajeno. Las principales razones que nos empujarían a la segunda opción son:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;No tenemos que preocuparnos por mantener la información en nuestro propio sistema ni de asegurar su integridad. &lt;/li&gt;    &lt;li&gt;No es necesario implementar mecanismos relacionados con la gestión de usuarios como, por ejemplo, registro de usuario o recuperación de contraseña. &lt;/li&gt;    &lt;li&gt;Nuestros usuarios no tendrán que mantener otro conjunto de credenciales adicional a los que ya tenían. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Si tenemos claro que queremos utilizar un sistema externo la siguiente pregunta a realizarnos sería si necesitamos utilizar un único sistema o queremos federar las identidades de varios de ellos. Si nos encontramos en el segundo caso aparecen dos alternativas posibles: &lt;u&gt;ADFS 2.0&lt;/u&gt; o &lt;u&gt;Azure ACS v2&lt;/u&gt;, que podría ser traducido como &lt;u&gt;ADFS 2.0 en la nube&lt;/u&gt;.&lt;/p&gt;  &lt;h4&gt;¿Por qué utilizar Azure ACS v2 en lugar de ADFS 2.0?&lt;/h4&gt;  &lt;p&gt;Siempre que comparamos una plataforma instalada on-premises con la misma plataforma utilizada como servicio aparecen los mismos argumentos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Escalabilidad &lt;/li&gt;    &lt;li&gt;Mantenibilidad &lt;/li&gt;    &lt;li&gt;Coste (TCO) &lt;/li&gt;    &lt;li&gt;Rendimiento &lt;/li&gt;    &lt;li&gt;Etc. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cada una de las dos alternativas tendrá unas valoraciones diferentes para cada argumento. Si ponemos en una balanza todos estos argumentos con el peso que demos a cada uno de ellos tendremos la respuesta a la pregunta planteada anteriormente.&lt;/p&gt;  &lt;h3&gt;Manos a la obra&lt;/h3&gt;  &lt;p&gt;Si después de plantearte todas las preguntas anteriores has llegado a la conclusión de que quieres utilizar varios sistemas externos y quieres utilizar los servicios de autenticación que proporciona &lt;u&gt;Azure&lt;/u&gt;, te interesa seguir leyendo para saber cómo configurar &lt;u&gt;SharePoint 2010&lt;/u&gt; para poner todo esto en marcha. &lt;/p&gt;  &lt;p&gt;Antes de comenzar a configurar nada conviene plantearnos lo que queremos implementar. Para el ejemplo que nos ocupa yo he pensado crear un portal público en la url &lt;a href="https://www.contoso-acsv2.com"&gt;https://www.contoso-acsv2.com&lt;/a&gt; con acceso anónimo permitido y con un área privada a la que únicamente se puede acceder con unas credenciales válidas de &lt;u&gt;Windows Live ID&lt;/u&gt; o de &lt;u&gt;Google&lt;/u&gt;. Con esta información podemos comenzar a preparar nuestra granja de &lt;u&gt;SharePoint 2010&lt;/u&gt; para dar soporte a este escenario.&lt;/p&gt;  &lt;p&gt;Doy por sentado que aquellos que estáis leyendo este artículo tenéis los conocimientos necesarios para realizar las tareas de alto nivel que voy a especificar a continuación pero, si no es así, no dudéis en enviarme vuestras preguntas o comentarios. En cualquier caso, ya os adelanto que al final de este artículo os dejaré un enlace donde podréis acceder a un entorno totalmente preparado y que podréis utilizar a vuestra conveniencia.&lt;/p&gt;  &lt;p&gt;1. Creación de una aplicación web para acceso interno con la siguientes características&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Autenticación basada en claims (&lt;b&gt;IMPORTANTE!&lt;/b&gt;) &lt;/li&gt;    &lt;li&gt;SSL no habilitado &lt;/li&gt;    &lt;li&gt;Autenticación NTLM &lt;/li&gt;    &lt;li&gt;Acceso anónimo no habilitado &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;2. Creación de una colección de sitios a partir de la plantilla de sitio de publicación. Antes de continuar con el artículo comprobar que podemos navegar a la colección de sitios que acabamos de crear. Observaréis, en la parte superior de derecha, que el usuario con el que os habéis conectado es un usuario de &lt;u&gt;Directorio Activo&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;Antes de proceder con la siguiente tarea necesitaremos crear un certificado digital para firmar los tokens. Aprovechando el hecho que también necesitaremos un certificado para el sitio que publicaremos por https y teniendo en cuenta que lo que vamos a hacer es únicamente para pruebas, procederemos de la siguiente manera:&lt;/p&gt;  &lt;p&gt;1. En el servidor de SharePoint, abrir una ventana de comandos y situarse en la carpeta &lt;b&gt;C:\Program Files\Microsoft Office Servers\14.0\Tools&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;Ejecutar el siguiente comando: &lt;b&gt;MakeCert.exe -r -pe -n &amp;quot;CN=www.contoso-acsv2.com&amp;quot; -sky exchange -ss my&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;3. Abrir con la consola de administración ejecutando el comando &lt;b&gt;mmc.exe&lt;/b&gt; y añadir el &lt;i&gt;snap-in&lt;/i&gt; de certificados del usuario actual.&lt;/p&gt;  &lt;p&gt;4. Localizar en la carpeta personal el certificado para &lt;b&gt;www.contoso-acsv2.com &lt;/b&gt;y exportarlo al disco duro. Aprovechad este momento para exportarlo con (&lt;u&gt;.PFX&lt;/u&gt;), y sin clave privada asociada (&lt;u&gt;.CER&lt;/u&gt;) ya que necesitaremos ambos en diferentes partes de este artículo.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Nota: en un escenario real deberíais utilizar certificados diferentes para firmar tokens y para el servidor web. Además, no se recomienda utilizar certificados auto-generados para entornos en producción.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Una vez creada la colección de sitios con la que trabajaremos y generado el certificado digital, lo siguiente que tendremos que hacer es crear un espacio de nombres en &lt;u&gt;Azure ACS v2&lt;/u&gt; que identifique nuestra aplicación y, para ello, deberemos seguir los siguientes pasos:&lt;/p&gt;  &lt;p&gt;1. Acceder al portal de &lt;u&gt;AppFabricLabs&lt;/u&gt; (&lt;a href="https://portal.appfabriclabs.com"&gt;https://portal.appfabriclabs.com&lt;/a&gt;) &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Nota: este artículo utilizará la versión de laboratorio de &lt;u&gt;Azure ACS v2&lt;/u&gt;, que es gratuíta pero que no puede utilizarse en entornos reales en producción. La versión comercial de &lt;u&gt;Azure ACS v2&lt;/u&gt; está disponible a través del portal de Windows Azure.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;2. Localizar y pulsar, en la parte inferior izquierda de la pantalla, el enlace &lt;b&gt;Service Bus, Access Control &amp;amp; Caching&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;3. Seleccionar &lt;b&gt;Access Control&lt;/b&gt; en el menú de navegación de la izquierda y pulsar el botón &lt;b&gt;New Namespace&lt;/b&gt; en la ribbon.&lt;/p&gt;  &lt;p&gt;4. Rellenar el formulario indicando un espacio de nombres que esté disponible y una región (de momento únicamente podemos seleccionar Estados Unidos)&lt;/p&gt;  &lt;p&gt;5. Pulsar el botón &lt;b&gt;Create Namespace&lt;/b&gt; y esperar a que el servicio pase a estado &lt;b&gt;activado&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Una vez creado y activado el espacio de nombres, la siguiente tarea consiste en configurarlo para que de soporte a nuestras necesidades. Para ello procederemos de la siguiente manera:&lt;/p&gt;  &lt;p&gt;1. Seleccionar el espacio de nombres y pulsar el botón &lt;b&gt;Access Control Service&lt;/b&gt; en la &lt;i&gt;ribbon&lt;/i&gt;. Esto nos llevará al portal de administración de nuestro espacio de nombres.&lt;/p&gt;  &lt;p&gt;2. Pulsar el enlace &lt;b&gt;Identity providers&lt;/b&gt; en el menú de navegación de la izquierda. Veréis que, por defecto, el sistema nos va a permitir utilizar &lt;u&gt;Windows Live ID&lt;/u&gt; como sistema de autenticación.&lt;/p&gt;  &lt;p&gt;3. En este artículo queremos demostrar el uso de más de un sistema de autenticación y, por lo tanto, pulsaremos el enlace &lt;b&gt;Add&lt;/b&gt; y añadiremos &lt;u&gt;Google&lt;/u&gt; a la lista de proveedores autorizados. Vosotros, si lo preferís, podéis añadir &lt;u&gt;Facebook&lt;/u&gt; o &lt;u&gt;Yahoo&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;4. La siguiente pantalla os permitirá indicar un texto y una imagen que se utilizará en la pantalla de inicio de sesión a la hora de seleccionar el proveedor que queremos utilizar para ingresar en el sistema. Podéis dejar los valores por defecto y pulsar el botón &lt;b&gt;Save&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;5. Pulsar el enlace &lt;b&gt;Relying Party Applications&lt;/b&gt; en el menú de navegación de la izquierda y pulsar el botón &lt;b&gt;Add&lt;/b&gt; que aparece en la siguiente pantalla.&lt;/p&gt;  &lt;p&gt;6. Rellenar el formulario con los siguientes valores y pulsar el botón save.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Name: &lt;b&gt;contoso-acsv2.com&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Realm: &lt;b&gt;https://www.contoso-acsv2.com/&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Return URL: &lt;b&gt;https://www.contoso-acsv2.com/_trust/&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Token format: &lt;b&gt;SAML 1.1&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Token lifetime: &lt;b&gt;600 secs&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Google: &lt;b&gt;opción marcada&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Live ID: &lt;b&gt;opción marcada&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Create new rule group: &lt;b&gt;opción marcada&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Token signing: &lt;b&gt;Use a dedicated certificate &lt;/b&gt;(poner aquí los valores que habéis obtenido a la hora de exportar el certificado digital con clave privada) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;7. Pulsar el enlace &lt;b&gt;Rule groups&lt;/b&gt; en el menú de navegación de la izquierda y, en la lista que aparece, pulsar el enlace &lt;b&gt;Default rule for contoso-acsv2.com&lt;/b&gt;. Una vez allí, pulsar el enlace &lt;b&gt;Generate&lt;/b&gt;, dejar marcadas las opciones &lt;u&gt;Windows Live ID&lt;/u&gt; y &lt;u&gt;Google&lt;/u&gt; y pulsar el botón &lt;b&gt;Generate&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;8. La siguiente pantalla nos mostrará los &lt;i&gt;claims&lt;/i&gt; que vamos a recibir de aquellos sistemas con los que nos integremos. En nuestro caso vamos a hacer un pequeño cambio. Debido a que &lt;u&gt;Live ID&lt;/u&gt; no nos envía el email del usuario y nosotros queremos utilizar este claim más adelante añadimos un nuevo &lt;i&gt;claim&lt;/i&gt; con los siguientes valores:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Identity Provider: &lt;b&gt;Windows Live ID&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Input Claim Type: &lt;b&gt;http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Output Claim type: &lt;b&gt;http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress &lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Teniendo configurado nuestro espacio de nombres en &lt;u&gt;Azure ACS v2&lt;/u&gt; y con el certificado preparado podemos proceder a configurar nuestro proveedor autorizado de autenticación en &lt;u&gt;SharePoint 2010&lt;/u&gt;. Para ello seguiremos los siguientes pasos:&lt;/p&gt;  &lt;p&gt;1. Copiar el texto a continuación y guardarlo como fichero con extensión &lt;b&gt;ps1&lt;/b&gt; en la carpeta donde anteriormente exportamos el certificado digital.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;$realm = &lt;span style="color: #006080"&gt;&amp;quot;https://www.contoso-acsv2.com&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;$signinurl = &lt;span style="color: #006080"&gt;&amp;quot;https://example-acsv2.accesscontrol.appfabriclabs.com/v2/wsfederation&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;$certloc = (Get-ChildItem . -Recurse -include www.contoso-acsv2.com.cer).fullname&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;$rootcert = Get-PfxCertificate $certloc&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;New-SPTrustedRootAuthority &lt;span style="color: #006080"&gt;&amp;quot;Azure ACSv2&amp;quot;&lt;/span&gt; -Certificate $rootcert &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certloc)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;$map1 = New-SPClaimTypeMapping &lt;span style="color: #006080"&gt;&amp;quot;http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress&amp;quot;&lt;/span&gt; -IncomingClaimTypeDisplayName &lt;span style="color: #006080"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt; -SameAsIncoming &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;New-SPTrustedIdentityTokenIssuer -Name &lt;span style="color: #006080"&gt;&amp;quot;Azure ACSv2&amp;quot;&lt;/span&gt; -Description &lt;span style="color: #006080"&gt;&amp;quot;Windows Azure ACS v2&amp;quot;&lt;/span&gt; -Realm $realm -ImportTrustCertificate $cert -ClaimsMappings $map1 -SignInUrl $signinurl -IdentifierClaim $map1.InputClaimType&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;2. Abrir la &lt;b&gt;Consola de Administración de SharePoint 2010&lt;/b&gt; y ejecutar el fichero previamente guardado.&lt;/p&gt;

&lt;p&gt;Ya estamos en disposición de continuar nuestro trabajo en la &lt;b&gt;Administración Central de SharePoint&lt;/b&gt;. Nos faltaría únicamente extender la aplicación web que creamos al inicio de este artículo usando, para ello, las siguientes configuraciones.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Puerto: &lt;b&gt;443&lt;/b&gt; &lt;/li&gt;

  &lt;li&gt;Host header:&lt;b&gt; www.contoso-acsv2.com&lt;/b&gt; &lt;/li&gt;

  &lt;li&gt;Acceso anónimo: &lt;b&gt;habilitado&lt;/b&gt; &lt;/li&gt;

  &lt;li&gt;SSL: &lt;b&gt;habilitado&lt;/b&gt; &lt;/li&gt;

  &lt;li&gt;Proveedor de autenticación: &lt;b&gt;Azure ACSv2&lt;/b&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de poder acceder al sitio web que acabamos de crear necesitaremos realizar algunas tareas relacionadas con certificados.&lt;/p&gt;

&lt;p&gt;1. Abrir la consola de &lt;u&gt;Internet Information Services&lt;/u&gt;, seleccionar el nombre de nuestro servidor en la sección de la izquierda y abrir la característica &lt;b&gt;Server Certificates&lt;/b&gt; en la ventana principal.&lt;/p&gt;

&lt;p&gt;2. Importar el certificado con clave privada (&lt;u&gt;.PFX&lt;/u&gt;) mediante el menú de acciones de la derecha.&lt;/p&gt;

&lt;p&gt;3. Pulsar con el botón derecho del ratón sobre el sitio web que hemos creado para acceder mediante SSL y seleccionar &lt;b&gt;Edit Bindings&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;4. Editar el enlace que se ha creado por defecto y asignarle el certificado que previamente hemos importado.&lt;/p&gt;

&lt;p&gt;Una vez hecho esto ya podréis navegar a la url &lt;a href="https://www.contoso-acsv2.com"&gt;https://www.contoso-acsv2.com&lt;/a&gt; y, como veréis, el sistema os redigirá a una pantalla donde os aparecerá la lista de proveedores de identidad que habéis configurado en &lt;u&gt;Azure ACS v2&lt;/u&gt; (en nuestro ejemplo &lt;u&gt;Windows Live ID&lt;/u&gt; y &lt;u&gt;Google&lt;/u&gt;). Pero si intentáis acceder con vuestras credenciales recibiréis un error. Aún es necesario un último paso que consiste en acceder de nuevo a la gestión de certificados del servidor de SharePoint y copiar el certificado generado para &lt;b&gt;www.contoso-acsv2.com&lt;/b&gt; que encontraremos en la carpeta Personal a las siguientes tres carpetas:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SharePoint &lt;/li&gt;

  &lt;li&gt;Trusted People &lt;/li&gt;

  &lt;li&gt;Trusted Root Certification Authorities &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En estos momentos ya podéis acceder al sitio pero, obviamente, recibiréis un error de acceso denegado. A modo de demostración daremos acceso de lectura total a cualquier usuario que se identifique con unas credenciales válidas. Para ello seguimos los siguientes pasos:&lt;/p&gt;

&lt;p&gt;1. Desde la administración de aplicaciones web en la &lt;b&gt;Administración Central de SharePoint&lt;/b&gt; seleccionamos la aplicación web que creamos al inicio de este artículo.&lt;/p&gt;

&lt;p&gt;2. Pulsamos en la &lt;i&gt;ribbon&lt;/i&gt; el botón &lt;b&gt;User Policy&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;3. Seleccionamos &lt;b&gt;‘All Users [Azure ACSv2]’&lt;/b&gt; y le asignamos permisos de lectura total.&lt;/p&gt;

&lt;p&gt;De cara a obtener el entorno dal cual lo habíamos planteado al inicio será necesario habilitar el acceso anónimo en la colección de sitios y crear un subsitio con permisos específicos en el cual no esté habilitado el acceso anónimo. Al volver a ser una tarea de alto nivel que no tiene ninguna relación con &lt;u&gt;Azure ACS v2&lt;/u&gt; no detallaré los pasos pero, de nuevo, si tenéis algún tipo de duda en este punto no dudéis en dejarme un comentario.&lt;/p&gt;

&lt;p&gt;Finalmente ya tenemos nuestro entorno totalmente preparado. A partir de este momento, cada vez que accedamos a la url &lt;a href="https://www.contoso-acsv2.com"&gt;https://www.contoso-acsv2.com&lt;/a&gt; el sistema nos permitirá indicar unas credenciales válidas en &lt;u&gt;Windows Live ID&lt;/u&gt; o en &lt;u&gt;Google&lt;/u&gt; para acceder al sistema. Evidentemente esto es únicamente el punto de partida para comenzar a trabajar con &lt;u&gt;Windows Azure ACS v2&lt;/u&gt; ya que se abre un amplio abanico de posibilidades. Si queréis comenzar a explorar este mundo y no queréis perder tiempo preparando este entorno, he publicado un &lt;a href="http://use.cloudshare.com/Pro/ShareEnv/7859J64203O5"&gt;permalink&lt;/a&gt; con todo lo que he explicado en este artículo totalmente configurado y que podéis utilizar a vuestra conveniencia.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1594138903316041685?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1594138903316041685/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1594138903316041685' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1594138903316041685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1594138903316041685'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/06/autenticacion-en-sharepoint-2010-con.html' title='Autenticación en SharePoint 2010 con sistemas externos mediante Azure ACS v2'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3982222106971649915</id><published>2011-06-27T09:18:00.001+02:00</published><updated>2011-06-27T09:18:29.863+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CompartiMOSS'/><title type='text'>Disponible el nº 8 de la revista CompartiMOSS</title><content type='html'>&lt;p&gt;Acaba de publicarse el número de Junio de la revista CompartiMOSS, gestionada por los grandes Fabián Imaz, Gustavo Vélez y Juan Carlos González. Por segunda vez consecutiva he tenido el placer de colaborar con un artículo relativo a autenticación. También se incluye un artículo sobre &lt;a href="www.gobeezy.com"&gt;Beezy&lt;/a&gt;, sobre el cual he hablado en otras ocasiones y seguiré hablando siempre que me sea posible. El índice general de la revista es el siguiente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Editorial &lt;/li&gt;    &lt;li&gt;Autenticación en SharePoint 2010 - II (David Martos) &lt;/li&gt;    &lt;li&gt;El lado social de SharePoint - II (Alberto Díaz Martín) &lt;/li&gt;    &lt;li&gt;Buenas prácticas en la implementación de Project Server 2010 (Juan Pablo Pussacq Laborde) &lt;/li&gt;    &lt;li&gt;Entrevista con Juan Carlos González &lt;/li&gt;    &lt;li&gt;Tips para la personalización de My Sites en SharePoint 2010 (Carlos Ariel Dantiags) &lt;/li&gt;    &lt;li&gt;QualitasLearning - Sistema de formación virtual en SharePoint Server 2010 (Alberto Aunchayna) &lt;/li&gt;    &lt;li&gt;Workaround para permitir filtrados por metadatos múltiples en el Content Query WebPart (Luis Máñez, Teresa Cebrián) &lt;/li&gt;    &lt;li&gt;Herramienta para configurar listas y bibliotecas de documentos de forma masiva (Fabián Imaz) &lt;/li&gt;    &lt;li&gt;TRAMAT-SharePoint &lt;/li&gt;    &lt;li&gt;Como configurar la integración entre Microsoft Dynamics CRM 2011 y SharePoint 2010? (Pablo Peralta) &lt;/li&gt;    &lt;li&gt;Beezy, redes #sociales corporativas sobre SharePoint &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Podéis descargar la revista &lt;a href="http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx"&gt;aquí&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3982222106971649915?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3982222106971649915/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3982222106971649915' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3982222106971649915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3982222106971649915'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/06/disponible-el-n-8-de-la-revista.html' title='Disponible el nº 8 de la revista CompartiMOSS'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-8773575745779905992</id><published>2011-06-06T23:18:00.002+02:00</published><updated>2011-06-06T23:20:42.635+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 y Visual Studio 2010 o si es oro todo lo que reluce…</title><content type='html'>&lt;p&gt;Leyendo el título de este artículo alguno podría imaginar que voy a hablar mal de SharePoint o de Visual Studio pero, si me conocéis, sabéis que esto no sería demasiado normal. Aunque nunca diré que son productos perfectos que colman todas mis necesidades en cualquier momento, muchos de los problemas que les encuentro acaban teniendo una razón más &lt;em&gt;humana&lt;/em&gt; de lo que parece inicialmente.&lt;/p&gt;&lt;p&gt;Hasta la llegada de Visual Studio 2010, aquellos que desarrollábamos proyectos basados en SharePoint teníamos bastante más trabajo y, a su vez, bastante más control. Sí, realizar un buen trabajo era más complicado pero cuando tu solución no se creaba o no se desplegaba solías tener más control sobre qué estaba pasando. Con la nueva versión de Visual Studio se había automatizado tanto el proceso que, en ocasiones, daba la sensación de que los desarrolladores habíamos perdido el control y en ocasiones pensabas qué pasaría con aquellos que comenzaban a desarrollar directamente para SharePoint 2010, ¿sabrían por qué pasaban las cosas y qué había detrás de cada elemento de la solución?&lt;/p&gt;&lt;p&gt;Hoy me he encontrado en uno de esos momentos en los que piensas que en realidad todo ha sido un paso atrás. La costumbre de que pulsando con el botón derecho del ratón sobre tu proyecto y seleccionando la opción &lt;strong&gt;Desplegar&lt;/strong&gt; todo se llevase al sitio que tocaba de manera automática ha hecho que me relaje y he estado todo el día dándole vueltas a un error que aparecía sin razón alguna y, como no, he acabado culpando a SharePoint y a Visual Studio.&lt;/p&gt;&lt;p&gt;Al final he hecho lo que es más aconsejable en estos casos: irme a casa, relajarme, ver una peli y, con la mente limpia… volver a revisar el problema. Y ha sido entonces cuando he empezado a ver algo de luz. Cuando generaba la solución de SharePoint 2010 no aparecía ningún error en el proceso. Visual Studio no me sacaba ningún mensaje advirtiendome de que algo no iba bien. ¿O sí lo hacía…? Pues efectivamente, lo hacía. Una rápida mirada a la salida de la generación me ofrecía la siguiente visión:&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;font face="Consolas"&gt;Spenta.Beezy.WebParts -&amp;gt; c:\code\Spenta.Beezy\Spenta.Beezy.WebParts\bin\Debug\Spenta.Beezy.WebParts.dll      &lt;br /&gt;
------ Build started: Project: Spenta.Beezy.Receivers, Configuration: Debug Any CPU ------       &lt;br /&gt;
Spenta.Beezy.Receivers -&amp;gt; c:\code\Spenta.Beezy\Spenta.Beezy.Receivers\bin\Debug\Spenta.Beezy.Receivers.dll       &lt;br /&gt;
&lt;strong&gt;&lt;font color="#ff0000"&gt;Error: Object reference not set to an instance of an object.&lt;/font&gt;         &lt;br /&gt;
&lt;/strong&gt;========== Build: 10 succeeded or up-to-date, &lt;strong&gt;&lt;font color="#ff0000"&gt;1 failed&lt;/font&gt;&lt;/strong&gt;, 0 skipped ==========&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Hubiera agradecido que la parte que yo he resaltado hubiera sido más evidente en la ventana de Visual Studio pero en cualquier caso hay que decir que el error era bastante claro y era el primer sitio que tenía que haber mirado después de 20 veces buscando una razón para algo inexplicable. También tendría que haberme hecho recapacitar el hecho que la fecha de última modificación del paquete generado era de hacía unas horas. En cualquier caso, viendo la raíz del problema lo siguiente era investigar la causas y, claro está, resolverlas. Y aquí volveríamos al asunto sobre el cual gira este artículo: antes hubiera ido a la ventana de MS-DOS y hubiera ejecutado unos cuantos comandos para resolver el entuerto pero… ¿Qué hago ahora que todo está tan automatizado y tan integrado? &lt;/p&gt;&lt;p&gt;Me disponía ya a abrir la consola de comandos para hacerlo todo a la antigua usanza cuando el poco de sentido común que me queda me hizo pensar que era imposible que Microsoft no hubiera pensado en estas situaciones, y fue entonces cuando vi algo que hasta la fecha no había visto (en parte por no haberlo necesitado, en parte por mirar siempre la pantalla en diagonal).&lt;/p&gt;&lt;p&gt;Cuando tenéis ese error en la ventana de salida de compilación, veréis que podéis elegir que se muestre información sobre las &lt;strong&gt;SharePoint Tools&lt;/strong&gt; en el desplegable al inicio de la ventana. En mi caso, al seleccionar esa opción vi lo siguiente:&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;font face="Consolas"&gt;{ProjectRoot}\pkg\Debug\Spenta.Beezy\Spenta.Beezy.WebParts.dll -&amp;gt; GAC      &lt;br /&gt;
EXCEPTION: Access to the path &lt;strong&gt;&lt;font color="#ff0000"&gt;'c:\code\Spenta.Beezy\Spenta.Beezy\pkg\Debug\Spenta.Beezy\Microsoft.Practices.Unity.dll' is denied.          &lt;br /&gt;
&lt;/font&gt;&lt;/strong&gt;{ProjectRoot}\pkg\Debug\Spenta.Beezy\Microsoft.Practices.Unity.dll -&amp;gt; GAC       &lt;br /&gt;
========== Copying to GAC/BIN succeeded ==========&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Como podéis ver, el error era bastante evidente y era simplemente un ensamblado que no acababa de copiarse porque algún proceso lo tenía atrapado. Claro, una vez visto el problema real, la solución apareció en cuestión de segundos y todo empezó a funcionar a las mil maravillas. Moraleja: &lt;strong&gt;KISS (Keep It Simple Stupid)&lt;/strong&gt;, si algo que tiene que ir, no va, antes de buscarle los tres pies al gato busca las cosas más simpels.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-8773575745779905992?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/8773575745779905992/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=8773575745779905992' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8773575745779905992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8773575745779905992'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/06/sharepoint-2010-y-visual-studio-2010-o.html' title='SharePoint 2010 y Visual Studio 2010 o si es oro todo lo que reluce…'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4823448135318177753</id><published>2011-05-31T10:57:00.001+02:00</published><updated>2011-05-31T10:57:06.264+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Webcast. Todo lo que siempre quisiste saber sobre SharePoint, pero no te atreviste a preguntar II</title><content type='html'>&lt;p&gt;Los grupos de usuarios de SharePoint de habla hispana os proponemos un evento online un tanto diferente: os proponemos durante aproximadamente 90 minutos charlar con los principales expertos de la plataforma en países de habla hispana. Ven con nosotros, plantéanos tus dudas y cuestiones sobre nuestro servidor favorito y averigua todo aquello que siempre quisiste saber, pero nunca te atreviste a preguntar. &lt;/p&gt;  &lt;p&gt;Nos vemos el 1 de junio a las 15.00 (GMT) &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032486303&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032486303&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;                &lt;p&gt;Entre los participantes en la charla contaremos con algunos de los mayores conocedores de la plataforma SharePoint como: Gustavo Vélez, &lt;b&gt;David Martos,&lt;/b&gt; Ricardo Muñoz, &lt;b&gt;Juan Andrés Valenzuela,&lt;/b&gt; Juan Carlos González, &lt;b&gt;Alberto Díaz,&lt;/b&gt; Daniel Seara, &lt;b&gt;Héctor Insua, &lt;/b&gt;Manuel Herrera, &lt;strong&gt;Haarón González&lt;/strong&gt; y Fabian Imaz.&lt;/p&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4823448135318177753?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4823448135318177753/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4823448135318177753' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4823448135318177753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4823448135318177753'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/05/webcast-todo-lo-que-siempre-quisiste.html' title='Webcast. Todo lo que siempre quisiste saber sobre SharePoint, pero no te atreviste a preguntar II'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4799963806183823398</id><published>2011-05-30T16:28:00.001+02:00</published><updated>2011-05-30T16:28:06.928+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Designer'/><title type='text'>SharePoint Designer 2010 no me permite guardar un fichero</title><content type='html'>&lt;p&gt;Alguna vez te habrá pasado que no puedes hacer algo con SharePoint Designer 2010 que normalmente puedes hacer. El caso con el que me he encontrado hoy ya me había pasado en alguna ocasión, pero el hecho que haya estado buscando la solución durante más tiempo del necesario me ha empujado a escribir este breve artículo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Síntoma&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Al abrir un sitio con SharePoint Designer 2010 puedo localizar un fichero, desprotegerlo y editarlo pero al intentar guardar el fichero recibo un error indicando que &lt;strong&gt;el fichero ya no está desprotegido o que ha sido eliminado&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Causa&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A la hora de implementar el paquete de despliegue no hemos indicado que el fichero en cuestión es &lt;strong&gt;GhostableInLibrary&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Solución&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Localizar el fichero en vuestro paquete de despliegue y aseguraos de poner la parte resaltada en la siguiente figura.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Elements&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Module&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ModuleName&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Path&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ModulePath&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ModuleUrl&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;File&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Path&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;file.url&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;file.url&amp;quot;&lt;/span&gt; &lt;strong&gt;&lt;span style="color: #ff0000"&gt;Type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;GhostableInLibrary&amp;quot;&lt;/span&gt;&lt;/strong&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Module&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Elements&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Como habréis imaginado, necesitaréis redesplegar el sitio para solucionar el problema. Si en el escenario en el que os encontráis no podéis hacerlo, la única opción que tenéis es la de eliminar el fichero incorrectamente desplegado y subirlo manualmente ya sea desde SharePoint Designer o desde la interfaz de usuario de SharePoint. En cualquier caso os recomiendo que arregléis la característica que ya teníais (por eso de que pueda venir un service pack o un desarrollador después de vosotros que haga que la característica se vuelva a activar y os rompa alguna cosa)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4799963806183823398?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4799963806183823398/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4799963806183823398' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4799963806183823398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4799963806183823398'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/05/sharepoint-designer-2010-no-me-permite.html' title='SharePoint Designer 2010 no me permite guardar un fichero'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3231842185873612858</id><published>2011-05-25T10:16:00.001+02:00</published><updated>2011-05-25T10:16:51.343+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>El servicio de sincronización de perfiles de usuario de SharePoint 2010 no se inicia</title><content type='html'>&lt;p&gt;Quizá uno de los puntos más conflictivos en la instalación de &lt;strong&gt;SharePoint 2010&lt;/strong&gt; sea la configuración del servicio de sincronización de perfiles de usuario. Son muchas las causas que pueden provocar que el servicio no se inicie o no acabe de funcionar correctamente. En su mayoría las causas acaban siendo el no seguir adecuadamente los pasos de la &lt;a href="http://technet.microsoft.com/en-us/library/ee721049.aspx"&gt;guía&lt;/a&gt; de instalación. No obstante, nunca dejará de sorprenderme el hecho que, aún siguiendo los pasos al pie de la letra, siempre acaba habiendo un nuevo obstáculo en el camino.&lt;/p&gt;  &lt;p&gt;Hoy, en una instalación que tengo entre manos, me encontré con que el servicio estaba parado y no había manera humana de iniciarlo. Al revisar los logs me encontré con esta perlita:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;strong&gt;The Execute method of job definition       &lt;br /&gt;Microsoft.Office.Server.Administration.ProfileSynchronizationSetupJob        &lt;br /&gt;(ID b542c13b-af6a-41ed-a810-04a7405c536b) threw an exception. More        &lt;br /&gt;information is included below.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;strong&gt;An update conflict has occurred, and you must re-try this action. The       &lt;br /&gt;object UserProfileApplication Name=User Profile Service Application        &lt;br /&gt;was updated by FARM\user, in the OWSTIMER (4548) process, on        &lt;br /&gt;machine SP.&amp;#160; View the tracing log for more information about the        &lt;br /&gt;conflict.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Tras verificar unas cuantas veces que había seguido todos los pasos al pie de la letra empecé a buscar la causa del error que estaba recibiendo. Al parecer esto ocurre si el contenido de la caché del sistema de archivos en los servidores frontales de la granja de SharePoint es más nuevo que los contenidos de la base de datos de contenidos. Pero, ¿cómo lo soluciono?&lt;/p&gt;  &lt;p&gt;La solución es más simple de lo que parece. Sólo es necesario seguir los pasos que Microsoft indica en &lt;a href="http://support.microsoft.com/kb/939308"&gt;este artículo&lt;/a&gt; de su KB.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Parar el servicio &lt;strong&gt;Windows SharePoint Services Timer&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Navegar a la carpeta donde Windows Server 2008 guarda la caché. En 2008 lo encontraréis en &lt;strong&gt;%ProgramData%\Microsoft\SharePoint\Config&lt;/strong&gt;.&lt;/li&gt;    &lt;li&gt;Encontraréis ahí dos carpetas con un GUID como nombre. Una de ellas contiene un montón de ficheros .XML y un fichero &lt;strong&gt;CACHE.INI&lt;/strong&gt;. Entrar en la carpeta que contiene el fichero CACHE.INI.&lt;/li&gt;    &lt;li&gt;Hacer una copia de seguridad del fichero &lt;strong&gt;CACHE.INI&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Eliminar todos los ficheros .XML de la carpeta&lt;/li&gt;    &lt;li&gt;Borrar todo el contenido del fichero &lt;strong&gt;CACHE.INI&lt;/strong&gt;, escribir un 1 y guardar el fichero&lt;/li&gt;    &lt;li&gt;Reiniciar el servicio &lt;strong&gt;Windows SharePoint Services Timer&lt;/strong&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Probar de nuevo a iniciar el servicio de sincronización de perfiles de usuario y debería funcionar correctamente.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3231842185873612858?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3231842185873612858/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3231842185873612858' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3231842185873612858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3231842185873612858'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/05/el-servicio-de-sincronizacion-de.html' title='El servicio de sincronización de perfiles de usuario de SharePoint 2010 no se inicia'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-608990653857887434</id><published>2011-04-26T15:59:00.001+02:00</published><updated>2011-04-26T15:59:12.035+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office365'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Spenta lanza un nuevo producto para SharePoint 2010 y para Office365</title><content type='html'>&lt;p&gt;Los últimos meses he estado trabajando en el desarrollo de un producto que empieza a dar ahora sus primeros pasos, después de semanas de eventos, pilotos y demostraciones. El producto está pensado para aumentar las &lt;strong&gt;características sociales&lt;/strong&gt; de &lt;strong&gt;SharePoint 2010&lt;/strong&gt; de manera que se obtengan las funcionalidades que demanda el mercado en ese sentido a la vez que se aprovechen las capacidades productivas de la plataforma de Microsoft.&lt;/p&gt;  &lt;p&gt;Cómo no podía ser de otra manera, el producto puede funcionar tanto en la versión &lt;em&gt;on-premises&lt;/em&gt; de SharePoint como en su versión &lt;em&gt;online&lt;/em&gt; (Office365) y esto es así, básicamente, para dar soporte a cualquier tipo de organización, desde una gran empresa, con miles de empleados y con capacidad para mantener su propia granja de SharePoint, hasta pequeñas organizaciones que prefieren pagar un &lt;em&gt;alquiler&lt;/em&gt; para dar soporte a un reducido número de personas.&lt;/p&gt;  &lt;p&gt;Próximamente publicaré información técnica de interés en torno a este producto pero, por el momento, os puedo dirigir a su &lt;a href="http://www.facepoint.net"&gt;web&lt;/a&gt; para que conozcáis &lt;strong&gt;FacePoint&lt;/strong&gt;, nombre por el cual se conoce actualmente la plataforma que hemos desarrollado. Este nombre, no obstante, no durará demasiado, ya que se acaba de abrir un proceso de elección del nuevo nombre que tendrá el producto y en el que todo el que quiera puede participar. Habrá premios para la persona que proponga el nombre que salga elegido y se sortearán también premios entre todos los participantes, así que &lt;strong&gt;¡os animo a realizar vuestra propuesta&lt;/strong&gt;!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-608990653857887434?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/608990653857887434/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=608990653857887434' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/608990653857887434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/608990653857887434'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/04/spenta-lanza-un-nuevo-producto-para.html' title='Spenta lanza un nuevo producto para SharePoint 2010 y para Office365'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1557895994491741879</id><published>2011-04-20T15:38:00.001+02:00</published><updated>2011-04-20T15:38:10.294+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office365'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Webcast MSDN: Office 365 ya está aquí, la productividad llega a la nube</title><content type='html'>&lt;p&gt;El próximo día 4 de mayo, un servidor, en compañía de Mario Cortés y Juan Carlos González, presentará un webcast para hablar de Office365. Seguro que muchos de vosotros habréis leído mucho estos días acerca de esta plataforma porque hace sólo unos días que Microsoft ha lanzado al mercado la beta pública.&lt;/p&gt;  &lt;p&gt;Si queréis más información sobre el evento o si os queréis apuntar, podéis hacerlo &lt;a href="https://msevents.microsoft.com/CUI/WebCastRegistrationConfirmation.aspx?culture=es-ES&amp;amp;RegistrationID=1309313354&amp;amp;Validate=false"&gt;aquí&lt;/a&gt;. Si queréis más información sobre Office365, ¡no dudéis en acudir a la cita! Os dejo aquí la descripción y la agenda del evento.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Los grupos de usuarios de Cloud Computing de España (&lt;/em&gt;&lt;a href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=78a9959b6950486f8ab2ddac84278b9c&amp;amp;URL=http%3a%2f%2fwww.linkedin.com%2fgroups%2fGrupo-usuarios-Cloud-Computing-Espa%25C3%25B1a-3529148%3ftrk%3dmyg_ugrp_ovr"&gt;&lt;em&gt;CLOUDES&lt;/em&gt;&lt;/a&gt;&lt;em&gt;), de SharePoint de España y Cataluña (&lt;/em&gt;&lt;a href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=78a9959b6950486f8ab2ddac84278b9c&amp;amp;URL=http%3a%2f%2fwww.suges.es%2f"&gt;&lt;em&gt;SUGES&lt;/em&gt;&lt;/a&gt;&lt;em&gt; y &lt;/em&gt;&lt;a href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=78a9959b6950486f8ab2ddac84278b9c&amp;amp;URL=http%3a%2f%2fwww.linkedin.com%2fgroups%2fSUGCAT-2883719%3ftrk%3dmyg_ugrp_ovr"&gt;&lt;em&gt;SUG.CAT&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) os proponemos una sesión en la que mostraremos a la plataforma de productividad en la nube de Microsoft, más conocida como Office 365, centrándonos en la versión de SharePoint en la nube (SharePoint Online – SPO). Veremos los bloques clave de la plataforma, la sencillez de administración y haremos una primera inmersión a la extensibilidad mediante desarrollo de SPO. Como ponentes, contaremos con Mario Cortés Flores, David Martos y Juan Carlos Gonzalez.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agenda:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Office 365: Productividad en la nube.&lt;/li&gt;    &lt;li&gt;Administración en Office 365.&lt;/li&gt;    &lt;li&gt;Introducción al desarrollo en SPO:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Novedades para desarrolladores.&lt;/li&gt;      &lt;li&gt;Posibilidades, metodologías y limitaciones.&lt;/li&gt;      &lt;li&gt;Escenarios típicos de desarrollo.&lt;/li&gt;      &lt;li&gt;Herramientas:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Interfaz de usuario.&lt;/li&gt;        &lt;li&gt;SharePoint Designer 2010.&lt;/li&gt;        &lt;li&gt;Visual Studio 2010.&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Introducción a las soluciones SandBox.&lt;/li&gt;      &lt;li&gt;Modelo de objetos en cliente.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1557895994491741879?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1557895994491741879/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1557895994491741879' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1557895994491741879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1557895994491741879'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/04/webcast-msdn-office-365-ya-esta-aqui-la.html' title='Webcast MSDN: Office 365 ya está aquí, la productividad llega a la nube'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-6772681957943309694</id><published>2011-04-14T22:46:00.001+02:00</published><updated>2011-04-14T22:46:32.913+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Q&amp;A with the SharePoint MVP Experts Live!</title><content type='html'>&lt;p&gt;El próximo miércoles día 20 a las 18:00 hora española tendrá lugar una charla en vivo con algunos de los MVPs de SharePoint en la cual tendréis la oportunidad de preguntar cualquier cosa relacionada con SharePoint que necesitéis saber.&lt;/p&gt;  &lt;p&gt;Los MVPs confirmados para el evento son:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Cornelius van Dyk &lt;/li&gt;    &lt;li&gt;Dan Attis &lt;/li&gt;    &lt;li&gt;Daniel Wessels &lt;/li&gt;    &lt;li&gt;David Martos &lt;/li&gt;    &lt;li&gt;Ivan Sanders &lt;/li&gt;    &lt;li&gt;Jeremy Thake &lt;/li&gt;    &lt;li&gt;John Ross &lt;/li&gt;    &lt;li&gt;Kris Wagner &lt;/li&gt;    &lt;li&gt;Mike Oryszak &lt;/li&gt;    &lt;li&gt;Paul Galvin &lt;/li&gt;    &lt;li&gt;Randy Drisgill &lt;/li&gt;    &lt;li&gt;Woody Windischman &lt;/li&gt;    &lt;li&gt;Zlatan Dzinic &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Os dejo aquí el texto original del evento que, obviamente, será en inglés y os invito a que asistáis y preguntéis todo aquello que os interese saber sobre SharePoint.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Do you have tough technical questions regarding SharePoint for which you're seeking answers? Do you want to tap into the deep knowledge of the talented Microsoft Most Valuable Professionals? The SharePoint MVPs are the same people you see in the technical community as authors, speakers, user group leaders and answerers in the MSDN and TechNet forums. By popular demand, we have brought these experts together as a collective group to answer your questions live. So please join us and bring on the questions! This chat will cover WSS 3.0, MOSS, SharePoint Foundation 2010 and the SharePoint Server 2010. Topics include setup and administration, design, development and general question.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Please join us on Wednesday April 20th at 9am PDT or noon EST to chat with MVPs from around the world. Learn more and add these chats to your calendar by visiting the MSDN event page &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/events/aa497438.aspx"&gt;&lt;em&gt;http://msdn.microsoft.com/en-us/events/aa497438.aspx&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-6772681957943309694?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/6772681957943309694/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=6772681957943309694' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6772681957943309694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6772681957943309694'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/04/q-with-sharepoint-mvp-experts-live.html' title='Q&amp;amp;A with the SharePoint MVP Experts Live!'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3459537342514287902</id><published>2011-04-14T09:43:00.001+02:00</published><updated>2011-04-14T10:36:55.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>¿Por qué no usar SharePoint?</title><content type='html'>&lt;p&gt;Ayer leí un &lt;a href="http://blog.yerbabuena.es/2011/03/5-razones-para-no-usar-sharepoint-2010.html?showComment=1302712520717#c1986700521988269638"&gt;artículo&lt;/a&gt; en el que su autor ofrecía las 5 razones que, en su opinión, desaconsejaban el uso de SharePoint. Yo, por defecto, valoro y respeto todas las opiniones siempre que estas no sean ofensivas, y ésta no lo era. Me permití eso sí dar mi opinión personal y ahora me voy a permitir expresarla de manera más detallada en mi propio blog.&lt;/p&gt;  &lt;p&gt;Para empezar, vamos a echar un vistazo a las 5 razones mencionadas por el autor:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;: aparentemente SharePoint no es un sistema seguro basándonos por ejemplo en un &lt;a href="http://blog.s21sec.com/2011/01/sharepoint-casa-con-muchas-puertas-mala.html"&gt;artículo&lt;/a&gt; de S21sec. Queda fuera de toda duda la capacidad y el conocimiento de la gente de S21sec, y estoy convencido de que si existe una puerta, ellos la encontrarán, en SharePoint o en cualquier sistema. No obstante, veo el artículo y los 5 puntos que destaca, de los cuales en dos de ellos ya se hace mención a que por defecto la puerta está cerrada (Extensiones FrontPage y Webdav), y los otros 3 se pueden (y deben) cerrar cuando trabajamos en un entorno publicado en internet. En este caso, si en un despliegue de SharePoint al público te encuentras con una de estas 5 puertas abiertas, nos encontramos con una mala práctica de la gente que ha puesto en marcha el proyecto, y no entraré en si esto se debe a la capacidad de las personas, o las características (presupuesto) del proyecto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Precio&lt;/strong&gt;: el argumento que más suelo escuchar para atacar a SharePoint, pero todavía no he recibido ninguna alternativa válida a menor coste. Está claro que hay CMS más baratos, gestores de contenidos más baratos o bases de datos más baratas… pero señores, SharePoint no es ninguna de estas cosas. Está claro que SharePoint es un producto extremadamente caro si lo que quieres es tener una web estática, o si quieres tener una lista de contactos. Me gustaría escuchar vuestras opiniones al respecto, siempre proponiendo alternativas válidas que ofrecan todo lo que ofrece la suite SharePoint + Office. También estaré encantado de evaluarlas y hacer un análisis de sus funcionalidades y de su precio final real. El autor, en su artículo, hace referencia a las nuevas versiones de los productos que te obligan a cambiar el resto del ecosistema. Si tienes Windows XP y IE6 vas a tener problemas… claro, pero tampoco estás obligado a instalar SharePoint. Tu Windows XP no dejará de funcionar si no instalas SharePoint 2010. ¿Y si tienes un Windows Server 2003 en un hierro de 32bits? Pues tampoco te sirve. Está claro, todo tiene un precio y tienes que valorar lo que te aporta SharePoint y si te merece la pena invertir en infraestructura. Estoy seguro de que muchas empresas funcionarían perfectamente con papel y lápiz (y seguro que lo hacen) y también estoy seguro de que muchas empresas recuperarían una inversión de millones de euros aumentando la productividad un 1% en un año. De todas maneras, insisto, si tienes una alternativa mejor, instálala.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Interoperabilidad&lt;/strong&gt;: en este punto no creo que merezca la pena entrar. Si has visto como se integra SharePoint con la suite de Office o con Lync sabes de lo que hablo. Evidentemente me dirijo al mundo empresarial y no al mundo de consumo. Busca este tipo de herramienta en el mundo del open source y, si lo encuentras, hazme una demo. Mejor dicho, dame el link de descarga para que me lo instale y lo pruebe. Ahora, ¿que Twitter o Facebook están a la orden del día y quiero que mi SharePoint se integre con ellos? aquí podríamos hablar de claims, pero no quiero entrar a nivel técnico… y, por supuesto, si necesitas cualquier funcionalidad específica para integrarte con otro sistema, con SharePoint no te faltan opciones, desde usar los servicios de conexión con sistemas externos de SharePoint (sin desarrollar) hasta desarrollar cualquier cosa que necesites, pero esto lo dejo para el siguiente punto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Escalabilidad&lt;/strong&gt;: en realidad el autor quiere decir extensibilidad. Lo peor del caso es que su fuente es un &lt;a href="http://www.cmswire.com/cms/enterprise-cms/3-reasons-to-not-write-custom-code-for-sharepoint-2010-009713.php"&gt;artículo&lt;/a&gt; donde las razones que se dan para no escribir código para SharePoint son: Que SharePoint ya tiene mucha funcionalidad de serie, que escribir código no es fácil y que posiblemente el código que escribas no funcione en nuevas versiones de SharePoint. Vamos a ver, si ya tiene mucha funcionalidad por defecto, ¿por qué estamos discutiendo la calidad del producto? De todas maneras, estoy de acuerdo, si tienes que desarrollar mucho código sobre SharePoint quizá tengas que plantearte si es el producto que buscas. Eso sí, que es complicado desarrollar para SharePoint no lo acepto. Es tan complicado desarrollar para SharePoint como desarrollar para cualquier otro sistema. El problema aquí es que el desarrollador no tenga la formación mínima necesaria para hacer lo que se le ha pedido que haga y no que SharePoint añada complejidad al problema. Si tienes que desarrollar una nueva funcionalidad para SharePoint, no compares el coste de implementarlo sobre SharePoint con lo que te cuesta implementarlo directamente en .NET o en java… compáralo que te cuesta implementar toda la funcionalidad de SharePoint junto con esa nueva funcionalidad. Eso sí, vigila que posiblemente con el nuevo framework o con la nueva versión del SO, tu código tenga que revisarse de la misma manera que si instalas una nueva versión de SharePoint. De todas formas, y un último comentario al artículo en cuestión: si sale una nueva versión de SharePoint seguramente se planteará un proyecto de migración que incluya cambios en el código fuente pero esto sucede en TODOS los proyectos de desarrollo del mundo mundial. Si yo hago un PRODUCTO sobre SharePoint 2007, seguro que desarrollaré una actualización para SharePoint 2010 o SharePoint 201X que permita que sigas trabajando cuando actualices la plataforma. Si no lo hago el problema no es SharePoint, es mi producto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Comunidad&lt;/strong&gt;: este es otro punto que me suele afectar especialmente. No le quito la razón a nadie que me diga que instalar un software propietario te “ata” en cierta manera a un un fabricante, y posiblemente encuentres casos en el mundo a los que esa atadura les haya causado algún problema. Dudo mucho que Microsoft te haya dejado tirado si su software tenía algún defecto, pero podría pasar, claro. Creo, de todas maneras, que quien tiene más probabilidades de dejarte tirado es la empresa que te ha desarrollado el proyecto y no el fabricante en sí. En cualquier caso, profesionales del mundo de SharePoint los hay, y muchos, y estoy seguro de que si tienes un problema podrás encontrar fácilmente alguien que te lo resuelva. ¿Que eso vale dinero? ¿alguien piensa realmente que el software libre es gratis? ¿Si tú tienes una empresa y te encuentras con un problema en un componente libre, lo vas a solucionar tú y lo vasa volver a compilar, o vas a ponerte en manos de un profesional? Lo curioso del caso es que en el apartado alternativas aparecen productos que tienen versión gratuita y versión de pago como Alfresco. Curiosamente lo mismo sucede con SharePoint. Ahora bien, una cosa es que el producto sea libre y otra muy diferente es que haya una comunidad asociada. Os puedo decir que alrededor de SharePoint hay una comunidad enorme, con infinitud de grupos de usuario y de foros de discusión. También os digo que hay mucho componente open source que se instala sobre SharePoint, de la misma manera que hay mucho elemento de pago relacionado con productos open source. En muchas ocasiones me he visto defendiendo el argumento del coste de licencia y el coste de propiedad de SharePoint contra alguien que defendía un producto gratuito u open source que ha acabado reconociendo que si querías un rendimiento aceptable para un volumen elevado de usuarios necesitabas tener detrás bases de datos Oracle o servidores de aplicaciones de BEA. De nuevo, os invito a que me expongáis vuestros comentarios al respecto y me encantaría que alguien me convenciese de que estoy equivocado.&lt;/p&gt;  &lt;p&gt;Ahora podría exponer mis 100 razones para usar SharePoint pero creo que con lo que he expuesto anteriormente queda claro que tengo una confianza total en el prducto. He visto y he participado en la implantación de numerosos proyectos donde SharePoint era una pieza fundamental y os puedo garantizar que es un producto fantástico que puede mejorar la productividad de un equipo de personas y minimizar sus costes. Evidentemente tiene sus detractores, como todo… porque no es una plataforma que sirva PARA TODO, y en ocasiones así es como se vende. Me he encontrado también en muchas ocasiones con clientes insatisfechos porque no recibieron lo que esperaban. Son, claramente, casos donde las espectativas no se gestionaron de manera adecuada. Si te encuentras en esa situación, será un placer para mí exponerte mi punto de vista, tanto para decirte que la elección de SharePoint no era la adecuada para ti como para decirte que hicieron un trabajo desastroso.&lt;/p&gt;  &lt;p&gt;Finalmente, me parece que acabar el artículo recomendando &lt;u&gt;no usar SharePoint porque no integra un producto desarrollado por su propia empresa&lt;/u&gt; no me parece para nada adecuado. En primer caso porque te expones a que alguien te diga que tiene algo similar funcionando sobre SharePoint y comience a decir por ahí que no compren su producto porque no se integra con SharePoint, y en segundo lugar porque no creo que sea una buena práctica enfrentarte a un gigante. Hay miles de implantaciones de SharePoint a lo largo del planeta y lo más inteligente sería integrar tu producto para optar a entrar en todas esas implantaciones. En cualquier caso es una opinión igual de respetable que la mía y la de cualquiera.&lt;/p&gt;  &lt;p&gt;Y ahora, reventadme a comentarios &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TaaluDjPEFI/AAAAAAAAAn8/-1nNMRlmIlI/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3459537342514287902?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3459537342514287902/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3459537342514287902' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3459537342514287902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3459537342514287902'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/04/por-que-no-usar-sharepoint.html' title='¿Por qué no usar SharePoint?'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_K1ZOnX85PHA/TaaluDjPEFI/AAAAAAAAAn8/-1nNMRlmIlI/s72-c/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4251147384962526947</id><published>2011-04-12T13:10:00.001+02:00</published><updated>2011-04-12T13:10:18.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Charla con los expertos: Todo lo que siempre has querido saber sobre SharePoint, pero no te atreviste a preguntar!</title><content type='html'>&lt;p&gt;Los grupos de usuarios de SharePoint de habla hispana os proponemos un evento online un tanto diferente: os proponemos durante aproximadamente 90 minutos charlar con los principales expertos de la plataforma en países de habla de hispana. Ven con nosotros, plantéanos tus dudas y cuestiones sobre nuestro servidor favorito y averigua todo aquello que siempre quisiste saber, pero nunca te atreviste a preguntar. &lt;/p&gt;  &lt;p&gt;Entre los participantes en la charla contaremos con algunos de los mayores conocedores de la plataforma SharePoint como: Gustavo Vélez &lt;strong&gt;David Martos &lt;/strong&gt;Ricardo Muñoz &lt;strong&gt;Juan Andrés Valenzuela &lt;/strong&gt;Juan Carlos González &lt;strong&gt;Alberto Díaz &lt;/strong&gt;Daniel Seara &lt;strong&gt;Héctor Insua &lt;/strong&gt;Manuel Herrera &lt;strong&gt;Haarón González&lt;/strong&gt; Fabián Imaz.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TaQzF8OJgEI/AAAAAAAAAn0/Jw8XOvw9f2A/s1600-h/Pie_Chat_Expertos_SharePoint%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Pie_Chat_Expertos_SharePoint" border="0" alt="Pie_Chat_Expertos_SharePoint" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TaQzGdGbGDI/AAAAAAAAAn4/nZQhyxQc8oY/Pie_Chat_Expertos_SharePoint_thumb%5B4%5D.png?imgmax=800" width="504" height="202" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Datos de interés:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Audiencia: Information Workers, analistas en plataforma SharePoint y Office, Desarrolladores, Jefes de Proyecto. &lt;/li&gt;    &lt;li&gt;Fecha: Miércoles 27 de abril, a las 16:00 (GMT + 1). &lt;/li&gt;    &lt;li&gt;Duración: 90 minutos aproximadamente. &lt;/li&gt;    &lt;li&gt;Enlace de registro: &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032485055&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032485055&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4251147384962526947?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4251147384962526947/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4251147384962526947' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4251147384962526947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4251147384962526947'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/04/charla-con-los-expertos-todo-lo-que.html' title='Charla con los expertos: Todo lo que siempre has querido saber sobre SharePoint, pero no te atreviste a preguntar!'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_K1ZOnX85PHA/TaQzGdGbGDI/AAAAAAAAAn4/nZQhyxQc8oY/s72-c/Pie_Chat_Expertos_SharePoint_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-27045321781903784</id><published>2011-04-01T09:20:00.001+02:00</published><updated>2011-04-01T09:20:20.274+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='iis'/><title type='text'>The extended protection settings configured on IIS do not match the settings configured on the transport</title><content type='html'>&lt;p&gt;Hoy me he encontrado con un extraño error en una instalación de SharePoint 2010 que hacía que algunos servicios no se iniciaran correctamente y que fuera imposible conectar con las colecciones de sitios con SharePoint Designer. Tras revisar el visor de sucesos y las trazas de SharePoint topé con la siguiente excepción:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;WebHost failed to process a request. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/12036987 &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;Exception: System.ServiceModel.ServiceActivationException: The service '/_vti_bin/client.svc' cannot be activated due to an exception during compilation. The exception message is: The extended protection settings configured on IIS do not match the settings configured on the transport. See inner exception for details.. ---&amp;gt; System.NotSupportedException: The extended protection settings configured on IIS do not match the settings configured on the transport. See inner exception for details. ---&amp;gt; System.InvalidOperationException: The ExtendedProtectionPolicy.PolicyEnforcement values do not match. One policy has a value of WhenSupported, while the other has a value of Never. These values must match exactly. &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Tras investigar un rato, encontré información referente a la configuración de IIS, más concretamente, a su configuración de autenticación. No quiero entrar demasiado en detalle, primero porque no soy un experto en la materia, y segundo porque si habéis llegado aquí posiblemente estéis buscando una solución y no una clase magistral de configuración de IIS.&lt;/p&gt;  &lt;p&gt;Para solucionar el problema, en cada una de las aplicaciones web de SharePoint que os esté generando la excepción anteriormente mencionada, acceder a la configuración de autenticación de IIS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TZV8pC9b4qI/AAAAAAAAAnc/nDXD8XRJ2TE/s1600-h/image%5B9%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TZV8p12VvKI/AAAAAAAAAng/AjwKvSPtKLU/image_thumb%5B12%5D.png?imgmax=800" width="504" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez allí deberíais tener habilitado, almenos, autenticación windows. Si entráis en la configuración avanzada, tal y como muestra la figura, accederéis a la configuración de protección extendida.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_K1ZOnX85PHA/TZV8qIxegDI/AAAAAAAAAnk/R847tiwEURY/s1600-h/image%5B10%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TZV8q0I06FI/AAAAAAAAAno/pUpmKURuEZk/image_thumb%5B13%5D.png?imgmax=800" width="504" height="333" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En mi caso tenía configurada la protección extendida en modo &lt;strong&gt;Accept&lt;/strong&gt;. Hacer el cambio a &lt;strong&gt;Off&lt;/strong&gt; solucionó el problema.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TZV8rjm9-OI/AAAAAAAAAns/7PPqAzm3SxI/s1600-h/image%5B20%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TZV8sZFcUaI/AAAAAAAAAnw/HyBTYJeyf_U/image_thumb%5B25%5D.png?imgmax=800" width="504" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Nota importante: en el caso que me ocupa me encontraba en un entorno de pruebas y, por lo tanto, realicé este cambio sin investigar a fondo las causas que modificaron este parámetro ni las consecuencias de hacer la variación correspondiente. Si tenéis que hacer esto en un entorno desplegado en producción, os recomiendo que vosotros sí lo hagáis.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-27045321781903784?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/27045321781903784/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=27045321781903784' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/27045321781903784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/27045321781903784'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/04/extended-protection-settings-configured.html' title='The extended protection settings configured on IIS do not match the settings configured on the transport'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_K1ZOnX85PHA/TZV8p12VvKI/AAAAAAAAAng/AjwKvSPtKLU/s72-c/image_thumb%5B12%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-6702817785552052405</id><published>2011-03-28T22:38:00.001+02:00</published><updated>2011-03-28T22:41:41.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lync Server'/><title type='text'>Instalar Lync Server 2010 en WS2008R2 SP1</title><content type='html'>&lt;p&gt;En un artículo anterior expliqué como instalar Lync Server 2010 sobre Windows Server 2008 R2. Tras algunos problemas, sobretodo motivados por incompatibilidades con SQL Server 2008 R2 y por el uso del usuario administrador de dominio para instalar la plataforma, todo comenzó a funcionar como la seda. Tanto fue así que me animé a hacer una nueva instalación, pero esta vez en una granja completa y usando las cuentas de usuario recomendadas por la documentación. Al hacerlo de esta manera me he encontrado con algunas diferencias, todas ellas debidamente indicadas en la documentación del producto y referentes, por ejemplo, a los permisos que necesita el usuario que se usa para la instalación de Lync Server 2010. Ha habido un detalle, eso sí, que tuve que deducirlo yo, y que está relacionado con la instalación sobre Windows Server 2008R2 &lt;strong&gt;SP1&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Si sigues el proceso de instalación, a la hora de ejecutar el segundo paso (&lt;strong&gt;Setup or remove Lync Server components&lt;/strong&gt;) del apartado &lt;strong&gt;Install or update Lync Server System&lt;/strong&gt;, nos encontraremos con un error similar al siguiente:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Executing external command: C:\Windows\system32\dism.exe /online /norestart /add-package /packagepath:C:\Windows\servicing\Packages\Microsoft-Windows-Media-Format-Package~31bf3856ad364e35~amd64~~6.1.7600.16385.mum /ignorecheck MM/DD/YYYY HH:MM:SS AM Installation result: -2146762496 MM/DD/YYYY HH:MM:SS AM Error: Prerequisite installation failed: Wmf2008R2&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;El caso es que WS2008R2 SP1 viene con una versión más nueva del paquete en cuestión y, si navegamos a la carpeta &lt;strong&gt;C:\Windows\servicing\Packages&lt;/strong&gt; veremos que el fichero que estamos buscando es, en realidad:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Microsoft-Windows-Media-Format-Package~31bf3856ad364e35~amd64~~6.1.7601.17514&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Al parecer, si instalas la característica Desktop experience, el problema desaparece. No obstante hay una solución más simple. Basta con ejecutar el comando que aparece en la traza cambiando el nombre del paquete a instalar:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;C:\Windows\servicing\Packages\Microsoft-Windows-Media-Format-Package~31bf3856ad364e35~amd64~~6.1.7601.17514.mum /ignorecheck&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Después de ejecutar el comando anterior será necesario reiniciar el servidor antes de continuar con el proceso de instalación.&lt;/p&gt;  &lt;p&gt;Por cierto, para vuestra tranquilidad, antes de ejecutar el comando anterior busqué información acerca de asunto para evitar problemas mayores. &lt;a href="http://support.microsoft.com/kb/2522454"&gt;Aquí&lt;/a&gt; tenéis la página que confirma la solución.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-6702817785552052405?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/6702817785552052405/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=6702817785552052405' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6702817785552052405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6702817785552052405'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/03/instalar-lync-server-2010-en-ws2008r2.html' title='Instalar Lync Server 2010 en WS2008R2 SP1'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-808186242777725544</id><published>2011-03-22T11:36:00.001+01:00</published><updated>2011-03-22T11:36:12.342+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lync Server'/><title type='text'>Instalación de Lync Server 2010</title><content type='html'>&lt;p&gt;Estas últimas horas las he dedicado a instalar &lt;strong&gt;Lync Server 2010&lt;/strong&gt; en un entorno virtual. Era mi primera experiencia en ese sentido, así que tomé la precaución de ir anotando todo lo que hacía de cara a tener material para publicar un artículo en mi blog. Lo que no tuve en cuenta es que, contando capturas de pantalla, el documento iba a ocupar ¡¡¡¡más de 50 páginas!!!! y, evidentemente, no puedo publicar esto porque dudo mucho que nadie siguiera un artículo de tamaña magnitud. Lo que sí voy a hacer es dejaros algún que otro consejo que os puede resultar de interés:&lt;/p&gt;  &lt;p&gt;Lo primero es la supuesta incompatibilidad entre Lync Server 2010 y &lt;strong&gt;SQL Server 2008 R2&lt;/strong&gt;. No sé si es un problema sorteable o no, pero reconozco que a mí me estaba dando problemas al instalarlo en una máquina que disponía de SQL Server 2008 R2, por lo que opté por empezar con una máquina limpia, sin SQL, para que Lync instalase la versión de SQL Server Express que necesitaba. Aquí hay que tener en cuenta, que para el tipo de instalación que yo requería no necesitaba unas capacidades demasiado elevadas, con lo que no era necesario disponer de más de un servidor para Lync Server con su correspondiente servidor de SQL.&lt;/p&gt;  &lt;p&gt;Otro asunto importante a tener en cuenta son los &lt;strong&gt;requerimientos&lt;/strong&gt;. Con una instalación limpia de Windows Server 2008 R2, lo único que necesité instalar fue: (lo siento por los nombres pero mi instalación es en inglés)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Característica .NET Framework 3.5.1 &lt;/li&gt;    &lt;li&gt;Dentro del rol IIS, los siguientes servicios de rol: Static Content, Default Document, HTTP Errors, ASP.NET, .NET Extensibility, Internet Server API (ISAPI) Extensions, ISAPI Filters, HTTP Logging, Logging Tools, Tracing, Client Certificate Mapping Authentication, Windows Authentication, Request Filtering, Static Content Compression, IIS Management Console, IIS Management Scripts and Tools. &lt;/li&gt;    &lt;li&gt;Característica Message Queuing con Directory Service integration &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Además, como la máquina donde estoy instalando Lync Server 2010 no es controladora de dominio, fue necesario instalar la característica Remote Server administration Tools for AD.&lt;/p&gt;  &lt;p&gt;A partir de aquí, páginas y páginas de asistente. También es necesario tener en cuenta aquí que yo estoy haciendo una instalación bastante básica, con lo que intenté utilizar todos los parámetros por defecto. Por favor, no utilicéis esta guía para un despliegue en producción de Lync Server 2010 (para eso ya está &lt;strong&gt;Technet&lt;/strong&gt;).&lt;/p&gt;  &lt;p&gt;La siguiente parada fue a la hora de asignar los certificados digitales. Llegados a ese punto sería necesario solicitar un certificado válido para nuestro dominio pero, para un entorno de pruebas, bastará con crearnos uno. Para ello podemos utilizar la utilidad &lt;strong&gt;MakeCert&lt;/strong&gt; que podréis encontrar en muchos sitios como, por ejemplo, la carpeta &lt;strong&gt;c:\Program Files\Microsoft Office Servers\14.0&lt;/strong&gt; de cualquier servidor de &lt;strong&gt;SharePoint 2010&lt;/strong&gt; que tengáis a mano. Podéis utilizar el siguiente comando.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;MakeCert.exe -r -pe -n &lt;span style="color: #006080"&gt;&amp;quot;CN=tu_dominio&amp;quot;&lt;/span&gt; -sky exchange -ss my&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Este certificado necesitáreis exportarlo desde &lt;strong&gt;Current user / Personal&lt;/strong&gt;&amp;#160; incluyendo la clave privada para poderlo importar desde el asistente de instalación de Lync Server 2010, y deberéis copiarlo además en &lt;strong&gt;Current user / Trusted Root Certification Authorities&lt;/strong&gt;&amp;#160; y en &lt;strong&gt;Local computer / Trusted Root Certification Authorities&lt;/strong&gt; (recuerdo otra vez que esto es únicamente en un entorno de pruebas)&lt;/p&gt;

&lt;p&gt;A partir de aquí, todo coser y cantar, porque no creo que hayáis utilizado el usuario administrador de dominio para instalar el producto. Repetid conmigo: &lt;strong&gt;no usaré el usuario administrador de dominio para nada que no sea administrar el dominio&lt;/strong&gt;. Bueno, en cualquier caso, si lo habéis hecho, algún consejito más:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Añadir, si no lo está ya, el usuario administrador al grupo &lt;strong&gt;CSAdministrator&lt;/strong&gt; de directorio activo. &lt;/li&gt;

  &lt;li&gt;Acceder al &lt;strong&gt;Active Directory Administrative Center&lt;/strong&gt; y buscar al usuario administrator &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_K1ZOnX85PHA/TYh7k3pc7-I/AAAAAAAAAnI/FIxSH87BaI8/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_K1ZOnX85PHA/TYh7lh1FicI/AAAAAAAAAnM/-zNZH5d-Ugw/image_thumb%5B4%5D.png?imgmax=800" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;En las propiedades del usuario, y dentro del grupo &lt;strong&gt;Extensions&lt;/strong&gt; pulsar el botón &lt;strong&gt;Advanced&lt;/strong&gt; y marcar la opción &lt;strong&gt;Include inheritable permissions from this object’’s parent&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TYh7mHwC6kI/AAAAAAAAAnQ/7jRC7Rbu20s/s1600-h/image%5B12%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TYh7m5T-qwI/AAAAAAAAAnU/4whpqxUuTlg/image_thumb%5B5%5D.png?imgmax=800" width="504" height="521" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Cerrar todos los diálogos pulsando aceptar. A partir de ese momento seréis capaces de acceder al panel de control de Lync Server 2010 para habilitar a los usuarios. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Espero que esto os sirva de ayuda si os veis en la necesidad de instalar Lync Server 2010 pero, repito de nuevo para que quede claro, no lo toméis como una guía para desplegar el producto en producción. Buscar guías oficiales de Microsoft en Technet que os darán detalles de cada uno de los puntos y os indicarán como adaptar el despliegue a vuestras necesidades reales. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-808186242777725544?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/808186242777725544/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=808186242777725544' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/808186242777725544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/808186242777725544'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/03/instalacion-de-lync-server-2010.html' title='Instalación de Lync Server 2010'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_K1ZOnX85PHA/TYh7lh1FicI/AAAAAAAAAnM/-zNZH5d-Ugw/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3110317562392784349</id><published>2011-03-21T12:51:00.001+01:00</published><updated>2011-03-21T12:51:29.340+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CompartiMOSS'/><title type='text'>Disponible el nº 7 de la revista CompartiMOSS</title><content type='html'>&lt;p&gt;Acaba de publicarse el número de Marzo de la revista CompartiMOSS, gestionada por los grandes Fabián Imaz y Gustavo Vélez, y en la que he tenido el privilegio de participar con un pequeño artículo junto con otros miembros destacados de la comunidad SharePoint hispano-hablante. Os dejo aquí el índice general de la revista junto con información sobre dónde descargarla.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Editorial &lt;/li&gt;    &lt;li&gt;El lado social de SharePoint (Alberto Díaz Martín) &lt;/li&gt;    &lt;li&gt;Autenticación en SharePoint 2010 (I) (David Martos) &lt;/li&gt;    &lt;li&gt;Entrevista con Fabian Imaz &lt;/li&gt;    &lt;li&gt;Business Intelligence en SharePoint 2010: Integración de Reporting Services (II)      &lt;br /&gt;(Juan Carlos González Martín) &lt;/li&gt;    &lt;li&gt;Los elementos web de Project Server 2010 (Juan Pablo Pussacq Laborde) &lt;/li&gt;    &lt;li&gt;Custom Actions en los menús de SharePoint 2010 (Victor Cea Espejo) &lt;/li&gt;    &lt;li&gt;Office 365 y SharePoint Online (Mario Cortés Flores) &lt;/li&gt;    &lt;li&gt;Personalización de UI con OPENXML y VS 2010 en Microsoft Office 2010 (Alejandro Garrido) &lt;/li&gt;    &lt;li&gt;Microsoft Dynamics CRM 2011 y SharePoint 2010. Mejor juntos... (Pablo Peralta) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Podréis encontrar más información &lt;a href="http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx"&gt;aquí&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3110317562392784349?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3110317562392784349/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3110317562392784349' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3110317562392784349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3110317562392784349'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/03/disponible-el-n-7-de-la-revista.html' title='Disponible el nº 7 de la revista CompartiMOSS'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5942167648293551664</id><published>2011-03-21T11:53:00.001+01:00</published><updated>2011-03-21T11:53:49.495+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010: The file ‘xxx’ is locked for shared use by ‘yyy’</title><content type='html'>&lt;p&gt;No sé si os habrá pasado en alguna ocasión que vais a editar un documento y SharePoint os dice que está desprotegido por otro usuario que, curiosamente, eres tú mismo. Si os ocurre esto al pulsar el botón de guardar al editar una página wiki, es posible que se deba a que tenéis activadas las características de publicación a nivel de colección de sitios pero que no tengáis activada dicha característica a nivel del sitio que hospeda la página wiki que estáis creando. Si estáis en esta situación, activad dicha característica y el problema desaparecerá.&lt;/p&gt;  &lt;p&gt;Al entrar en este tema destapamos un asunto sobre el que podríamos estar hablando horas referente a la mezcla de publicación y colaboración en SharePoint. Está claro que el producto nos ofrece buenas opciones en cada uno de los mundos, y más claro aún que en muchas ocasiones el mejor aprovechamiento del producto se obtendrá al usar características de los dos mundos. Estos proyectos se podrían dividir en dos grupos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Una intranet colaborativa con un aspecto de portal público &lt;/li&gt;    &lt;li&gt;Un portal público que permita a mis usuarios autenticados colaborar entre ellos &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cada vez que me enfrento a un proyecto y llego a este punto me saltan todas las alarmas referentes a asuntos bastante críticos que no se suelen tener en cuenta a no ser que sea un requerimiento explícito.&lt;/p&gt;  &lt;p&gt;En el primero de los casos, una solución consiste en crear sitios básicos de SharePoint y activar las características de publicación. En ese caso el problema puede venir por comportamientos extraños del producto como el que os comentaba al inicio de este artículo. Además, si haces esto es habitual crear nuevas páginas maestras y plantillas de página para dotar al sistema de una apariencia “pública”. Cuando llega ese caso hay que tener en cuenta el aumento de costes que ello conlleva, ya que al tiempo que se dedica a diseñar una nueva apariencia para SharePoint hay que sumar todo el tiempo que se dedicará a depurar las páginas internas del sistema.&lt;/p&gt;  &lt;p&gt;En el segundo caso, lo habitual es crear un sitio de publicación y activar las características de colaboración. En ese caso comienzan a aparecer puntos críticos que pueden verse afectados, como SEO o accesibilidad. También hay que tener en cuenta el coste que tendrá conseguir que la gestión de los contenidos de colaboración se adapte al aspecto de nuestro sitio web.&lt;/p&gt;  &lt;p&gt;En conclusión, ambas aproximaciones son factibles, pero se debe tener en cuenta que se está haciendo algo con el producto para lo que éste no ha sido diseñado y, por lo tanto, tendrá un coste de personalización asociado mucho más elevado que el que tendría una intranet básica o un portal de publicación de contenidos.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5942167648293551664?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5942167648293551664/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5942167648293551664' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5942167648293551664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5942167648293551664'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/03/sharepoint-2010-file-xxx-is-locked-for.html' title='SharePoint 2010: The file ‘xxx’ is locked for shared use by ‘yyy’'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3361695792565198639</id><published>2011-03-18T13:49:00.001+01:00</published><updated>2011-03-18T13:49:13.670+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='sug.cat'/><title type='text'>Disponible el material del I evento presencial de SUG.CAT</title><content type='html'>&lt;p&gt;Ayer tuvo lugar, en las oficinas de Microsoft de Barcelona, el primer evento presencial del Grupo de Usuarios de SharePoint de Catalunya. En el siguiente enlace podéis descargar el material que utilizamos en las dos sesiones:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://cid-7127a829d27ab782.office.live.com/browse.aspx/SUG.CAT/Client%20OM%20and%20BCS" href="http://cid-7127a829d27ab782.office.live.com/browse.aspx/SUG.CAT/Client%20OM%20and%20BCS"&gt;http://cid-7127a829d27ab782.office.live.com/browse.aspx/SUG.CAT/Client%20OM%20and%20BCS&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En mi humilde opinión, el evento resultó un éxito. Tuvimos la sala llena con alrededor de 30 personas (que de un total de 35 inscritos no está nada mal) y salvo por algunos problemas de conectividad al final de la primera sesión –la mía- todo fue más o menos sobre ruedas.&lt;/p&gt;  &lt;p&gt;Simplemente dar las gracias a Microsoft por cedernos una sala y todo el material necesario para las presentaciones, a Edin por su presentación y a vosotros por venir y aguantarnos. Espero que sea la primera de muchas sesiones presenciales e invitaros a proponer temas a tratar, ya sea por vosotros mismos o por cualquier otro miembro del grupo.&lt;/p&gt;  &lt;p&gt;Lamentablemente no puede ser todo bueno y olvidé darle al botón de &lt;strong&gt;grabar&lt;/strong&gt;, con lo que no podréis tener acceso el webcast . Asumo toda la responsabilidad porque no tengo excusa. Para la próxima, espero acordarme…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3361695792565198639?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3361695792565198639/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3361695792565198639' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3361695792565198639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3361695792565198639'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/03/disponible-el-material-del-i-evento.html' title='Disponible el material del I evento presencial de SUG.CAT'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-7144030393798069699</id><published>2011-02-24T13:33:00.001+01:00</published><updated>2011-02-24T13:33:14.727+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>I Evento presencial del Grupo de Usuarios de SharePoint de Catalunya</title><content type='html'>&lt;p&gt;Hola a todos. Tras casi un año de existencia, y contando ya con casi 100 miembros, ha llegado el momento de celebrar nuestra primera reunión persencial. Para ello, hemos pensado que lo mejor sería organizar dos sesiones de aproximadamente una hora de duración y en las cuales hablaremos de dos de los temas que más nos han preguntado directamente: &lt;strong&gt;BCS&lt;/strong&gt; y &lt;strong&gt;Modelo de objetos de cliente&lt;/strong&gt;. Para ello, además de con un servidor, contaremos con la inestimable presencia de &lt;a href="http://edinkapic.blogspot.com/"&gt;Edin Kapic&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;De todas formas, espero que ésta sea la primera reunión de muchas, así que cualquier tema que os interese tratar, no dudéis en comentarlo en el &lt;a href="http://www.linkedin.com/groups/SUGCAT-2883719?mostPopular=&amp;amp;gid=2883719"&gt;grupo de Linkedin&lt;/a&gt;, o directamente a nosotros, bien sea para hablar vosotros mismos en otra reunión, o para pedir a alguien que prepare algo de vuestro interés.&lt;/p&gt;  &lt;p&gt;El evento tendrá lugar el próximo Jueves, día 17 de Marzo, de 18:00 a 20:00 en las oficinas de Microsoft de Barcelona&lt;/p&gt;  &lt;p&gt;&lt;a title="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032478890&amp;amp;Culture=es-ES" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032478890&amp;amp;Culture=es-ES"&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032478890&amp;amp;Culture=es-ES&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;¡¡Os esperamos allí!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-7144030393798069699?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/7144030393798069699/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=7144030393798069699' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7144030393798069699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7144030393798069699'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/i-evento-presencial-del-grupo-de.html' title='I Evento presencial del Grupo de Usuarios de SharePoint de Catalunya'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1861115959435858480</id><published>2011-02-18T12:58:00.001+01:00</published><updated>2011-02-18T12:58:46.261+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Terminan los SharePoint Camps en Barcelona</title><content type='html'>&lt;p&gt;Esta semana se han llevado a cabo los SharePoint Camps en Barcelona. Unas jornadas en las que hubo dos días de formación en SharePoint 2010, a cargo de Juan Carlos González, y dos jornadas de trabajo intensivo en unas pruebas de concepto de desarrollos sobre dicha plataforma y en las que &lt;a href="http://www.spenta.es" target="_blank"&gt;Spenta&lt;/a&gt; ha estado presente puliendo algunos detalles de un nuevo producto llamado FacePoint.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TV5e7dnnE4I/AAAAAAAAAmw/ehqlY6bHzH4/s1600-h/camps_bcn%5B4%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="camps_bcn" border="0" alt="camps_bcn" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TV5e74sNgtI/AAAAAAAAAm0/nVf95Hk46TM/camps_bcn_thumb%5B1%5D.jpg?imgmax=800" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sobre FacePoint os podría decir muchas cosas, pero prefiero remitiros a &lt;a href="http://www.facepoint.net" target="_blank"&gt;la web del producto&lt;/a&gt; donde podréis ver un video explicativo y en la que os podéis apuntar para recibir información más detallada acerca de sus funcionalidades. Si quieres más información, puedes seguirnos en estos canales:&lt;/p&gt; &lt;font style="background-color: #ffffff"&gt;   &lt;p align="center"&gt;     &lt;table border="0" cellspacing="0" cellpadding="2" width="30"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="10"&gt;&lt;a href="http://twitter.com/facepointtweets"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="imagesCA1D8DM1" border="0" alt="imagesCA1D8DM1" src="http://lh4.ggpht.com/_K1ZOnX85PHA/TV5e8TrQbBI/AAAAAAAAAm4/o8c67Hq8xas/imagesCA1D8DM1%5B3%5D.jpg?imgmax=800" width="68" height="68" /&gt;&lt;/a&gt;&lt;/td&gt;            &lt;td valign="top" width="10"&gt;&lt;a href="http://www.linkedin.com/company/spenta-consulting/product?prdId=139840"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="imagesCAGZ6SA6" border="0" alt="imagesCAGZ6SA6" src="http://lh4.ggpht.com/_K1ZOnX85PHA/TV5e8rAbMBI/AAAAAAAAAm8/2A2cit0FvjE/imagesCAGZ6SA6%5B3%5D.jpg?imgmax=800" width="68" height="68" /&gt;&lt;/a&gt;&lt;/td&gt;            &lt;td valign="top" width="10"&gt;&lt;a href="http://www.youtube.com/user/SpentaTV"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="imagesCASQ362S" border="0" alt="imagesCASQ362S" src="http://lh4.ggpht.com/_K1ZOnX85PHA/TV5e9a5gwKI/AAAAAAAAAnA/v6b8tqqd7Rk/imagesCASQ362S%5B3%5D.jpg?imgmax=800" width="68" height="68" /&gt;&lt;/a&gt;&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/p&gt; &lt;/font&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1861115959435858480?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1861115959435858480/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1861115959435858480' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1861115959435858480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1861115959435858480'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/terminan-los-sharepoint-camps-en.html' title='Terminan los SharePoint Camps en Barcelona'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_K1ZOnX85PHA/TV5e74sNgtI/AAAAAAAAAm0/nVf95Hk46TM/s72-c/camps_bcn_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4132880683046949721</id><published>2011-02-17T10:41:00.001+01:00</published><updated>2011-02-17T10:41:39.744+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Webcast MSDN: SUGES- SharePoint 2010 no es solo intranets, monta tu sitio público</title><content type='html'>&lt;p&gt;El próximo jueves día 10 de marzo de 2011, de 7 a 9 de la tarde, El amigo &lt;a href="http://mariocortesflores.blogspot.com/" target="_blank"&gt;Mario Cortés&lt;/a&gt; de Renacimiento y un servidor tendrán el placer de presentar un webcast en el que hablaremos de SharePoint 2010 y de portales de publicación. En el webcast veremos las distintas problemáticas que plantea crear un sitio público, mediante las características de publicación veremos el ciclo de vida de los contenidos, las distintas formas de personalización, las capacidades de integración de identidades. Trataremos de&amp;#160; romper el tópico y la idea de que SharePoint 2010 no es un producto tan idóneo para la creación de sitios Internet, sino al contrario es una plataforma excelente para crear sitios de publicación adaptados a las necesidades de cualquier organización.&lt;/p&gt;  &lt;p&gt;La agenda del evento es la siguiente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SharePoint for Internet Site.&lt;/li&gt;    &lt;li&gt;Arquitectura y topología de un sitio público&lt;/li&gt;    &lt;li&gt;Características de publicación.&lt;/li&gt;    &lt;li&gt;Personalización de masterpages, layouts y css.&lt;/li&gt;    &lt;li&gt;Autenticación FBA en SharePoint 2010&lt;/li&gt;    &lt;li&gt;Autenticación con sistemas externos (Facebook, OpenID, etc.)&lt;/li&gt;    &lt;li&gt;Recomendaciones de seguridad&lt;/li&gt;    &lt;li&gt;Monitorización de uso del portal&lt;/li&gt;    &lt;li&gt;Multilenguaje, variaciones de sitio&lt;/li&gt;    &lt;li&gt;Automatización, despliegue y multitenancy&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Aquí os dejo la dirección de registro al evento:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032478934&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES" href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032478934&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032478934&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4132880683046949721?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4132880683046949721/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4132880683046949721' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4132880683046949721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4132880683046949721'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/webcast-msdn-suges-sharepoint-2010-no.html' title='Webcast MSDN: SUGES- SharePoint 2010 no es solo intranets, monta tu sitio público'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-8865822565180591773</id><published>2011-02-16T15:19:00.001+01:00</published><updated>2011-02-16T15:19:39.814+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Control de presencia en SharePoint 2010 con Lync 2010</title><content type='html'>&lt;p&gt;Si utilizáis Lync (o Office Communicator) habréis visto en ocasiones la típica bolita que aparece al lado del nombre de los usuarios y que indica el estado del usuario y que te permite interactuar con dicha persona ya sea por mensaje instantáneo, por email, por llamada telefónica o por cualquier otra via haciendo click en ella. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TVvc-WLmGtI/AAAAAAAAAmo/WQv6U6C9JxU/s1600-h/image%5B6%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TVvc-jKtg5I/AAAAAAAAAms/nexUZ32jxeQ/image_thumb%5B5%5D.png?imgmax=800" width="238" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Por defecto, SharePoint mostrará esta información en cualquier sitio donde muestre el nombre de cualquier usuario pero, ¿cómo hacemos para incluir esta información en nuestros elementos web personalizados? La respuesta es simple, incluyendo este código HTML allá donde lo necesitemos.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;border&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;12&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;padding-right: 3px;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;[IDENTIFICADOR_UNICO]&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;/_layouts/images/imnhdr.gif&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onload&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;IMNRC('[SIP_DEL_USUARIO]')&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ShowOfflinePawn&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;            &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hay, de todas maneras, alguna cosa importante a tener en cuenta:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;El parámetro id:&lt;/strong&gt; aseguráos de que es un identificador único en toda la página (regla general a la hora de escribir HTML, por otro lado)&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;El parámetro onload:&lt;/strong&gt; allá donde pone [SIP_DEL_USUARIO] deberéis poner, como su nombre indica, el código SIP del usuario de SharePoint. La manera de obtener este dato dependerá de si estáis atacando al modelo de objetos de cliente o de servidor, pero lo encontraréis siempre en la lista &lt;strong&gt;SiteUserInfoList&lt;/strong&gt;, si buscáis el campo &lt;strong&gt;SipAddress&lt;/strong&gt;.&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;El parámetro ShowOfflinePawn:&lt;/strong&gt; si lo ponéis a 1 os aparecerá la bolita gris cuando el usuario no esté conectado. Si lo ponéis a 0 simplemente no mostrará la bolita.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partir de aquí, lo dejo a vuestra imaginación…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-8865822565180591773?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/8865822565180591773/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=8865822565180591773' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8865822565180591773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8865822565180591773'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/control-de-presencia-en-sharepoint-2010.html' title='Control de presencia en SharePoint 2010 con Lync 2010'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_K1ZOnX85PHA/TVvc-jKtg5I/AAAAAAAAAms/nexUZ32jxeQ/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-8088567268742011906</id><published>2011-02-15T09:09:00.000+01:00</published><updated>2011-02-15T09:09:55.927+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 y ECMAScript</title><content type='html'>&lt;p&gt;Una de las novedades que incoporó la versión 2010 de SharePoint a nivel de desarrollo es el &lt;strong&gt;modelo de objetos de cliente&lt;/strong&gt;. Hasta ahora, si queríamos interactuar con elementos de nuestro servidor de manera remota la única opción que teníamos era acceder a los servicios web que éste proporcionaba. Ahora, además de esta opción tenemos otras cuatro alternativas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Modelo de objetos de cliente .NET &lt;/li&gt;    &lt;li&gt;Modelo de objetos de cliente Silverlight &lt;/li&gt;    &lt;li&gt;Modelo de objetos de cliente ECMAScript &lt;/li&gt;    &lt;li&gt;Servicios REST &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cada una de estas alternativas nos proporciona unas ventajas concretas en función de lo que necesitemos desarrollar. En este artículo os quiero hablar, con un ejemplo concreto, de una de estas cuatro alternativas: &lt;strong&gt;ECMAScript&lt;/strong&gt;. Antes de entrar en materia, algunas consideraciones. Lo que vais a ver a continuación es, mayormente, código javascript y, en algunas ocasiones, puede provocar reacciones contrarias a la hora de utilizarlo. Como todo, tiene sus ventajas y sus inconvenientes, pero el hecho que Microsoft haya incluído esta posibilidad en esta versión de SharePoint hace que, cuando menos, tenga que ser considerada como una de las opciones que tenemos a la hora de desarrollar. Si os planteáis utilizar este método para un desarrollo, pensad primero en las características de vuestro escenario y valorad si os conviene utilizarlo. Para mí, el uso de ECMAScript ofrece una serie de ventajas respecto al desarrollo convencional. La principal de esas ventajas es el despliegue de las funcionalidades. Lo único que necesitamos es escribir código HTML que podría incluso incluirse en un elemento web editor de contenidos. Si pensamos, sobretodo, en escenarios donde el despligue de elementos en el servidor es complejo esta posibilidad se hace especialmente interesante.&lt;/p&gt;  &lt;p&gt;Vayamos con el ejemplo: imaginad que queremos mostrar los elementos de una lista en una página de SharePoint y, a su vez, permitir que los usuarios añadan nuevos elementos a dicha lista y que no se produzcan refrescos innecesarios de la página. Para realizar este ejemplo necesitaremos crear un sitio con una lista que llamaremos &lt;strong&gt;Actividades&lt;/strong&gt;. Además, en alguna página del sitio como, por ejemplo, la página de inicio, incluiremos un elemento web consulta de contenido, editaremos su contenido y escribiremos, por ejemplo, el siguiente código HTML.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;new-activity-textbox&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;new-activity-button&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;enviar&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;activities&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Ahora tenemos que incluir la interactividad necesaria para que, cuando el usuario pulse el botón del ejemplo, se cree un nuevo elemento en la lista Actividades con el texto introducido por el usuario. Para hacer esto se os pueden ocurrir muchas maneras y, en este caso, yo he optado por utilizar JQuery (tened en cuenta que deberéis incluir la referencia al js de JQuery en vuestra página maestra o en vuestra página de aplicación). Editamos el código anterior e incluimos esto al inicio.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ecmascript&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/ecmascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     $(document).ready(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         $(&lt;span style="color: #006080"&gt;'input.new-activity-textbox'&lt;/span&gt;).click(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; text = $(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;).prev().value;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;             CreateElement(text);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         });&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     });&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; CreateElement(text) {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hasta aquí sólo hemos visto HTML y JQuery, nada de SharePoint. Evidentemente nos falta una parte del código que es aquella que tiene que permitir crear un elemento en una lista. Editamos el código anterior y, cambiamos la función CreateElement por lo siguiente:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; CreateElement(text) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     context = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SP.ClientContext.get_current();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     web = context.get_web();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; list = web.get_lists().getByTitle(&lt;span style="color: #006080"&gt;&amp;quot;Activity&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; itemCreateInfo = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SP.ListItemCreationInformation(); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     listItem = list.addItem(itemCreateInfo); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     listItem.set_item(&lt;span style="color: #006080"&gt;'Title'&lt;/span&gt;, text); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     listItem.update(); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     context.load(listItem); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     context.load(list); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     context.executeQueryAsync(CreateElementSuccess, QueryFailure); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Si estáis familiarizados con el desarrollo sobre SharePoint, veréis que hay bastantes similitudes entre el modelo de objetos de cliente y el modelo de objetos de servidor. Básicamente se obtiene el contexto, de ahí se extrae la referencia al sitio, se consulta una lista y, finalmente, se añade un nuevo elemento a dicha lista. Las diferencias vienen al final, ya que usando el modelo de objetos de cliente la llamada se hace de manera asíncrona. Para nuestra fortuna, podemos indicar qué método delegado será invocado en el momento en que la llamada devuelva algún resultado. En nuestro caso, llegado el momento tendríamos que volver a consultar los elementos de la lista y modificar el código HTML de la página sin hacer ningún refresco. Eso lo conseguimos con el siguiente código:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; CreateElementSuccess(sender, args) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; list = web.get_lists().getByTitle(&lt;span style="color: #006080"&gt;'Activity'&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; query = &lt;span style="color: #006080"&gt;'&amp;lt;View&amp;gt;'&lt;/span&gt;+&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;                     &lt;span style="color: #006080"&gt;'&amp;lt;Query&amp;gt;'&lt;/span&gt;+&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;                         &lt;span style="color: #006080"&gt;'&amp;lt;OrderBy&amp;gt;'&lt;/span&gt;+&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;                             &lt;span style="color: #006080"&gt;'&amp;lt;FieldRef Name=&amp;quot;Created&amp;quot; Ascending=&amp;quot;False&amp;quot;/&amp;gt;'&lt;/span&gt;+&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;                         &lt;span style="color: #006080"&gt;'&amp;lt;/OrderBy&amp;gt;'&lt;/span&gt;+&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;                     &lt;span style="color: #006080"&gt;'&amp;lt;/Query&amp;gt;'&lt;/span&gt;+&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;                  &lt;span style="color: #006080"&gt;'&amp;lt;/View&amp;gt;'&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;              &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; camlQuery = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SP.CamlQuery();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     camlQuery.set_viewXml(query);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;     activitiesCollection = list.getItems(camlQuery);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;     context.load(activitiesCollection , &lt;span style="color: #006080"&gt;'Include(Title)'&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;     context.executeQueryAsync(GetActivitiesSuccess, QueryFailure);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; GetActivitiesSuccess(sender, args) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; listItemEnumerator = activitiesCollection.getEnumerator();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;     $(&lt;span style="color: #006080"&gt;'ul.activities'&lt;/span&gt;).children().remove();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (listItemEnumerator.moveNext()) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; oListItem = listItemEnumerator.get_current();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;         $(&lt;span style="color: #006080"&gt;'ul.group-activity-container'&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;li&amp;gt;&amp;quot;&lt;/span&gt; + oListItem.get_item(&lt;span style="color: #006080"&gt;'Title'&lt;/span&gt;) + &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; FailureCallback(sender, args) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt;  32:&lt;/span&gt;     alert(&lt;span style="color: #006080"&gt;'request failed '&lt;/span&gt; + args.get_message() + &lt;span style="color: #006080"&gt;'\n'&lt;/span&gt; + args.get_stackTrace());  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt;  33:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;En resumen, esto ha sido sólo un ejemplo de qué tipo de cosas podemos hacer con ECMAScript. Si tenéis interés en que amplie algún punto concreto no dudéis en añadir un comentario a este artículo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-8088567268742011906?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/8088567268742011906/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=8088567268742011906' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8088567268742011906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8088567268742011906'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/sharepoint-2010-y-ecmascript.html' title='SharePoint 2010 y ECMAScript'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-508485307328892143</id><published>2011-02-13T00:36:00.001+01:00</published><updated>2011-02-14T11:14:57.551+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 de principio a fin</title><content type='html'>&lt;p&gt;Este fin de semana he tenido, por fin, el placer de disfrutar de un libro que tenía en mi lista de lecturas desde hacía ya algún tiempo. Se trata del libro de &lt;a href="http://geeks.ms/blogs/gvelez/"&gt;Gustavo Vélez&lt;/a&gt;, &lt;a href="http://geeks.ms/blogs/ciin/"&gt;Juan Carlos González&lt;/a&gt; y &lt;a href="http://mariocortesflores.blogspot.com/"&gt;Mario Cortés&lt;/a&gt;: &lt;a href="http://shop.campusmvp.com/Product-Sharepoint-2010-de-principio-a-fin_91.aspx"&gt;SharePoint 2010 de principio a fin&lt;/a&gt;. Mis espectativas con respecto a este libro eran más bien altas, debido a la calidad de sus autores, y os tengo que decir que no me ha defraudado en absoluto.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://shop.campusmvp.com/repository/product/Libro-Sharepoint-2010-2p.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;En mi trabajo en ocasiones tengo que dar cursos de SharePoint o resolver dudas puntuales y sé lo difícil que es dar información clara y concisa sobre esta tecnología sin quedarte demasiado en la superficie. En este libro, los autores son capaces de hacer un análisis exhaustivo de la mayoría de aspectos de la plataforma, con un lenguaje apto para todos los públicos, pero a la vez ofreciendo información de interés con suficiente nivel de detalle como para dejar satisfechos a los más exigentes.&lt;/p&gt;  &lt;p&gt;Los primeros capítulos del libro hablan sobre instalación y administración del sistema, así como sobre la jerarquía de elementos que necesitamos conocer para entender SharePoint. Los siguientes capítulos entran en detalle en el mundo del desarrollo, y de todas las opciones que nos ofrece la plataforma. Finalmente, los últimos capítulos analizan conceptos avanzados como inteligencia de negocios o aplicaciones compuestas.&lt;/p&gt;  &lt;p&gt;Si queréis iniciaros con SharePoint, o si queréis ampliar la información sobre cualquiera de sus partes, os recomiendo la lectura de este libro. Si trabajáis habitualmente con esta tecnología, en vuestra biblioteca no puede faltar un libro escrito por los que para mí, son algunos de sus mayores referentes en nuestra lengua.&lt;/p&gt;  &lt;p&gt;Podéis ver este libro y muchos otros &lt;a href="http://shop.campusmvp.com/" target="_blank"&gt;aquí&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-508485307328892143?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/508485307328892143/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=508485307328892143' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/508485307328892143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/508485307328892143'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/sharepoint-2010-de-principio-fin.html' title='SharePoint 2010 de principio a fin'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-3793193230440529338</id><published>2011-02-09T16:09:00.001+01:00</published><updated>2011-02-09T16:09:04.207+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Microsoft Partner Network (MPN)</title><content type='html'>&lt;p&gt;Como muchos de vosotros ya sabréis, el día 29 de Octubre &lt;b&gt;se lanzo Microsoft Partner Network (MPN). &lt;/b&gt;Después de más de un año en transición, los nuevos niveles y los nuevos requisitos por competencias se exigirán a partir de esa fecha para los partners nuevos y para aquellos que tengan que renovar a partir de la fecha de lanzamiento del nuevo Partner Network (hasta la fecha de renovación se mantendrá el nivel y beneficios que se ostentará en el MSPP). MPN sustituye al antiguo Micrososft Partner Program (MSPP) que se lanzó hace 8 años. &lt;/p&gt;  &lt;p&gt;Este cambio potencia la especialización y la diferenciación, y responde a la demanda, tanto de clientes, como de partners. El programa tiene los siguientes niveles: Gold, Silver, Subscription y Community, y 30 competencias (Virtualización, Business inteligence, Application Platform, ISVs…).&lt;/p&gt;  &lt;p&gt;Hay cambios en cuanto a los requisitos de las competencias tanto para el nivel Silver (antiguo Certified) como para el nivel Gold. Desde el punto de vista de los ISVs supone la incorporación de nuevas certificaciones de productos válidas para los dos niveles.&lt;/p&gt;  &lt;p&gt;Para conseguir la competencia&lt;b&gt; ISVs&lt;/b&gt; en el &lt;b&gt;nivel Silver&lt;/b&gt; se solicitará una aplicación certificada con uno de los siguientes test:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows 7 Platform Ready&lt;/li&gt;    &lt;li&gt;Windows Server 2008 R2 Platform Ready&lt;/li&gt;    &lt;li&gt;Windows Azure Platform Ready&lt;/li&gt;    &lt;li&gt;SQL Azure Platform Ready &lt;/li&gt;    &lt;li&gt;Microsoft Surface Test &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Los test que hasta ahora tuvierais hechos serán validos para la competencia hasta Mayo de 2011, pero es momento de ir alineándose con los nuevos requisitos. Ya puedes realizar los nuevos &lt;b&gt;Test a través de Microsoft Platform Ready&lt;/b&gt; de forma &lt;b&gt;rápida, sencilla y sin ningún coste&lt;/b&gt; para el partner.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoftplatformready.com/spain/home.aspx"&gt;http://www.microsoftplatformready.com/spain/home.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A parte de ISVs, hay otras competencias que permitirán la certificación de una aplicación para obtenerla en su nivel Silver.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Application Integration&amp;#160; =&amp;#160; Windows Server 2008 R2 Platform Ready&lt;/li&gt;    &lt;li&gt;Data Platform&amp;#160; =&amp;#160; SQL Server 2008 R2 Platform Ready&lt;/li&gt;    &lt;li&gt;Business Intelligent&amp;#160; =&amp;#160; SQL Server 2008 R2 Platform Ready&lt;/li&gt;    &lt;li&gt;Content Management&amp;#160;&amp;#160; =&amp;#160; Sharepoint Server 2010 Platform Ready (proximamente disponible)&lt;/li&gt;    &lt;li&gt;Unified Communication&amp;#160; =&amp;#160; Unified Communicatios Platform Ready ( aun no disponible)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Para aquellos que queráis optar a la competencia &lt;b&gt;Gold de ISVs&lt;/b&gt; los test que se solicitaran son:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Certified for Windows Server 2008 R2 o&lt;/li&gt;    &lt;li&gt;Windows 7 Logo Test&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;En fin, si queréis más información, no dudéis en acceder a la url indicada anteriormente pero, si sois partners de Microsoft y todavía no os habéis puesto al día en cuanto a competencias se refiere, es una buena oportunidad para hacerlo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-3793193230440529338?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/3793193230440529338/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=3793193230440529338' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3793193230440529338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/3793193230440529338'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/microsoft-partner-network-mpn.html' title='Microsoft Partner Network (MPN)'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-2135818464523232039</id><published>2011-02-05T13:08:00.001+01:00</published><updated>2011-02-05T13:08:29.198+01:00</updated><title type='text'>StreetScene liberado en Codeplex</title><content type='html'>&lt;p&gt;Hace ya unos meses &lt;a href="http://david-martos.blogspot.com/2010/11/spenta-streetcare-ve-la-luz.html"&gt;os avanzaba&lt;/a&gt; la aparición de &lt;a href="http://www.streetcare.com/"&gt;StreetCare&lt;/a&gt;, un sistema ideado, entre otras cosas, para permitir a los ayuntamientos ofrecer a sus ciudadanos los mecanismos necesarios para identificar problemas en sus calles. En su momento os expliqué algunas de sus características y las tecnologías que se utilizaron para llevar el proyecto a cabo, dejando los detalles para más adelante.&lt;/p&gt;  &lt;p&gt;Ahora ha llegado el momento de comenzar a dar detalles técnicos de la implementación de StreetCare y, para ello, qué mejor que empezar ofreciendo el código fuente y la documentación de gran parte de la solución. Para ello, basta con que vayáis &lt;a href="http://streetscene.codeplex.com"&gt;aquí&lt;/a&gt; y lo descarguéis vosotros mismos.&lt;/p&gt;  &lt;p&gt;StreetScene es una versión reducida de StretCare que mantiene la misma esencia y tiene que servir para ayudar a todo aquél que quiera desarrollar algun proyecto basado en alguna de las tecnologías que aquí se utilizan, a hacerlo de una manera más simple y ágil.&lt;/p&gt;  &lt;p&gt;Los elementos que podéis encontrar en StreetScene son:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Aplicación web con arquitectura ASP.NET MVC2 para la administración de los datos &lt;/li&gt;    &lt;li&gt;Aplicación Silverlight 4 con arquitectura MVVM para la interfaz de usuario de los ciudadanos &lt;/li&gt;    &lt;li&gt;Web Role de Azure para alojar la aplicación web. &lt;/li&gt;    &lt;li&gt;SQL Azure para alojar los datos &lt;/li&gt;    &lt;li&gt;Azure AppFabric Access Control V2 para proveer de mecanismos de autenticación &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;En breve comenzaré a publicar artículos con información de cada uno de los puntos anteriores pero, aquellos que estéis interesados en detalles sobre alguno de ellos, no dudéis en acudir al sitio web de Codeplex y descargar el código y la documentación.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-2135818464523232039?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/2135818464523232039/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=2135818464523232039' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2135818464523232039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2135818464523232039'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/streetscene-liberado-en-codeplex.html' title='StreetScene liberado en Codeplex'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-9166739307266834863</id><published>2011-02-05T00:04:00.001+01:00</published><updated>2011-02-05T00:04:28.381+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Mesa redonda en Madrid sobre desarrollo en SharePoint</title><content type='html'>&lt;p&gt;El pasado Miércoles, 2 de Febrero, y tal y como os avancé en &lt;a href="http://david-martos.blogspot.com/2011/01/desarrollo-en-sharepoint-para.html"&gt;este&lt;/a&gt; artículo, participé junto con otros MVPs de SharePoint en una mesa redonda organizada por nuestros amigos del MADNUG. En la figura, y de izquierda a derecha, podéis verme a mí, a Juan Carlos González, a Alberto Díaz y al maestro Gustavo Vélez.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_K1ZOnX85PHA/TUyF7Lz5a-I/AAAAAAAAAmg/Z6SvjWImN1k/s1600-h/madnug%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="madnug" border="0" alt="madnug" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TUyF-gbKzkI/AAAAAAAAAmk/2u6dTBJKXM0/madnug_thumb%5B3%5D.png?imgmax=800" width="604" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Más allá de encontrarme con estos fantásticos compañeros y con otros miembros destacados de la comunidad técnica, que era para mí uno de los objetivos principales del evento, el debate fue de lo más interesante y se habló de aquellos aspectos que, en general, más preocupan a las personas que trabajamos con SharePoint de una o de otra manera.&lt;/p&gt;  &lt;p&gt;Destacaron temas generales como el testeo, el despliegue de soluciones, la personalización gráfica o la conexión a sistemas externos y otros más particulares como la transaccionalidad de la plataforma. También hubo alguna consulta sobre arquitectura y sobre posibles patrones recomendables para utilizar cuando se desarrolla sobre SharePoint.&lt;/p&gt;  &lt;p&gt;Si queréis ver la grabación del evento, la encontraréis &lt;a href="https://msevents.microsoft.com/CUI/Register.aspx?culture=es-ES&amp;amp;EventID=1032475227&amp;amp;CountryCode=ES&amp;amp;IsRedirect=false"&gt;aquí&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-9166739307266834863?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/9166739307266834863/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=9166739307266834863' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/9166739307266834863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/9166739307266834863'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/02/mesa-redonda-en-madrid-sobre-desarrollo.html' title='Mesa redonda en Madrid sobre desarrollo en SharePoint'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_K1ZOnX85PHA/TUyF-gbKzkI/AAAAAAAAAmk/2u6dTBJKXM0/s72-c/madnug_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5905849790940070536</id><published>2011-01-26T09:35:00.001+01:00</published><updated>2011-01-26T09:35:30.740+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='moss'/><title type='text'>SPContext, using, RunWithElevatedPrivileges y demás…</title><content type='html'>&lt;p&gt;Lo que os voy a explicar hoy no es nada nuevo. Mucho se ha escrito al respecto e incluso yo, seguramente, he escrito algún artículo sobre ello, pero el que se hable mucho de una cosa no implica que no sea importante o que no se tenga que ir recordando. El caso es que ayer, a partir de una consulta en un foro, recordé el que es, bajo mi punto de vista, el error que más comunmente cometemos los que desarrollamos sobre SharePoint, y pensé que sería un buen ejercicio escribir este artículo para ver si para todos aquellos que empiezan en esta tecnología (y todos aquellos que llevamos años pero que sistemáticamente cometemos una y otra vez el mismo error…) podría resultar de utilidad.&lt;/p&gt;  &lt;p&gt;Comenzaremos por una cosa muy simple: &lt;strong&gt;estoy desarrollando un elemento web que tiene que acceder a información que se encuentra alojada en el sitio web donde reside dicho webpart&lt;/strong&gt;. Lo primero que se plantea uno, es algo como lo del siguiente listado.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;SPSite site = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SPSite(url);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;SPWeb web = site.OpenWeb();&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;La variable &lt;strong&gt;url &lt;/strong&gt;la habremos inicializado previamente con alguna información del contexto y lo único que tenemos que hacer es instanciar un objeto &lt;strong&gt;SPSite&lt;/strong&gt; y un objeto &lt;strong&gt;SPWeb&lt;/strong&gt;. Esto no es del todo incorrecto siempre que cuando acabemos de utilizar dichos objetos los eliminemos. Al final, lo que acabaríamos haciendo para trabajar de una manera apropiada sería algo similar a lo siguiente.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPSite site = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SPSite(url))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Si conocéis el objeto &lt;strong&gt;SPContext&lt;/strong&gt; o si lo habéis visto en el código de alguien, os puede pasar por la cabeza la idea de utilizarlo para hacer el código de arriba más ‘correcto’ y cambiarlo por:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPSite site = SPContext.Current.Site)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Y ahí es donde lo romperíamos todo. Si os fijáis, ahora no estamos creando ninguna instancia de &lt;strong&gt;SPSite&lt;/strong&gt;, sino que estamos haciendo una referencia al objeto de nuestro contexto, de manera que en cuanto salgamos del &lt;strong&gt;using&lt;/strong&gt; y se ejecute el &lt;strong&gt;dispose&lt;/strong&gt; estaremos eliminando un objeto que no deberíamos eliminar nunca. ¿Cómo arreglamos el código de arriba?&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPSite site = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SPSite(SPContext.Current.Site.ID))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;¡Atención! fijáos que uso &lt;strong&gt;SPContext.Current.Site.ID&lt;/strong&gt; y no &lt;strong&gt;SPContext.Current.Site.Url&lt;/strong&gt; como parámetro de la constructora. Aparentemente el resultado es el mismo, pero cuando trabajamos en sitios extendidos la cosa varía un poquito. De todas maneras, si lo que tenéis que hacer es lo de arriba, podéis simplificarlo mucho y dejarlo tal que así:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;SPWeb web = SPContext.Current.Web;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Pero aquí es cuando entra en juego nuestro amigo &lt;strong&gt;RunWithElevatedPrivileges&lt;/strong&gt;. ¿Qué pasa cuando desde ese código necesitamos acceder a información con permisos elevados? Nada, que rodeamos el código de esta manera:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;SPSecurity.RunWithElevatedPrivileges(&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    SPWeb web = SPContext.Current.Web;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;});&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Aquí lo volveríamos a romper todo, ya que el objeto &lt;strong&gt;SPContext&lt;/strong&gt; es, como su nombre indica, una referencia al &lt;strong&gt;contexto&lt;/strong&gt; de SharePoint, que está asociado al usuario autenticado independientemente de que el código se ejecute de manera elevada. La recomendación siempre es hacer uso del &lt;strong&gt;RunWithElevatedPrivileges &lt;/strong&gt;sólo cuando sea estrictamente necesario y en el mínimo ámbito posible y, por lo tanto, todo nos empujaría a hacerlo de la siguiente manera.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPSite site = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SPSite(SPContext.Current.Site.ID))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        SPSecurity.RunWithElevatedPrivileges(&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        });&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Aquí estaríamos cometiendo el mismo error. En el momento en que hemos creado la instancia del objeto &lt;strong&gt;SPSite&lt;/strong&gt; estábamos trabajando en un contexto no elevado y, por lo tanto, así seguiremos siempre que hagamos referencia a éste. Si queremos tratar información de ese objeto &lt;strong&gt;SPWeb&lt;/strong&gt; que viene de la instancia del objeto &lt;strong&gt;SPSite&lt;/strong&gt; creada al inicio del código lo tenemos que hacer de la siguiente manera:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;SPSecurity.RunWithElevatedPrivileges(&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPSite site = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SPSite(SPContext.Current.Site.ID))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;});&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;











&lt;p&gt;Para finalizar, deciros que esto es sólo un ejemplo para un caso concreto. En general, trabajar con SharePoint, con su contexto y con la creación de objetos es algo que se tiene que hacer siguiendo ciertas normas. Os dejo un enlace que os puede resultar de interés: &lt;a title="http://code.msdn.microsoft.com/SPDisposeCheck" href="http://code.msdn.microsoft.com/SPDisposeCheck"&gt;http://code.msdn.microsoft.com/SPDisposeCheck&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esta utilidad podréis comprobar si estáis siguiendo correctamente las normas o no.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5905849790940070536?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5905849790940070536/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5905849790940070536' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5905849790940070536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5905849790940070536'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/01/spcontext-using-runwithelevatedprivileg.html' title='SPContext, using, RunWithElevatedPrivileges y demás…'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5034253216658515318</id><published>2011-01-17T19:38:00.001+01:00</published><updated>2011-01-17T19:38:58.418+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRM2011'/><title type='text'>CRM 2011 Online ya disponible</title><content type='html'>&lt;p&gt;Me vuelvo a meter en &lt;a href="http://crmadiario.blogspot.com/"&gt;territorio enemigo&lt;/a&gt; para hablaros un poquito de CRM. Y es que hoy, y antes de que la versión &lt;em&gt;Server&lt;/em&gt; aparezca, Microsoft ha lanzado la versión para la nube de CRM 2011. Esto deja clara la apuesta de la compañía por todo lo que a &lt;em&gt;Cloud computing&lt;/em&gt; se refiere. En cualquier caso, y para aquellos que ya hemos tenido el placer de trastear un poco con el producto, es una gran noticia el que ya podamos disfrutar de la versión final para dejar de trastear y empezar a trabajar.&lt;/p&gt;  &lt;p&gt;Os dejo más información aquí:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/Presspass/Features/2011/jan11/01-17CRMOnline.mspx" href="http://www.microsoft.com/Presspass/Features/2011/jan11/01-17CRMOnline.mspx"&gt;http://www.microsoft.com/Presspass/Features/2011/jan11/01-17CRMOnline.mspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5034253216658515318?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5034253216658515318/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5034253216658515318' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5034253216658515318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5034253216658515318'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/01/crm-2011-online-ya-disponible.html' title='CRM 2011 Online ya disponible'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-5381588984308433790</id><published>2011-01-17T13:22:00.001+01:00</published><updated>2011-01-17T13:22:51.051+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Desarrollo en sharepoint para desarrolladores mortales de .NET</title><content type='html'>&lt;p&gt;El próximo miércoles 2 de Febrero participaré, junto con Gustavo Vélez, Juan Carlos González y Alberto Díaz, en un evento organizado por el grupo MadNUG, y que girará en torno a desarrollo sobre SharePoint. Aquí os dejo el enlace a la página de MadNUG donde se hace referencia a dicho evento.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://madriddotnet.wordpress.com/2011/01/17/evento-desarrollo-en-sharepoint-para-desarrolladores-mortales-de-net/"&gt;http://madriddotnet.wordpress.com/2011/01/17/evento-desarrollo-en-sharepoint-para-desarrolladores-mortales-de-net/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Encontraréis ahí enlaces a la página de registro y a la zona online donde podréis ver el evento por Live Meeting.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-5381588984308433790?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/5381588984308433790/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=5381588984308433790' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5381588984308433790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/5381588984308433790'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/01/desarrollo-en-sharepoint-para.html' title='Desarrollo en sharepoint para desarrolladores mortales de .NET'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-8605514172405299153</id><published>2011-01-17T11:13:00.001+01:00</published><updated>2011-01-17T11:13:35.799+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='iis'/><title type='text'>CryptographicException: The data protection operation was unsuccessful</title><content type='html'>&lt;p&gt;El haber estado los últimos años dedicándome mayormente a SharePoint ha hecho que me olvidase casi por completo de mi amigo IIS. El problema cuando pasa esto es que después vuelves a trabajar en una aplicación ASP.NET y en ocasiones ves muertos.&lt;/p&gt;  &lt;p&gt;En el caso que me ocupa, una serie de razones que ahora no tienen relevancia me llevaron a una serie de decisiones que tienen menos relevancia aún, pero que desembocaron en cambiar el servidor web incorporado en Visual Studio 2010 por mi flamante IIS nuevo de trinca. Todo parecía ir bien hasta qué:&lt;/p&gt;  &lt;h4&gt;&lt;i&gt;The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context, which may be the case when the thread is impersonating.&lt;/i&gt;&lt;/h4&gt;  &lt;p&gt;La primera reacción fue correr por la oficina como pollos sin cabeza. De funcionar todo perfectamente excepto un temita que ocasionó la serie de decisiones anteriormente citada pasamos a no poder autenticarnos en el sitio. Afrutanadamente la solución era más simple de lo que parecía y se reducía a lo siguiente:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Abrir Internet Information Services&lt;/li&gt;    &lt;li&gt;Acceder, en la lista de &lt;em&gt;application pools&lt;/em&gt;, a los &lt;em&gt;advanced settings&lt;/em&gt; del pool de aplicaciones asignado a mi sitio web.&lt;/li&gt;    &lt;li&gt;Establecer a &lt;strong&gt;True&lt;/strong&gt; el valor de la propiedad &lt;strong&gt;Load User Profile&lt;/strong&gt; en la sección &lt;strong&gt;Process Model&lt;/strong&gt;, tal y como muestra la figura:&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TTQWS3QbJNI/AAAAAAAAAl0/5Zaq1FVU0x8/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TTQWTdmxIQI/AAAAAAAAAl4/TQq_Kx501ng/image_thumb%5B2%5D.png?imgmax=800" width="293" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Continuar con lo que estábamos haciendo hasta entonces :)&lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-8605514172405299153?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/8605514172405299153/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=8605514172405299153' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8605514172405299153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8605514172405299153'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/01/cryptographicexception-data-protection.html' title='CryptographicException: The data protection operation was unsuccessful'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_K1ZOnX85PHA/TTQWTdmxIQI/AAAAAAAAAl4/TQq_Kx501ng/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1372987870811924814</id><published>2011-01-05T08:44:00.001+01:00</published><updated>2011-01-05T08:44:42.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='moss'/><title type='text'>Cumulative updates de Diciembre 2010 para SharePoint disponibles</title><content type='html'>&lt;p&gt;Me hago eco de la información publicada por el amigo Juan Pablo referente a la disponibilidad de las actualizaciones mencionadas en el título del post y, para no ser repetitivo, os dejo simplemente el enlace para que veáis lo que contienen dichas actualizaciones así como los enlaces de descarga.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://surpoint.blogspot.com/2011/01/cu-diciembre-2010-listos-para-moss-2007.html" href="http://surpoint.blogspot.com/2011/01/cu-diciembre-2010-listos-para-moss-2007.html"&gt;http://surpoint.blogspot.com/2011/01/cu-diciembre-2010-listos-para-moss-2007.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1372987870811924814?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1372987870811924814/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1372987870811924814' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1372987870811924814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1372987870811924814'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2011/01/cumulative-updates-de-diciembre-2010.html' title='Cumulative updates de Diciembre 2010 para SharePoint disponibles'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-2745444100811346179</id><published>2010-12-23T09:08:00.001+01:00</published><updated>2010-12-23T09:12:13.195+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='azure'/><title type='text'>Configuraciones de compilación en Azure</title><content type='html'>&lt;p&gt;Hoy no os aburro con un artículo sino con una información de utilidad que os puede ahorrar un tiempo valioso en ciertas condiciones. El asunto en cuestión puede provocar una excepción como la siguiente a la hora de compilar un proyecto &lt;strong&gt;Silverlight&lt;/strong&gt; alojado en una aplicación web para ser publicada en &lt;strong&gt;Azure&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;The &amp;quot;CreateRiaClientFilesTask&amp;quot; task failed unexpectedly.     &lt;br /&gt;System.Web.HttpException (0x80004005): Could not load file or assembly 'msshrtmi' or one of its dependencies&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;La verdad es que, si llegáis a este error, poco os puedo ayudar salvo redirigiros a algún sitio como &lt;a href="http://dotnet-redzone.blogspot.com/2010/12/hosting-silverlight-application-with.html" target="_blank"&gt;éste&lt;/a&gt; dónde se explica una posible solución. Lamentablemente, a mí no me ayudó y lo único que me salvó fue volver a un &lt;em&gt;snapshot&lt;/em&gt; de la máquina virtual donde estaba desarrollando. Lo que sí os puedo decir (porque he sido capaz de reproducirlo) es lo que hizo que ese error apareciese.&lt;/p&gt;  &lt;p&gt;El origen de la causa hay que buscarlo en que mi solución de Visual Studio contenía numerosos proyectos, de los cuales sólo quería que se compilasen algunos cada vez que recompilaba la solución. Para ello, como en otras muchas ocasiones, accedía al &lt;em&gt;Configuration Manager&lt;/em&gt; de &lt;strong&gt;Visual Studio&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_K1ZOnX85PHA/TRMDX4WpLWI/AAAAAAAAAlY/oZz78Fxtp_Q/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TRMDYbLAzpI/AAAAAAAAAlc/_9oe2Ti4YEw/image_thumb%5B4%5D.png?imgmax=800" width="244" height="130" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez dentro creaba una nueva configuración asignándole un nombre para después seleccionar los proyectos que quería que contuviera dicha configuración.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TRMDYwQMBOI/AAAAAAAAAlg/yoMZGfbFoHY/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TRMDZQjBTnI/AAAAAAAAAlk/ncuhFvJoZZE/image_thumb%5B6%5D.png?imgmax=800" width="361" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El caso es que, por defecto, tenía marcada la opción &lt;strong&gt;“Create new project configurations”&lt;/strong&gt;. Pues buen, nunca había tenido problemas con esto hasta ahora, y os explicaré lo que he visto hasta el momento.&lt;/p&gt;  &lt;p&gt;Si no marcas esta opción, lo único que modificas es la solución, añadiendo una nueva configuración de proyectos a ser compilados. Por el contrario, si la marcas, editarás todos los proyectos para añadir la nueva configuración, y el resultado de la compilación se guardará en una nueva carpeta bajo la carpeta bin de tus proyectos.&lt;/p&gt;  &lt;p&gt;El caso es que, en el caso que me ocupa actualmente: &lt;strong&gt;Silverlight&lt;/strong&gt; alojado en una aplicación &lt;strong&gt;ASP.NET MVC2&lt;/strong&gt; incluida en un &lt;strong&gt;Web Role&lt;/strong&gt; de &lt;strong&gt;Azure&lt;/strong&gt;, marcar esta opción imposibilita que vuelvas a compilar, dándote el error del inicio de este post. Descartar los cambios realizados en la solución no solucionó el problema, así que si lo queréis probar, aseguraros de tener un &lt;em&gt;snapshot&lt;/em&gt; de vuestra máquina virtual.&lt;/p&gt;  &lt;p&gt;Por cierto, si alguien tiene alguna información al respecto, comentad el post, por favor, por si alguien llega aquí con el problema entre manos…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-2745444100811346179?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/2745444100811346179/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=2745444100811346179' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2745444100811346179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2745444100811346179'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/12/configuraciones-de-compilacion-en-azure.html' title='Configuraciones de compilación en Azure'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_K1ZOnX85PHA/TRMDYbLAzpI/AAAAAAAAAlc/_9oe2Ti4YEw/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4189559152691961042</id><published>2010-12-17T14:23:00.001+01:00</published><updated>2010-12-17T14:23:33.337+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='azure'/><category scheme='http://www.blogger.com/atom/ns#' term='CRM2011'/><category scheme='http://www.blogger.com/atom/ns#' term='SandBox'/><title type='text'>Consumir servicios externos desde código SandBoxed (y II)</title><content type='html'>&lt;p&gt;Hace unos días, en &lt;a href="http://david-martos.blogspot.com/2010/12/consumir-servicios-externos-desde.html" target="_blank"&gt;este artículo&lt;/a&gt; empecé a hablaros de la posibilidad de realizar una llamada a un servicio externo publicado en Azure desde &lt;strong&gt;CRM 2011 Online&lt;/strong&gt;, pero dejé de lado la parte relativa a CRM, quedándome básicamente en una introducción a la tecnología que iba a utilizar. Tal y como os prometí, aquí viene la segunda parte del asunto o, lo que es lo mismo, todo lo concerniente a CRM.&lt;/p&gt;  &lt;p&gt;Lo primero que váis a tener que hacer es descargar la SDK de CRM 2011 que podéis encontrar &lt;a href="http://www.google.es/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCEQFjAA&amp;amp;url=http%3A%2F%2Fgo.microsoft.com%2Ffwlink%2F%3FLinkID%3D200082&amp;amp;ei=MFgLTceNF8uG4gap6eDjDA&amp;amp;usg=AFQjCNEq2S9yxWwu9y9NHyyV-1stc7ss1g" target="_blank"&gt;aquí&lt;/a&gt;. Ahí encontraréis algunos ensamblados y algunas utilidades que necesitáis para realizar con éxito el proceso que se explica en este artículo. Tal y como avancé en la primera parte, necesitamos hacer un &lt;strong&gt;plugin&lt;/strong&gt; que se lance según las condiciones que nos convengan y, antes de entrar en estas condiciones, vamos a desarrollar la pieza que necesitamos. Para ello, creamos una librería de clases y añadimos una referencia al ensamblado &lt;strong&gt;Microsoft.Crm.Sdk.Proxy&lt;/strong&gt; que encontraremos en la carpeta &lt;strong&gt;\sdk\bin&lt;/strong&gt; del SDK descargado previamente. Tal y como apareció en el artículo anterior, también necesitaré referencias a los ensamblados &lt;strong&gt;Microsoft.Http&lt;/strong&gt; y &lt;strong&gt;Microsoft.Http.Extensions&lt;/strong&gt;. A continuación creamos una clase y escribimos el siguiente código y generamos el ensamblado:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Crm2011Plugins&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Http;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Xrm.Sdk;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ExternalCallPlugin : IPlugin&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Execute(IServiceProvider serviceProvider)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; uri = &lt;span style="color: #006080"&gt;&amp;quot;http://myapp.cloudapp.net/Service1.svc/&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (HttpResponseMessage response = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; HttpClient().Get(uri))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #008000"&gt;// TODO: tratar la respuesta aquí&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Como véis, tenemos que implementar la interfaz &lt;strong&gt;IPlugin&lt;/strong&gt; y su método &lt;strong&gt;Execute&lt;/strong&gt;. Es ahí dónde haremos la llamada a nuestro servicio externo pero, ¿cómo hago ahora para que &lt;strong&gt;CRM 2011 Online&lt;/strong&gt; ejecute ese método cuando a mí me convenga? Bien, vamos a pensar, por ejemplo, que queremos que se ejecute siempre que alguien modifique el estado de un caso.&lt;/p&gt;

&lt;p&gt;Lo primero que tenemos que hacer es buscar en la carpeta &lt;strong&gt;\sdk\tools\pluginregistration&lt;/strong&gt; de la SDK una solución de Visual Studio que tendremos que abrir y compilar para generar la herramienta necesaria para registrar &lt;em&gt;plugins&lt;/em&gt; de CRM. Una vez generado tendremos un ejecutable llamado PluginRegistration en la carpeta &lt;strong&gt;\sdk\tools\pluginregistration\bin\Debug&lt;/strong&gt; que deberemos ejecutar. Si proporcionamos a la herramienta los datos de conexión de nuestra instancia de CRM 2011 Online:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Nombre para la conexión: cualquiera que os ayude a identificar esa conexión entre otras.&lt;/li&gt;

  &lt;li&gt;Discovery URL: aquella que os corresponda según &lt;a href="http://bingsoft.wordpress.com/2010/10/21/crm-2011-beta-discovery-and-web-service-urls/" target="_blank"&gt;este artículo&lt;/a&gt;.&lt;/li&gt;

  &lt;li&gt;Username: un nombre de usuario con permiso en la instancia de CRM 2011.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez conectados veremos una pantalla similar a la siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TQtkN5GqJoI/AAAAAAAAAkw/1rpb7shH2oQ/s1600-h/image%5B6%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TQtkP4BncGI/AAAAAAAAAk0/oSv3Wl-Air8/image_thumb%5B2%5D.png?imgmax=800" width="504" height="246" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación, del desplegable &lt;strong&gt;Register &lt;/strong&gt;seleccionamos la opción &lt;strong&gt;Register New Assembly&lt;/strong&gt; tal y como muestra la figura.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_K1ZOnX85PHA/TQtkQU1Xv_I/AAAAAAAAAk4/opB9FXfCSh0/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TQtkQ5xOYKI/AAAAAAAAAk8/i68zMn4jUA8/image_thumb%5B8%5D.png?imgmax=800" width="504" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos aparecerá un formulario como el siguiente, en el cual deberemos especificar la ruta del ensamblado que hemos generado previamente y, como estamos desplegando para CRM 2011 Online seleccionamos las opciones &lt;strong&gt;SandBox &lt;/strong&gt;y &lt;strong&gt;Database&lt;/strong&gt;. Dejadme poner aquí un disclaimer: no me considero un experto en CRM 2011 –y ni siquiera me considero un desarrollador avanzado- así que estas selecciones pueden ser o no la mejor opción.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TQtkReDAGRI/AAAAAAAAAlA/u5qscZsL6nA/s1600-h/image%5B16%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TQtkSIamtcI/AAAAAAAAAlE/FO8GVOqPbyE/image_thumb%5B14%5D.png?imgmax=800" width="504" height="466" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez aceptado el formulario aparecerá un nuevo ensamblado en la lista. Lo seleccionamos con el botón derecho y seleccionamos la opción &lt;strong&gt;Register new Step &lt;/strong&gt;tal y como muestra la figura.&lt;/p&gt;







&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_K1ZOnX85PHA/TQtkSwS_v9I/AAAAAAAAAlI/C6FE8ynGJu0/s1600-h/image%5B21%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TQtkTYxuQPI/AAAAAAAAAlM/VHu9PGJ73Mc/image_thumb%5B20%5D.png?imgmax=800" width="504" height="175" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez hecho esto aparecerá una pantalla como la de la imagen y deberás rellenar los datos que te pide según tus necesidades.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_K1ZOnX85PHA/TQtkULfm_jI/AAAAAAAAAlQ/_KTZZszbUDk/s1600-h/image%5B25%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TQtkU0uEUzI/AAAAAAAAAlU/HVOCLL2h8XI/image_thumb%5B22%5D.png?imgmax=800" width="504" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;





&lt;p&gt;En este caso, las decisiones que hemos tomado han sido las siguientes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Message:&lt;/strong&gt; esto es la acción que originará el lanzamiento del método &lt;strong&gt;Execute&lt;/strong&gt;. Seleccionamos &lt;strong&gt;Update&lt;/strong&gt;.&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Primary Entity:&lt;/strong&gt; nombre de la entidad sobre la cual queremos monitorizar cambios. Seleccionamos &lt;strong&gt;incident&lt;/strong&gt; que es el nombre interno para la entidad &lt;strong&gt;Caso&lt;/strong&gt;.&lt;/li&gt;

  &lt;li&gt;Filtering Attributes: campos sobre los cuales, si se produce un cambio, se lanzará el método &lt;strong&gt;Execute&lt;/strong&gt;. Seleccionamos &lt;strong&gt;status code&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Además de esto, podemos elegir si el método se llamará de manera síncrona o asíncrona y si se ejecutará antes de validar el formulario del caso, antes de ejecutar la actualización o después de ejecutar la actualización. En nuestro caso seleccionamos &lt;strong&gt;Post-operation&lt;/strong&gt; y &lt;strong&gt;Synchronous&lt;/strong&gt;. Finalmente, pulsamos el botón &lt;strong&gt;Register New Step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una vez hecho esto, ya deberíamos observar como, cada vez que modificamos el estado de un caso en el sistema se produce una llamada al método externo que tenemos publicado en Azure.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4189559152691961042?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4189559152691961042/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4189559152691961042' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4189559152691961042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4189559152691961042'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/12/consumir-servicios-externos-desde_17.html' title='Consumir servicios externos desde código SandBoxed (y II)'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_K1ZOnX85PHA/TQtkP4BncGI/AAAAAAAAAk0/oSv3Wl-Air8/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-7826949909663037394</id><published>2010-12-15T15:50:00.001+01:00</published><updated>2010-12-15T15:50:49.141+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Quiero empezar con SharePoint, ¿dónde voy?</title><content type='html'>&lt;p&gt;El título de este artículo pretende resumir muy brutamente una consulta bastante habitual en los foros y el contenido de bastantes correos electrónicos que recibo solicitando ayuda o consejo. Mi respuesta normalmente varía según mi estado de ánimo o según el día que haya tenido pero normalmente se resumiría también como: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Puedes empezar por Google, Bing o cualquier buscador con el que te sientas cómodo.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;No es que quiera resultar borde con esta respuesta ni que quiera frivolizar con el tema que para mí es muy serio. La respuesta es correcta para algunos casos y, de hecho, es ese el punto de partida que hemos tenido muchos de los que nos dedicamos a esto. Lo que pasa es que aquellos que hemos utilizado esa vía de aprendizaje no realizaríamos nunca la pregunta &lt;strong&gt;“por dónde empiezo”&lt;/strong&gt;. Voy a exponer ahora lo que es simplemente mi opinión personal al respecto. Incluiré alguna dirección de interés para responder a la pregunta inicial, pero siempre intentando argumentar el por qué de cada indicación.&lt;/p&gt;  &lt;p&gt;Para empezar, SharePoint es un producto (o mejor dicho una plataforma) muy extensa y compleja. Sí, es cierto que cualquier persona con mínimos conocimientos sobre la materia puede instalar un SharePoint en su casa y empezar a jugar con él. Seguramente, sin ninguna indicación podría incluso montar algo que funcionara, pero os garantizo que invertiría mucho tiempo en andar y desandar caminos que seguramente no le lleven a nada que le resulte de interés. Por lo tanto, &lt;strong&gt;primer consejo:&lt;/strong&gt;&amp;#160;&lt;u&gt;si queréis instalar un SharePoint para empezar a jugar, no perdáis el tiempo en ello. Descargad una máquina virtual con el producto instalado y con ejemplos de estructuras ya creadas&lt;/u&gt;. Os ahorraréis mucho tiempo que, a la postre, es lo más importante siempre. Por poneros un ejemplo a descargar, os dejo &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&amp;amp;displaylang=en" target="_blank"&gt;éste&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;De todas maneras, cuando alguien se plantea empezar en “esto del SharePoint” no se está refiriendo a empezar a jugar con algo. Si yo me planteo empezar a jugar con algo pienso en una consola, no en una plataforma informática o en un producto. Puestos a empezar en algo, ¿por qué SharePoint y no SAP, Ubuntu o Movie Maker? He de entender que te planteas SharePoint porque sabes o has oido que hace algo concreto. Pensad que en función de lo que estés buscando, la dirección a tomar puede ser muy diferente. Si quieres SharePoint para crear un portal de publicación, puedes perder meses aprendiendo como funcionan y como se extienden las características de colaboración de SharePoint. Lo primero a conocer de SharePoint está precisamente fuera de SharePoint. Me refiero a los requerimientos de lo que quieras o tengas que montar. &lt;strong&gt;Segundo consejo: &lt;/strong&gt;&lt;u&gt;si necesitas tener un &lt;em&gt;overview&lt;/em&gt; de lo que ofrece el producto, te recomiendo directamente la &lt;/u&gt;&lt;a href="http://sharepoint.microsoft.com/es-es/Paginas/default.aspx" target="_blank"&gt;página oficial de Microsoft&lt;/a&gt;. Una vez tenga claro qué partes del producto son de tu interés la búsqueda de información al respecto te resultará mucho más fructífera.&lt;/p&gt;  &lt;p&gt;Más preocupante me parece cuando la intención real del que se hace esta pregunta es empezar en el ámbito del desarrollo o de la administración de SharePoint. Principalmente me preocupa por el echo que si ya estás familiarizado con el desarrollo o la administración de otro producto o plataforma no te sueles plantear por dónde empezar. Ya sabes que está internet, y que hay libros especializados o incluso cursos presenciales u &lt;em&gt;online&lt;/em&gt;. &lt;strong&gt;Tercer consejo:&lt;/strong&gt;&lt;u&gt; si estás buscando estos elementos siempre encontrarás en los buscadores la información más reciente&lt;/u&gt;. Si aún así no encuentras nada (cosa que dudo) yo os dejo un &lt;a href="http://www.gavd.net/servers/sharepointv4/spsv4_main.aspx" target="_blank"&gt;enlace&lt;/a&gt; que funciona a día de hoy. Si no estás familiarizado con ningún otro producto, me parece irreal querer empezar por SharePoint. Pongamos dos casos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Un administrador de SharePoint tiene que tener amplios conocimientos de sistemas (SQL Server, IIS, ISA Server, etc.) Quizá no domine todos los sistemas, pero tiene que ser capaz de interpretar cuando un problema es de base de datos, o de seguridad. Si estás al día en estos productos, seguramente conocerás Technet y sabrás que &lt;a href="http://technet.microsoft.com/es-es/office/sharepointserver/default" target="_blank"&gt;ahí&lt;/a&gt; tienes todo lo que necesitas para trabajar con SharePoint.&lt;/li&gt;    &lt;li&gt;Un desarrollador de SharePoint debería (aunque no siempre es así) tener sólidos conocimientos de .NET. Si es así, conoces Msdn y, al igual que ocurría antes, &lt;a href="http://msdn.microsoft.com/es-es/sharepoint/default" target="_blank"&gt;ahí&lt;/a&gt; tienes todo lo que necesitas para trabajar con SharePoint.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Evidentemente, tanto los administradores de sistemas como los desarrolladores se encontrarán con problemas con los que nunca se han encontrado, por mucha experiencia que tengan. Ahí es cuando tienes que pedir ayuda. &lt;strong&gt;Cuarto consejo:&lt;/strong&gt; &lt;u&gt;si te encuentras con un problema para el cual no encuentras solución, acude a los blogs y a los foros.&lt;/u&gt; Encontrarás foros de todo tipo y para todos los gustos pero, por ejemplo, os dejo &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/mossdeves" target="_blank"&gt;aquí&lt;/a&gt; el link al foro oficial de desarrollo en SharePoint.&lt;/p&gt;  &lt;p&gt;Para concluir, un último consejo. Si os estáis planteando empezar en “esto del SharePoint” por un asunto oficial o, lo que es lo mismo, porque en vuestra empresa te han propuesto ponerlo en marcha en algún sentido, busca ayuda. SharePoint no es algo que sólo puedan tocar super-expertos, pero te vendrá bien alguien con conocimientos para tener un punto de partida. Quizá sólo necesites una consultoría de unas cuantas horas para enseñarte lo que puedes hacer para satisfacer tus necesidades, o quizá necesites 3 desarrolladores trabajando durante 5 meses, pero una primera consulta le ahorrará a tu empresa mucho tiempo y dinero. En un escenario real, un error en el inicio del planteamiento del proyecto puede concluir en la necesidad de comenzar de cero después de mucho tiempo invertido o, lo que es peor, comenzar de –X, teniendo que obtener de alguna manera toda la información que ya estuviera en una instalación con problemas, hacer el proyecto de cero y, finalmente, volcar toda la información obtenida previamente.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Como dirían en la tele, antes de tomar SharePoint, consulten con un farmacéutico…&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-7826949909663037394?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/7826949909663037394/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=7826949909663037394' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7826949909663037394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/7826949909663037394'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/12/quiero-empezar-con-sharepoint-donde-voy.html' title='Quiero empezar con SharePoint, ¿dónde voy?'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-9056308336327555853</id><published>2010-12-15T11:39:00.001+01:00</published><updated>2010-12-17T14:31:28.783+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRM2011'/><category scheme='http://www.blogger.com/atom/ns#' term='SandBox'/><title type='text'>Consumir servicios externos desde código SandBoxed</title><content type='html'>&lt;p&gt;El título de este post puede llevarnos a pensar que voy a hablar de &lt;strong&gt;Office365&lt;/strong&gt;, sobretodo por el concepto &lt;em&gt;SandBox&lt;/em&gt; y por el requerimiento de llamar a un servicio externo desde &lt;em&gt;mi SharePoint en la nube&lt;/em&gt;. La verdad es que me gustaría que fuera así, pero todavía no es momento de hablar de la nueva versión de &lt;strong&gt;BPOS&lt;/strong&gt; y de lo que ofrecerá cuando la primera beta se haga pública. No obstante, os puedo hablar de &lt;strong&gt;CRM 2011&lt;/strong&gt;, del cual hoy me he enterado que ya tenemos &lt;a href="http://blogs.msdn.com/b/crm/archive/2010/12/14/microsoft-dynamics-crm-2011-release-candidate-rc-announcement.aspx?utm_medium=twitter&amp;amp;utm_campaign=CRM" target="_blank"&gt;disponible la RC&lt;/a&gt;, y se da el caso que también utiliza el concepto &lt;em&gt;SandBox&lt;/em&gt; cuando se habla de despliegue de soluciones personalizadas sobre la versión online del producto. Obviamente, la necesidad de consumir servicios externos desde esta plataforma será también un requerimiento más que común. Se nos pueden dar varias opciones, desde tener que consumir un servicio “privado” que interactúe con un sistema interno dentro de nuestra infraestructura o la de un tercero a tener que consumir un servicio “público” proporcionado por cualquier organización. Vayamos por partes…&lt;/p&gt;  &lt;p&gt;Si tenemos que consumir un servicio privado las opciones se minimizan y todo apunta a que tenemos que utilizar &lt;a href="http://www.microsoft.com/en-us/appfabric/azure/default.aspx" target="_blank"&gt;AppFabric&lt;/a&gt; y, más en concreto, el &lt;strong&gt;Service Bus&lt;/strong&gt;. Si tenemos que consumir un servicio público el abanico de posibilidades se abre, almenos en teoría. En este post os voy a explicar un ejemplo concreto de este caso. Imaginemos que tenemos que desarrollar un servicio para publicarlo en &lt;strong&gt;Azure&lt;/strong&gt; y que queremos consumir desde &lt;strong&gt;CRM 2011 Online&lt;/strong&gt;. Evidentemente podemos seguir usando &lt;strong&gt;AppFabric&lt;/strong&gt; para este caso pero, siendo nuestras las dos piezas y estando ambas alojadas en la nube, ¿no puedo hacerlo por mis propios medios? La respuesta no es evidente, y si empezas a hacer tus pruebas te vas encontrando con algunas limitaciones de la tecnología. Entonces, ¿cómo lo hago? la respuesta es &lt;strong&gt;REST&lt;/strong&gt;. A continuación os detallo los pasos que deberíais seguir para montar una solución similar.&lt;/p&gt;  &lt;p&gt;Lo primero, añadir una referencia (si no la teníais ya) a los ensamblados &lt;strong&gt;System.ServiceModel&lt;/strong&gt; y &lt;strong&gt;System.ServiceModel.Web&lt;/strong&gt;. A continuación, incluir un servicio WCF dentro de nuestro sitio web que queremos publicar en Azure. Esta acción crea tres ficheros en nuestro proyecto. Primero editamos el archivo &lt;strong&gt;Service1.svc&lt;/strong&gt; y añadimos el atributo &lt;strong&gt;Factory=&amp;quot;System.ServiceModel.Activation.WebServiceHostFactory&amp;quot;&lt;/strong&gt; dentro del nodo &lt;strong&gt;ServiceHost&lt;/strong&gt;. El fichero resultante quedará así:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="background-color: #ffff00"&gt;&amp;lt;%@ ServiceHost Language=&amp;quot;C#&amp;quot; Debug=&amp;quot;true&amp;quot;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    Service=&amp;quot;WebApplication1.Service1&amp;quot;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    CodeBehind=&amp;quot;Service1.svc.cs&amp;quot;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    Factory=&amp;quot;System.ServiceModel.Activation.WebServiceHostFactory&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Después editamos el fichero &lt;strong&gt;IService1.cs&lt;/strong&gt; que es la interfaz del servicio WCF para añadir la firma del método o de los métodos que queremos publicar. En este caso, expongo un método llamado &lt;strong&gt;GetIntegerResult&lt;/strong&gt; que devolverá un valor entero.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; WebApplication1&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.ServiceModel;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.ServiceModel.Web;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    [ServiceContract]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IService1&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [OperationContract(Name = &lt;span style="color: #006080"&gt;&amp;quot;GetIntegerResult&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [WebInvoke(UriTemplate = &lt;span style="color: #006080"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;, Method = &lt;span style="color: #006080"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GetIntegerResult();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Una vez hecho esto tenemos que añadir la implementación del método que devuelve dicho valor entero. Para ello, editamos el fichero &lt;strong&gt;Service1.svc.cs &lt;/strong&gt;y escribimos lo siguiente:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; WebApplication1&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Service1 : IService1&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GetIntegerResult()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 3;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Si compilamos este código y accedemos vía web a nuestro servicio usando la url &lt;a title="http://localhost:49254/Service1.svc/" href="http://localhost:49254/Service1.svc/"&gt;http://localhost:49254/Service1.svc/&lt;/a&gt; (donde localhost:49254 es la url principal de vuestra aplicación web) observaréis un resultado como el de la figura:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TQia4ZGbiuI/AAAAAAAAAko/oGa5uytnNo4/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_K1ZOnX85PHA/TQia49_3x3I/AAAAAAAAAks/yzwPJy7eO4M/image_thumb%5B1%5D.png?imgmax=800" width="404" height="157" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El ejemplo, como se puede apreciar es muy simple y estoy pasando por alto muchas consideraciones pero el resumen es que si yo hago un &lt;strong&gt;GET&lt;/strong&gt; de esta url obtengo el resultado que observáis en la figura. Ahora, ¿cómo hago ese &lt;strong&gt;GET&lt;/strong&gt;? Está claro que hay múltiples respuestas para esta pregunta pero lo que parece evidente es que no vamos a tener muchas trabas tecnológicas independientemente de la tecnología que utilicemos siempre y cuando el servicio al que quiero llamar sea visible desde el sistema que estoy extendiendo, ya sea &lt;strong&gt;CRM 2011 Online&lt;/strong&gt;, &lt;strong&gt;Office 365&lt;/strong&gt; o X. Para que sea visible deberemos publicar nuestro servicio en azure. Vamos a suponer que he publicado mi aplicación web en &lt;a href="http://myapp.cloudapp.net"&gt;http://myapp.cloudapp.net&lt;/a&gt; y que, por lo tanto, si en mi navegador pongo &lt;a href="http://myapp.cloudapp.net/Service1.svc"&gt;http://myapp.cloudapp.net/Service1.svc&lt;/a&gt; veré una figura exactamente igual que la anterior. Para realizar la llamada desde C# una posibilidad es la siguiente:&lt;/p&gt;

&lt;p&gt;Añadimos referencias a los ensamblados &lt;strong&gt;Microsoft.Http&lt;/strong&gt; y &lt;strong&gt;Microsoft.Http.Extensions&lt;/strong&gt;. Estos ensamblados los podréis encontrar dentro del &lt;a href="http://www.asp.net/downloads/starter-kits/wcf-rest" target="_blank"&gt;WCF REST Starter Kit&lt;/a&gt;. A continuación, desde el sitio desde el cual quieras llamar a tu servicio, introduce el siguiente código.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; uri = &lt;span style="color: #006080"&gt;&amp;quot;http://myapp.cloudapp.net/Service1.svc/&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (HttpResponseMessage response = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; HttpClient().Get(uri))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;// TODO: tratar la respuesta aquí    &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;// No olvidéis la siguiente línea al principio del fichero:&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//    using Microsoft.Http;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Así de simple, independientemente de la tecnología que uses […] Bueno en realidad siempre hay una trampa, o varias. Si recordáis el título del artículo hablaba sobre &lt;strong&gt;CRM 2011 Online&lt;/strong&gt; y yo sólo os he dado el punto de partida, la primera pista. &lt;strong&gt;.NET&lt;/strong&gt; puro y duro que deberéis saber cómo publicar en &lt;strong&gt;CRM 2011 Online&lt;/strong&gt;, en &lt;strong&gt;Office 365&lt;/strong&gt; o donde buenamente queráis. La segunda pista en la cadena &lt;strong&gt;CRM 2011 Online – SandBox – REST&lt;/strong&gt; es &lt;strong&gt;Plugin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Aún a riesgo de que me odiéis por &lt;strike&gt;haber metido sólo la puntita&lt;/strike&gt; dejaros con la miel en los labios, voy a dejar el artículo aquí por el momento con la promesa de escribir una continuación digna a lo largo de esta semana.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Actualizado a lo largo de esa semana…&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os dejo &lt;a href="http://david-martos.blogspot.com/2010/12/consumir-servicios-externos-desde.html" target="_blank"&gt;aquí&lt;/a&gt; la segunda parte de este artículo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-9056308336327555853?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/9056308336327555853/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=9056308336327555853' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/9056308336327555853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/9056308336327555853'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/12/consumir-servicios-externos-desde.html' title='Consumir servicios externos desde código SandBoxed'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_K1ZOnX85PHA/TQia49_3x3I/AAAAAAAAAks/yzwPJy7eO4M/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-8357103134032332849</id><published>2010-12-14T20:21:00.001+01:00</published><updated>2010-12-14T20:21:31.005+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRM2011'/><title type='text'>CRM 2011 - An unsecured or incorrectly secured fault was received from the other party error</title><content type='html'>&lt;p&gt;Como veréis, hoy me traslado temporalmente al mundo de CRM 2011, lo cual no es demasiado habitual en mí, una persona acostumbrada a trabajar mayoritariamente en tecnologías SharePoint. El caso es que de vez en cuando me toca jugar con una nueva tecnología y, entre la novedad del producto y mi desconocimiento del medio, me encuentro con errores que se escapan totalmente de mi control y me hacen &lt;strike&gt;perder&lt;/strike&gt; invertir tiempo en la búsqueda de soluciones. El caso de hoy ha resultado ser una tontería pero, por si os sucede lo mismo que a mí, os pongo aquí el problema y su resolución.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;El problema&lt;/strong&gt;      &lt;br /&gt;&lt;/u&gt;A la hora de utilizar el &lt;em&gt;Plugin Registration Tool&lt;/em&gt; para conectarme a mi instancia de CRM 2011 Online me encuentro con una excepción cuando trato de conectar con mi organización. El error dice lo siguiente:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;An unsecured or incorrectly secured fault was received from the other party error&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;El caso es que trato de utilizar todas las credenciales de que dispongo, pero el resultado es siempre el mismo.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;La solución&lt;/strong&gt;      &lt;br /&gt;&lt;/u&gt;Para poder conectar de nuevo la herramienta a mi instancia de CRM 2011 Online basta con acceder a la carpeta &lt;strong&gt;LiveDeviceID&lt;/strong&gt; que encontraréis en vuestro perfil de usuario (C:\Users\{usuario} en Win7, por ejemplo) y eliminar el fichero&lt;strong&gt; LiveDevice.xml&lt;/strong&gt; que encontraréis en ella.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-8357103134032332849?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/8357103134032332849/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=8357103134032332849' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8357103134032332849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/8357103134032332849'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/12/crm-2011-unsecured-or-incorrectly.html' title='CRM 2011 - An unsecured or incorrectly secured fault was received from the other party error'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-4041582416446061991</id><published>2010-11-24T17:56:00.001+01:00</published><updated>2010-11-24T17:56:01.245+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='streetcare'/><category scheme='http://www.blogger.com/atom/ns#' term='azure'/><title type='text'>Spenta StreetCare ve la luz</title><content type='html'>&lt;p&gt;Hoy tengo el placer de anunciaros uno de los motivos por los cuales he estado más desaparecido de la cuenta. Las últimas semanas han sido muy intensas debido a que estábamos ultimando los detalles de &lt;strong&gt;Spenta StreetCare&lt;/strong&gt;, un producto desarrollado por &lt;strong&gt;Spenta&lt;/strong&gt;, que funciona íntegramente en &lt;strong&gt;Azure&lt;/strong&gt; y que está ideado para proporcionar la capacidad a los Ayuntamientos de ofrecer un servicio a sus ciudadanos para que éstos reporten las incidencias que puedan encontrar en las calles.&lt;/p&gt;  &lt;p&gt;Si queréis conocer más detalles acerca de esta herramienta os dejo dos enlaces: La &lt;a href="http://www.spenta.es/es-ES/noticias/Paginas/StreetCare.aspx"&gt;noticia&lt;/a&gt; publicada en la web de &lt;a href="http://www.spenta.es"&gt;Spenta&lt;/a&gt; y la &lt;a href="http://www.streetcare.com"&gt;página oficial del producto&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;También es un orgullo para mí contar que la aplicación ha sido galardonada con un &lt;a href="http://blogs.msdn.com/b/bright_side_of_government/archive/2010/11/15/winners-of-windows-azure-apps-contest-revealed.aspx#fbid=gW3FxdolXWX"&gt;premio&lt;/a&gt; a la mejor aplicación sobre &lt;strong&gt;Windows Azure&lt;/strong&gt;. No tengo información acerca del premio ni de cómo ha llegado a participar &lt;strong&gt;StreetCare&lt;/strong&gt; en el concurso, pero lo que os puedo decir es que, desde que vio la luz la primera beta dentro del ámbito de &lt;a href="http://www.microsoft.com/csp"&gt;CSP (Citizen Service Platform)&lt;/a&gt; en los diferentes eventos de Microsoft a nivel mundial no ha dejado de generar ruido por allá por donde se ha enseñado.&lt;/p&gt;  &lt;p&gt;A nivel técnico, que es lo que interesa en este blog, deciros que ha sido durisimo y a la vez emocionante trabajar en este proyecto por el número de tecnologías nuevas que incorpora y en las cuales me he tenido que poner las pilas. Por citar algunas, mencionaré &lt;strong&gt;Azure (Windows Azure, Azure Storage y SQL Azure), AppFabric, Windows Phone 7 y CRM 2011 Online&lt;/strong&gt;. Falta &lt;strong&gt;SharePoint 2010&lt;/strong&gt;, ¿verdad? pues dadme tiempo para que &lt;strong&gt;Office 365&lt;/strong&gt; entre en escena y os comience a hablar sobre &lt;strong&gt;StreetCare, Office 365 y Pivot&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;En fin, felicitar a todo el equipo que ha hecho posible poner esto en marcha, agradecerles su ayuda en los momentos más complicados y animarles a seguir en esta línea.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-4041582416446061991?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/4041582416446061991/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=4041582416446061991' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4041582416446061991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/4041582416446061991'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/11/spenta-streetcare-ve-la-luz.html' title='Spenta StreetCare ve la luz'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-2444289980735370322</id><published>2010-11-09T11:45:00.001+01:00</published><updated>2010-11-09T11:45:22.705+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>Nuevos blogs interesantes</title><content type='html'>&lt;p&gt;Hace demasiado tiempo que no posteo nada, y no por falta de ganas sino por falta de tiempo. Estoy preparando material que empezaré a publicar en breve pero, mientras tanto, os dejo un par de enlaces interesantes de colegas de profesión y de compañía que recientemente han inaugurado su blog personal y que os recomiendo encarecidamente que sigáis.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ángel Suarez (alias, el de León): &lt;a title="http://sguisu.blogspot.com/" href="http://sguisu.blogspot.com/"&gt;http://sguisu.blogspot.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Enric Carrión (sin alias, pero monstruo donde los haya): &lt;a title="http://sharejoint.blogspot.com/" href="http://sharejoint.blogspot.com/"&gt;http://sharejoint.blogspot.com/&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Aunque no lo parezca, para mí es un notición. Después de haberlos visto entrar en la compañía, haber trabajado con ellos durante varios años y haberlos visto crecer en conocimientos y en canas, ya iba siendo hora de que empezasen a compartir todo lo que llevan dentro.&lt;/p&gt;  &lt;p&gt;Mención especial para Enric (seguro que lo entiendes, Ángel) que yo creo que es el “tapado” más grande de la historia de SharePoint. Recuerdo el día que entré en una sala para entrevistarlo y comprobar su nivel hace 4 años y salí temblando de miedo y casi llorando ;). A partir de ese momento, no ha dejado de sorprendernos a todos su capacidad para dominar nuevas tecnologías y para asumir más y más trabajo.&lt;/p&gt;  &lt;p&gt;La historia de Ángel en Spenta es mucho más corta (unos 2 años), pero la verdad es que bastante intensa por los proyectos en los que ha estado involucrado. Seguro que la mayoría de Spentanos estamos de acuerdo en que si tenemos que destacar un aspecto de estos dos años es que ha cambiado el ambiente de la oficina con su frescura y desparpajo. Por supuesto, su solvencia tecnológica también es destacable.&lt;/p&gt;  &lt;p&gt;Simplemente animaros a seguir escribiendo y enseñandonos cosas siempre que podáis.&lt;/p&gt;  &lt;p&gt;Para no desmerecer al resto de Spentanos, os dejo una lista con otros blogs ilustres y de obligada lectura, almenos para mí, pero que no necesitan presentación porque ya llevan tiempo en la comunidad.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Daniel Sabater: &lt;a title="http://crmadiario.blogspot.com/" href="http://crmadiario.blogspot.com/"&gt;http://crmadiario.blogspot.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Maximo Castagno: &lt;a title="http://maximocastagno.tumblr.com/" href="http://maximocastagno.tumblr.com/"&gt;http://maximocastagno.tumblr.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Jordi Ruiz: &lt;a title="http://jordiruiznet.blogspot.com/" href="http://jordiruiznet.blogspot.com/"&gt;http://jordiruiznet.blogspot.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Ignasi Tebé: &lt;a title="http://www.sharepointer.es/" href="http://www.sharepointer.es/"&gt;http://www.sharepointer.es/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Luís Ruiz: &lt;a title="http://luisruizpavon.blogspot.com/" href="http://luisruizpavon.blogspot.com/"&gt;http://luisruizpavon.blogspot.com/&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;No sé si me dejo alguno. Si lo he hecho, avisadme y actualizo la lista.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-2444289980735370322?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/2444289980735370322/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=2444289980735370322' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2444289980735370322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/2444289980735370322'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/11/nuevos-blogs-interesantes.html' title='Nuevos blogs interesantes'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1925405376391730756</id><published>2010-10-07T23:41:00.001+02:00</published><updated>2010-10-07T23:50:27.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[offtopic]'/><title type='text'>David Martos, también en Geeks.ms</title><content type='html'>&lt;p&gt;Queridos lectores, tengo que informaros de la reciente inauguración de mi nuevo blog en &lt;strong&gt;Geeks.ms&lt;/strong&gt;. Coincidiendo con mi reciente nombramiento como &lt;strong&gt;Microsoft MVP SharePoint Server&lt;/strong&gt; he querido dar un saltito y crear este nuevo blog que llevaba tiempo rondándome por la cabeza. Esto no significa en ningún caso que dejaré de mantener este blog. De hecho, allí sólo publicaré contenido relacionado con &lt;strong&gt;SharePoint 2010&lt;/strong&gt; mientras que seguiré publicando el resto de cosas aquí.&lt;/p&gt;  &lt;p&gt;¿Que el 99% de lo que publico acualmente está relacionado con &lt;strong&gt;SharePoint 2010&lt;/strong&gt;? correcto, pero no alarmarse que seguiré publicando esa información aquí mediante &lt;em&gt;crossposting&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Poco a poco iré personalizando el otro blog para darle una forma y un estilo más apropiados, pero es que si no lo inauguro ya irá pasando el tiempo y nunca acabaré de ponerme. Ahora tengo que ponerme sí o sí.&lt;/p&gt;  &lt;p&gt;En fin, nada más. Os dejo la url para aquellos de vososotros que prefiráis leerme en &lt;strong&gt;Geeks.ms&lt;/strong&gt; pero, como ya he dicho, este blog se mantendrá como siempre.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://geeks.ms/blogs/davidmartos/" href="http://geeks.ms/blogs/davidmartos/"&gt;http://geeks.ms/blogs/davidmartos/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-1925405376391730756?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/1925405376391730756/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=1925405376391730756' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1925405376391730756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/1925405376391730756'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/10/david-martos-tambien-en-geeksms.html' title='David Martos, también en Geeks.ms'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-6685663201603882376</id><published>2010-10-07T11:20:00.000+02:00</published><updated>2010-10-07T11:21:52.817+02:00</updated><title type='text'>¡He sido MVP-tizado!</title><content type='html'>&lt;p&gt;Hoy es un día muy especial para éste, mi humilde blog: tengo el placer de anunciaros mi nombramiento como &lt;strong&gt;&lt;u&gt;Microsoft MVP de SharePoint Server&lt;/u&gt;&lt;/strong&gt;, y de ese nombramiento, tiene gran parte de culpa este espacio que leéis. Como muchos sabréis, este título o galardón se otorga a aquellos profesionales que más o mejor colaboran con la comunidad, ya sea posteando, participando en los grupos de usuario, creando contenido multimedia o incluso participando en eventos presenciales. Aunque intento participar en tantas áreas como sea posible, tengo que reconocer que el blog es el que se acaba llevando más cuota de tiempo. Además, cualquier colaboración que realizo fuera de este blog acaba teniendo aquí su reseña a modo de referencia.&lt;/p&gt;  &lt;p&gt;Cuando comencé a escribir este blog y a colaborar más activamente en la comunidad, mi objetivo era claro: mis principales fuentes de inspiración han sido siempre los foros y los blogs de expertos de las tecnologías con las que trabajo a diario, gracias a los cuáles he aprendido muchísimo y me he ahorrado una gran cantidad de tiempo a la hora de resolver problemas. Creando este sitio quería poder devolver una pequeña parte de todo lo que la comunidad me ha dado siempre y, si alguna vez algo de lo que escribo puede ahorrarle unos minutos a alguien, el trabajo habrá merecido la pena. El caso es que el reconocimiento como MVP no es otra cosa que una confirmación de que por lo menos estoy en el buen camino para conseguir ese objetivo, y eso es lo más importante al fin y al cabo.&lt;/p&gt;  &lt;p&gt;La verdad es que todo se ha producido muy rápido y de manera muy inesperada para mí, ya que me enteré durante el &lt;em&gt;“bautizo”&lt;/em&gt; de otros MVPs en el pasado &lt;strong&gt;&lt;u&gt;MVP Open Day &amp;amp; TTT del 01/10/2010 en Fuengirola&lt;/u&gt;&lt;/strong&gt;. No os hablaré del evento en este post, pero si buscáis TTT2010 por las principales redes sociales encontraréis información interesante a&amp;#160; raudales. Cuando vi aparecer al amigo &lt;strong&gt;&lt;a href="http://geeks.ms/blogs/ciin/"&gt;Juan Carlos&lt;/a&gt;&lt;/strong&gt; indicándome que me tocaba a mí pensaba que en realidad se trataba de una broma. De hecho, cuando vi como se desarrollaron los acontecimientos seguía pensando que muy normal no era… pero&amp;#160; bueno, espero acostumbrarme a esto porque significará que sigo muchos años metido en el ajo.&lt;/p&gt;  &lt;p&gt;Sin más, comentar únicamente que, como ya se han encargado de decirme: &lt;strong&gt;un gran poder conlleva una gran responsabilidad&lt;/strong&gt;, así que espero poder mantener (o a ser posible mejorar) el nivel de este blog para que esté a la altura de las circunstancias. Y no quiero finalizar este post sin dar las gracias a todas las personasque&amp;#160; han participado de una u otra manera en mi proceso de nominación. Espero devolverles la confianza que han depositado en mí.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8876593780817784227-6685663201603882376?l=david-martos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://david-martos.blogspot.com/feeds/6685663201603882376/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8876593780817784227&amp;postID=6685663201603882376' title='15 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6685663201603882376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8876593780817784227/posts/default/6685663201603882376'/><link rel='alternate' type='text/html' href='http://david-martos.blogspot.com/2010/10/he-sido-mvp-tizado.html' title='¡He sido MVP-tizado!'/><author><name>David Martos</name><uri>http://www.blogger.com/profile/17695246410254219830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_K1ZOnX85PHA/TTlW3X06EwI/AAAAAAAAAl8/03ea8LI_ss0/s220/dama.png'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8876593780817784227.post-1109109374664401560</id><published>2010-10-05T12:25:00.001+02:00</published><updated>2010-10-06T15:19:36.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Blogs en SharePoint 2010 y rating</title><content type='html'>&lt;p&gt;Permitir a tus usuarios valorar los posts de un blog de SharePoint 2010 y mostrar estas valoraciones por pantalla es un requerimiento bastante habitual que, por defecto, no está soportado. Existen muchas maneras de poner esto en marcha, y se pueden encontrar algunas soluciones que te ofrecen esta y otras muchas funcionalidades (por ejemplo, CKS). No obstante, si sólo queremos habilitar el rating y no queremos complicarnos la vida, tenemos una manera muy simple de hacerlo.&lt;/p&gt;  &lt;p&gt;Para empezar, accedemos a la gestión de la lista de posts de nuestro blog y, una vez ahi, seleccionamos &lt;strong&gt;configuración de la lista&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TKr8_3pxDUI/AAAAAAAAAjw/GN2aY4w6Yjs/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_K1ZOnX85PHA/TKr9AtnfeOI/AAAAAAAAAj0/eZQsjk344mg/image_thumb%5B7%5D.png?imgmax=800" width="513" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En la configuración de la lista veremos una opción para establecer la configuración de las valoraciones o &lt;em&gt;ratings&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TKr9BCyoXaI/AAAAAAAAAj4/x4qqbFaKrOc/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TKr9CECa4_I/AAAAAAAAAkA/tV9b8ppoBBo/image_thumb%5B12%5D.png?imgmax=800" width="368" height="242" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Una vez ahí podremos confirmar que permitimos valorar los elementos de esta lista y guardar la configuración.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_K1ZOnX85PHA/TKr9CXWJBlI/AAAAAAAAAkE/yxYH91VCh4c/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_K1ZOnX85PHA/TKr9C7pggOI/AAAAAAAAAkI/H7vIWO7WqTs/image_thumb%5B17%5D.png?imgmax=800" width="333" height="215" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;En estos momentos nuestra lista está preparada para recibir valoraciones y, utilizando las vistas de la lista y editando las propiedades de los posts podríamos valorarlos y ver las valoraciones medias. Si queremos hacer esto de una manera más elegante, necesitamos permitir realizar las valoraciones desde la propia página del post y ver las valoraciones medias desde la lista. Para hacer eso, podemos utilizar SharePoint Designer.&lt;/p&gt;  &lt;p&gt;Accedemos a &lt;strong&gt;All Files –&amp;gt; Lists –&amp;gt; Posts –&amp;gt; Post.aspx &lt;/strong&gt;y editamos el fichero en modo avanzado&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_K1ZOnX85PHA/TKr9D3WdM0I/AAAAAAAAAkM/mkpTO3VABUw/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TKr9EwH74FI/AAAAAAAAAkQ/YxXVy0ZhRF4/image_thumb%5B24%5D.png?imgmax=800" width="482" height="305" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una vez ahí necesitamos, primero, registrar el control de valoraciones al inicio de la página, insertando el siguiente código:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="background-color: #ffff00"&gt;&amp;lt;%@ Register Tagprefix=&amp;quot;SharePointPortalControls&amp;quot; Namespace=&amp;quot;Microsoft.SharePoint.Portal.WebControls&amp;quot; Assembly=&amp;quot;Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Después, en algún lugar de la página (yo he decidido ponerlo dentro del DIV con ID BlogRSSNav pero podéis decidir vosotros mismos) necesitáis añadir el control &lt;strong&gt;AverageRatingFieldControl&lt;/strong&gt;.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;BlogRSSNav&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;SharePointPortalControls:AverageRatingFieldControl&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;PageRatingControl&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;FieldName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Rating (0-5)&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Una vez hecho esto ya tendréis la posibilidad de enviar valoraciones desde la propia página del post, tal y como muestra la figura:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_K1ZOnX85PHA/TKr9FRxwFwI/AAAAAAAAAkU/9F2-6RSNXVE/s1600-h/image%5B24%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_K1ZOnX85PHA/TKr9GdPZxjI/AAAAAAAAAkY/98Jp0XJ_J-4/image_thumb%5B30%5D.png?imgmax=800" width="515" height="200" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Poner esta información en el listado de la página inicial es algo más complejo y va a requerir que tengáis conocimientos de XSLT. Para hacerlo deberíais editar la página default.aspx de la raíz del sitio con &lt;strong&gt;SharePoint Designer&lt;/strong&gt;, localizar el &lt;strong&gt;XsltListViewWebPart &lt;/strong&gt;que muestra la lista de posts (es el segundo) y modificar la definición del XML.&lt;/p&gt;

&lt;p&gt;Primero, en la lista de ViewFields tendréis que añadir el siguiente campo:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FieldRef&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;AverageRating&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Para finalizar, puedes mostrar el campo allá donde más te convenga, dentro del nodo &lt;strong&gt;xsl&lt;/strong&gt;, utilizando el siguiente código:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:value-of&lt;/span&gt; &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;$thisNode/@AverageRating&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Evidentemente esto es únicamente parte de la solución porque aunque tengas todo perfectamente configurado únicamente verás el valor numérico. A partir de aquí, con algunos conocimientos de XSLT podrás montar automáticamente una lista de estrellas o cualquier otro elemento que quieras utilizar para mostrar las valoraciones. Si, además de todo esto, necesitas disponer del control interactivo para valorar posts desde el propio listado os recomiendo que editéis con SharePoint Designer alguna de las vistas que contengan el campo &lt;strong&gt;AverageRating&lt;/strong&gt; como, por ejemplo, &lt;strong&gt;AllPosts.aspx.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Editado el 06/10/2010&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para aclarar algunas dudas, añado el código xsl que sería necesario para mostrar la valoración media justo delante del título del post en la página de inicio del blog. Editáis la página con SharePoint Designer 2010 y buscáis el siguiente código:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;XmlDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &a
