<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Andrés Iturralde</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/aiturralde/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/aiturralde/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:14:26 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>[WebCast] Productividad con SCRUM y Team Foundation Server 2013</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/webcast-productividad-con-scrum-y-team-foundation-server-2013</link>
      <pubDate>Fri, 07 Mar 2014 08:32:00 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2014/03/07/webcast-productividad-con-scrum-y-team-foundation-server-2013/</guid>
      <description><![CDATA[Ayer tuve el privilegio de participar en un nuevo WebCast de la gente de Ninja Web, sesi&oacute;n en...]]></description>
      <content:encoded><![CDATA[<p align="justify">Ayer tuve el privilegio de participar en un nuevo WebCast de la gente de Ninja Web, sesi&oacute;n en la cual vimos que es SCRUM y de que manera puede ser aplicado mediante el uso de Team Foundation Server 2013.</p>
<p align="justify">Como lo prometido es deuda aqu&iacute; les dejo la presentaci&oacute;n que vimos ayer:</p>
<p align="center"><iframe src="https://onedrive.live.com/embed?cid=C11F3857664E5F29&amp;resid=C11F3857664E5F29%212291&amp;authkey=AJPII7KANesKyOI&amp;em=2" frameborder="0" scrolling="no" width="402" height="327"></iframe></p>
<p align="justify"><br />Adem&aacute;s si desean ver la grabaci&oacute;n del WebCast pueden hacerlo ac&aacute;: <a href="https://www.youtube.com/watch?v=hb1hi6B499A">https://www.youtube.com/watch?v=hb1hi6B499A</a></p>]]></content:encoded>
    </item>
    <item>
      <title>[Evento] Introducción a Visual Studio 2012</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/evento-introduccin-a-visual-studio-2012</link>
      <pubDate>Wed, 13 Mar 2013 08:12:44 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2013/03/13/evento-introduccin-a-visual-studio-2012/</guid>
      <description><![CDATA[Ayer tuve el privilegio de participar como orador en una charla técnica en la cual mostré las nuevas...]]></description>
      <content:encoded><![CDATA[<p align="justify">Ayer tuve el privilegio de participar como orador en una charla técnica en la cual mostré las nuevas características de Visual Studio 2012 Premium y Ultimate. Fue un evento cargada de demos en las cuales no solo se mostraron herramientas que ayudan al desarrollador sino que tambien a testers y stakeholders.</p>  <p align="justify">Aquí les dejo la presentación para que puedan revizarla!</p> <iframe height="327" src="https://skydrive.live.com/embed?cid=C11F3857664E5F29&amp;resid=C11F3857664E5F29%212089&amp;authkey=AJZ4rbyn6MMFtUY&amp;em=2" frameborder="0" width="402" scrolling="no"></iframe>]]></content:encoded>
    </item>
    <item>
      <title>Notificando a clientes desde el lado de servidor usando SignalR</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/notificando-a-clientes-desde-el-lado-de-servidor-usando-signalr</link>
      <pubDate>Fri, 15 Feb 2013 06:06:00 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2013/02/15/notificando-a-clientes-desde-el-lado-de-servidor-usando-signalr/</guid>
      <description><![CDATA[Como pudimos ver en el artículo anterior, SignalR nos provee abstracciones sobre los transportes...]]></description>
      <content:encoded><![CDATA[<p>Como pudimos ver en el artículo <a href="https://blogs.msdn.com/b/aiturralde/archive/2012/08/18/signalr.aspx" target="_blank">anterior</a>, SignalR nos provee abstracciones sobre los transportes requeridos para crear aplicaciones de tiempo real. El cual como primera instancia hace uso de Web Sockets y en caso de que no se disponga de esta capacidad, entonces puede hacer un “fallback” hasta encontrar una capa de transporte que él pueda utilizar.</p>  <p>En esta ocasión crearemos una aplicación la cual podrá notificar a sus clientes de alguna actualización ocurrida en el lado del servidor. Si queremos imaginarnos un escenario que nos ayude a ilustrar esta situación, tomemos una aplicación para saber los precios de las acciones para una empresa determinada: Por un lado tenemos el back end el cual accede a la información y se encarga de notificar a los clientes de que se ha producido un cambio en los valores, mientras que por otro lado podríamos tener una aplicación Web la cual se encarga de desplegar la información.</p>  <p>Partamos primero con el HTML, para este caso vamos a hacer algo super sencillo. Básicamente es un DIV con un listado (LI) en el cual presentaremos los valores:</p>  <div style="background: white; color: black; font-family: courier new; font-size: 10pt;">   <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 1</span>&#160;<span style="color: blue;">&lt;</span><span style="color: maroon;">h1</span><span style="color: blue;">&gt;</span>Recibiendo mensajes...<span style="color: blue;">&lt;/</span><span style="color: maroon;">h1</span><span style="color: blue;">&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 2</span>&#160;<span style="color: blue;">&lt;</span><span style="color: maroon;">br</span> <span style="color: blue;">/&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 3</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 4</span>&#160;<span style="color: blue;">&lt;</span><span style="color: maroon;">div</span><span style="color: blue;">&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 5</span>&#160;&#160; <span style="color: blue;">&lt;</span><span style="color: maroon;">ul</span> <span style="color: red;">id</span><span style="color: blue;">=&quot;notificaciones&quot;&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 6</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 7</span>&#160;&#160; <span style="color: blue;">&lt;/</span><span style="color: maroon;">ul</span><span style="color: blue;">&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 8</span>&#160;<span style="color: blue;">&lt;/</span><span style="color: maroon;">div</span><span style="color: blue;">&gt;</span></p> </div>  <p>Ahora crearemos el back end, encargado de consultar la información para posteriormente notificar a los clientes de la actualización.</p>  <div style="background: white; color: black; font-family: courier new; font-size: 10pt;">   <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 1</span>&#160;<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: rgb(43, 145, 175);">Notificador</span> : <span style="color: rgb(43, 145, 175);">Hub</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 2</span> {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 3</span>&#160;&#160; <span style="color: blue;">public</span> <span style="color: blue;">void</span> SendNotification()</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 4</span>&#160;&#160; {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 5</span>&#160;&#160;&#160;&#160; <span style="color: rgb(43, 145, 175);">Random</span> rand = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">Random</span>();</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 6</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 7</span>&#160;&#160;&#160;&#160; <span style="color: blue;">while</span> (<span style="color: blue;">true</span>)</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 8</span>&#160;&#160;&#160;&#160; {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue;">int</span> value = rand.Next(100);</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 10</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 11</span>&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue;">string</span> data = <span style="color: blue;">string</span>.Format(<span style="color: rgb(163, 21, 21);">&quot;El valor aleatorio es: {0}&quot;</span>, value);</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 12</span>&#160;&#160;&#160;&#160;&#160;&#160; Clients.All.getNotification(data);</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 13</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 14</span>&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green;">//Simulando una conexión a una base de datos...</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 15</span>&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.<span style="color: rgb(43, 145, 175);">Thread</span>.Sleep(1000);</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 16</span>&#160;&#160;&#160;&#160;&#160; }</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 17</span>&#160;&#160;&#160; }</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 18</span>&#160; }</p> </div>  <p>Aquí podemos ver que creamos una clase llamada &quot;Notificador”, la cual hereda de Hub (namespace Microsoft.AspNet.SignalR.Hubs) como les comentaba en el artículo anterior, está clase nos provee un framework RPC de alto nivel sobre una conexión persistente. Por otra parte “Clients” es un objeto que nos permite tener una relación entre el lado del cliente y el lado del servidor, por lo cual el método <strong>getNotification</strong> en realidad es un método que existirá en el lado de JavaScript.</p>  <p>Volviendo a nuestro archivo HTML, vamos a incluir los siguientes elementos de JavaScript entre los elementos &lt;head&gt;:</p>  <div style="background: white; color: black; font-family: courier new; font-size: 10pt;">   <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 1</span>&#160; <span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">=&quot;Scripts/jquery-1.6.4.min.js&quot;&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 2</span>&#160; <span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">=&quot;Scripts/jquery.signalR-1.0.0-rc1.min.js&quot;&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 3</span>&#160; <span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">='signalr/hubs'</span> <span style="color: red;">type</span><span style="color: blue;">=&quot;text/javascript&quot;&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 4</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 5</span>&#160; <span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">=&quot;text/javascript&quot;&gt;</span></p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 6</span>&#160;&#160;&#160;&#160;&#160; $(<span style="color: blue;">function</span> () {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 7</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue;">var</span> connection = $.connection.notificador;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 8</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; connection.client.getNotification = <span style="color: blue;">function</span> (data) {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 10</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $(<span style="color: rgb(163, 21, 21);">'#notificaciones'</span>).append(<span style="color: rgb(163, 21, 21);">'&lt;li&gt;'</span> + data + <span style="color: rgb(163, 21, 21);">'&lt;/li&gt;'</span>);</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 11</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 12</span>&#160;</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 13</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $.connection.hub.start().done(<span style="color: blue;">function</span> () {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 14</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; connection.server.sendNotification();</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 15</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; });</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 16</span>&#160;&#160;&#160;&#160;&#160; });</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160; 17</span>&#160;<span style="color: blue;">&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span></p> </div>  <p>En esta sección, es importante destacar lo siguiente:</p>  <ul>   <li>Necesitamos agregar referencias a jQuery y jQuery.SignalR</li>    <li>Además hacemos referencias a los Hubs de signalR mediante la siguiente declaración:</li>    <li>Aquí vemos que se define el método getNotification el cual hacíamos referencia desde C#. Este método lo que hace es utilizar los datos enviados desde el lado del servidor para finalmente desplegarlo dentro del listado (LI).</li>    <li>Finalmente iniciamos el hub mediante el método start, el cual se encargará de llamar por primera vez al método “sendNotification” existente en el lado de servidor.</li> </ul>  <p>Finalmente para que nuestra aplicación funcione, en el archivo global.asax específicamente en el evento Application_Start agregaremos la ruta a los Hubs de signalR.</p>  <div style="background: white; color: black; font-family: courier new; font-size: 10pt;">   <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 1</span>&#160;<span style="color: blue;">protected</span> <span style="color: blue;">void</span> Application_Start(<span style="color: blue;">object</span> sender, <span style="color: rgb(43, 145, 175);">EventArgs</span> e)</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 2</span> {</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 3</span>&#160;&#160;&#160;&#160; <span style="color: rgb(43, 145, 175);">RouteTable</span>.Routes.MapHubs();</p>    <p style="margin: 0px;"><span style="color: teal;">&#160;&#160;&#160; 4</span> }</p> </div>  <p>Una vez ejecutada la aplicación veremos como esta comienza a recibir datos periódicamente, lo interesante de SignalR es que si otro cliente visualiza la aplicación al mismo tiempo también recibirá dichas notificaciones.</p>  <p><img title="signalR_2" style="margin-right: auto; margin-left: auto; float: none; display: block;" alt="signalR_2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4150.signalR_2_thumb_0E9BF309.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4150.signalR_5F00_2_5F00_thumb_5F00_0E9BF309.gif" width="540" height="304" /></p>]]></content:encoded>
    </item>
    <item>
      <title>[Evento] One Tool To Rule Them All</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/evento-one-tool-to-rule-them-all</link>
      <pubDate>Mon, 29 Oct 2012 09:01:00 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/10/29/evento-one-tool-to-rule-them-all/</guid>
      <description><![CDATA[El jueves pasado se llev&oacute; a cabo una nueva charla t&eacute;cnica de MSDN en la cual tuve el...]]></description>
      <content:encoded><![CDATA[<p align="justify">El jueves pasado se llev&oacute; a cabo una nueva charla t&eacute;cnica de MSDN en la cual tuve el honor de participar como orador. En dicha sesi&oacute;n pudimos ver todas las novedades de Visual Studio 2012 y el Framework .NET 4.5, como por ejemplo desarrollo as&iacute;ncrono utilizando los operadores AWAIT y ASYNC, como desarrollar aplicaciones para Windows 8, las mejoras de ASP .NET 4.5 y como publicar aplicaciones hacia Windows Azure. Adem&aacute;s vimos una probada de las capacidades de ALM en este poderoso IDE.</p> <p align="justify">A continuaci&oacute;n&nbsp; les dejo unos links que podr&iacute;an interesarles:</p> <p align="justify">&nbsp;</p> <ul> <li> <div align="justify">Visual Studio 2012 Application Lifecycle Management Virtual Machine and Hands-on-Labs / Demo Scripts</div> </li> <li> <div align="justify"><a title="https://blogs.msdn.com/b/briankel/archive/2011/09/16/visual-studio-11-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx" href="https://blogs.msdn.com/b/briankel/archive/2011/09/16/visual-studio-11-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx">https://blogs.msdn.com/b/briankel/archive/2011/09/16/visual-studio-11-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx</a></div> </li> <li> <div align="justify">IntelliTrace Collection Plan Configurator</div> </li> <li> <div align="justify"><a title="https://intellitracecpconfig.codeplex.com/" href="https://intellitracecpconfig.codeplex.com/">https://intellitracecpconfig.codeplex.com/</a></div> </li> <li> <div align="justify">SQL Database Migration Wizard</div> </li> <li> <div align="justify"><a title="https://sqlazuremw.codeplex.com/" href="https://sqlazuremw.codeplex.com/">https://sqlazuremw.codeplex.com/</a></div> </li> <li> <div align="justify">TFS Preview</div> </li> <li> <div align="justify"><a href="https://tfspreview.com">https://tfspreview.com</a></div> </li> </ul> <p align="justify">Adicionalmente les dejo la presentaci&oacute;n para que puedan revisarla.</p> <p align="justify">&nbsp;</p> <p align="center"><iframe width="402" height="327" src="https://skydrive.live.com/embed?cid=C11F3857664E5F29&amp;resid=C11F3857664E5F29%211680&amp;authkey=ANG9OMLFYHYLqSk&amp;em=2" frameborder="0" scrolling="no"></iframe></p> <p align="justify">&nbsp;</p> <p align="justify">Finalmente, en el siguiente v&iacute;nculo podr&aacute;n descargar los ejemplos que les mostr&eacute;.</p> <p></p> <p align="center"><iframe width="98" height="120" src="https://skydrive.live.com/embed?cid=C11F3857664E5F29&amp;resid=C11F3857664E5F29%211682&amp;authkey=AKwVg0HVD4Aeplk" frameborder="0" scrolling="no"></iframe></p> <p align="justify">Cualquier duda y/o comentario, estoy a su disposici&oacute;n!</p>]]></content:encoded>
    </item>
    <item>
      <title>Introducción a SignalR</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/introduccin-a-signalr</link>
      <pubDate>Sat, 18 Aug 2012 15:08:00 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/08/18/introduccin-a-signalr/</guid>
      <description><![CDATA[SignalR es una biblioteca desarrollada por Damian Edwards y David Fowler, miembros del equipo de ASP...]]></description>
      <content:encoded><![CDATA[<p align="justify"><a href="https://signalr.net/" target="_blank">SignalR</a> es una biblioteca desarrollada por <a href="https://damianedwards.com/" target="_blank">Damian Edwards</a> y <a href="https://weblogs.asp.net/davidfowler/" target="_blank">David Fowler</a>, miembros del equipo de ASP .NET y de hecho el código fuente es Open Source y se encuentra en <a href="https://github.com/SignalR/SignalR" target="_blank">GitHub</a>. Próximamente SignalR será parte de las familia ASP .NET y es útil para crear aplicaciones que respondan en tiempo real.</p>  <p align="justify">SignalR provee una capa de abstracción sobre algunos de los transportes requeridos para hacer aplicaciones de tiempo real. Estas aplicaciones empiezan directamente sobre HTTP pero en caso de que se tenga soporte para Web Sockets, dicha conexión será promovida a que use Web Sockets.</p>  <p align="justify">Todas las conexiones son administradas por SignalR y permite transmitir los cambios a todos los clientes conectados como si fuese una sala de chat o en caso de que sea necesario podemos notificar a un cliente específico.</p>  <p align="justify">La conexión entre el cliente y el servidor es persistida, a diferencia de HTTP en donde se envía un request y al momento de recibir el response esta se destruye para posteriormente de cero. La capa de abstracción de SignalR simula esa persistencia a diferencia de las conexiones hechas con Web Sockets las cuales son verdaderamente persistentes.</p>  <p align="justify">La conexión entre el cliente y el servidor es persistida, a diferencia de HTTP en donde se hace una llamada se destruye y se empieza nuevamente. La capa de abstracción de SignalR da la sensación de que es persistente y las conexiones de Web Sockets son verdaderamente persistentes.</p>  <p align="justify">La capa de persistencia de SignalR negocia automáticamente los transportes e irá haciendo un “fallback” hasta encontrar una capa de transporte que él pueda usar. Por ejemplo:</p>  <p align="justify">SignalR primero comprobará si es soportado Web Sockets, en caso de que no utilizará “Server Sent Events” y así sucesivamente hasta llegar a “Long Polling” como una última alternativa.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1512.image_4BABF3B1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1512.image_5F00_4BABF3B1.png"><img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4657.image_thumb_42DBEB65.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4657.image_5F00_thumb_5F00_42DBEB65.png" width="753" height="428" /></a></p>  <p align="justify">SignalR nos da también la habilidad de hacer push desde el servidor hacia el cliente, por lo tanto cualquier código escrito en C# o VB en el servidor puede hacer un “callback” hacia el cliente y enviar información hacia los navegadores modernos. Además podemos escalar horizontalmente a miles de conexiones utilizando Service Bus, SQL Server y Redis.</p>  <p align="justify">Lo que nos ayuda a resolver SignalR es que en lugar de tener una aplicación que desde el lado del cliente periódicamente este preguntando al servidor si hay algo nuevo, lo cual es conocido como Polling.</p>  <p align="justify"><img title="Polling" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Polling" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4760.Polling_thumb_7CC74741.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4760.Polling_5F00_thumb_5F00_7CC74741.gif" width="753" height="428" /></p>  <p align="justify">&#160;</p>  <p align="justify">Para llegar a un escenario en donde el cliente pregunte al servidor si soportamos Web Sockets y en caso de que si, la conexión se hará mediante Web Sockets.</p>  <p align="justify"><img title="WebSockets" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="WebSockets" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1663.WebSockets_thumb_2F8E1FFC.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1663.WebSockets_5F00_thumb_5F00_2F8E1FFC.gif" width="753" height="428" /></p>  <h1>Manos a la obra!!!</h1>  <p align="justify">Después de una pequeña introducción acerca de esta grandiosa biblioteca, llegó por fin la hora de ver esto en acción. Para mostrar SignalR en funcionamiento voy a crear un pequeño sitio el cual poseerá una página llamada “Demo.html” y su estructura es la siguiente:</p>  <pre style="padding: 5px; border: 1px solid rgb(0, 0, 128); width: 650px; overflow: auto; min-height: 40px; background-color: rgb(251, 251, 251);"><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  1: &lt;!DOCTYPE html&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  2: &lt;html xmlns=&quot;<span style="color: rgb(139, 0, 0);">https://www.w3.org/1999/xhtml</span>&quot;&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  3: &lt;head&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  4:     &lt;title&gt;&lt;/title&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  5: &lt;/head&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  6: &lt;body&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  7:     &lt;p&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  8:         &lt;label <span style="color: rgb(0, 0, 255);">for</span>=&quot;<span style="color: rgb(139, 0, 0);">txtMensaje</span>&quot;&gt;Mensaje:&lt;/label&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  9:         &lt;input type=&quot;<span style="color: rgb(139, 0, 0);">text</span>&quot; id=&quot;<span style="color: rgb(139, 0, 0);">txtMensaje</span>&quot; /&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 10:     &lt;/p&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 11:     &lt;p&gt;&lt;input type=&quot;<span style="color: rgb(139, 0, 0);">button</span>&quot; id=&quot;<span style="color: rgb(139, 0, 0);">Enviar</span>&quot; value=&quot;<span style="color: rgb(139, 0, 0);">Enviar Mensaje</span>&quot; /&gt;&lt;/p&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 12: 
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 13:     &lt;div&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 14:         &lt;ul id=&quot;<span style="color: rgb(139, 0, 0);">mensajes</span>&quot;&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 15:         
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 16:         &lt;/ul&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 17:     &lt;/div&gt;    
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 18: &lt;/body&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 19: &lt;/html&gt;</pre></pre>

<p>Una vez realizado esto, necesitamos instalar SignalR lo cual podemos hacerlo facilmente gracias a NuGet:</p>

<ol>
  <li>Seleccionamos View –&gt;Other Windows –&gt;Package Manager Console</li>

  <li>Una vez ahí, ingresamos “Install-Package SignalR”</li>
</ol>

<p>&#160;</p>

<p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/5342.image_5DC4E053.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/5342.image_5F00_5DC4E053.png"><img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/6825.image_thumb_12358CCF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/6825.image_5F00_thumb_5F00_12358CCF.png" width="341" height="482" /></a>Luego de haber ejecutado lo anterior, veremos que se instalarán una serie de complementos necesarios para SignalR entre los cuales podemos ver que esta JQuery.</p>

<p align="justify">Vamos a crear una clase la cual llamaremos “MensajesHub.cs” la cual posee lo siguiente:</p>

<pre style="padding: 5px; border: 1px solid rgb(0, 0, 128); width: 650px; overflow: auto; min-height: 40px; background-color: rgb(251, 251, 251);"><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  1: using SignalR.Hubs;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  2: 
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  3: namespace SignalR_Sample
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  4: {
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  5:     <span style="color: rgb(0, 0, 255);">public</span> <span style="color: rgb(0, 0, 255);">class</span> MensajesHub : Hub
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  6:     {
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  7:         <span style="color: rgb(0, 0, 255);">public</span> <span style="color: rgb(0, 0, 255);">void</span> EnviarMensaje(string mensaje)
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  8:         {
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  9:             Clients.enviar(mensaje);
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 10:         }
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 11:     }
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 12: }</pre></pre>

<p align="justify">Donde podemos ver dos cosas interesantes, por una parte heredamos de la clase Hub la cual viene incluída en el namespace SignalR.Hubs. La clase Hubs provee un framework RPC de alto nivel sobre una conexión persistente (clase PersistentConnection). Por otra parte “Clients” es un objeto del tipo dynamic, el cual utilizamos para hacer la relación entre el lado del cliente y el lado del servidor. El ejemplo anterior básicamente lo que estamos hacienda es disponibilizar el método “EnviarMensaje” al cliente.</p>

<p>Luego agregamos lo siguiente al elemento &lt;head&gt; de nuestra página Demo.html:</p>

<pre style="padding: 5px; border: 1px solid rgb(0, 0, 128); width: 650px; overflow: auto; min-height: 40px; background-color: rgb(251, 251, 251);"><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  1: &lt;script src=&quot;<span style="color: rgb(139, 0, 0);">Scripts/jquery-1.6.4.min.js</span>&quot;&gt;&lt;/script&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  2: &lt;script src=&quot;<span style="color: rgb(139, 0, 0);">Scripts/jquery.signalR-0.5.2.min.js</span>&quot;&gt;&lt;/script&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  3: &lt;script src=&quot;<span style="color: rgb(139, 0, 0);">/signalr/hubs</span>&quot; type=&quot;<span style="color: rgb(139, 0, 0);">text/javascript</span>&quot;&gt;&lt;/script&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  4: &lt;script type=&quot;<span style="color: rgb(139, 0, 0);">text/javascript</span>&quot;&gt;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  5:     $(<span style="color: rgb(0, 0, 255);">function</span> () {
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  6:         <span style="color: rgb(0, 0, 255);">var</span> connection = $.connection.mensajesHub;
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  7: 
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);">  8:         connection.enviar = <span style="color: rgb(0, 0, 255);">function</span> (mensaje) {
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);">  9:             $('#mensajes').append('&lt;li&gt;' + mensaje + '&lt;/li&gt;');
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 10:         };
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 11: 
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 12:         $(&quot;<span style="color: rgb(139, 0, 0);">#Enviar</span>&quot;).click(<span style="color: rgb(0, 0, 255);">function</span> () {
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 13:             connection.enviarMensaje($('#txtMensaje').val());
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 14:             $('#txtMensaje').val(&quot;<span style="color: rgb(139, 0, 0);"></span>&quot;);
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 15:         });
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 16: 
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 17:         $.connection.hub.start();
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(255, 255, 255);"> 18:     });
</pre><pre style="margin: 0em; width: 100%; font-family: consolas,&quot;Courier New&quot;,courier,monospace; font-size: 12px; background-color: rgb(210, 210, 210);"> 19: &lt;/script&gt;</pre></pre>

<p align="justify">Una vez concluído nuestro ejemplo podemos abrir una o varias instancias de su navegador o navegadores de elección y podremos ver como los mensajes pueden ser intercambiados entre ellos.</p>

<p align="justify"><img title="Demo_SignalR" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Demo_SignalR" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/8510.Demo_SignalR_thumb_02797A03.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/8510.Demo_5F00_SignalR_5F00_thumb_5F00_02797A03.gif" width="753" height="428" /></p>

<p align="justify">Espero que esto haya sido de su utilidad, si desean descargar el fuente de este ejemplo pueden hacerlo <a href="https://sdrv.ms/TME72Z" target="_blank">aquí</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>[Evento] Optimizando la performance en la Web</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/evento-optimizando-la-performance-en-la-web</link>
      <pubDate>Wed, 06 Jun 2012 12:01:47 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/06/06/evento-optimizando-la-performance-en-la-web/</guid>
      <description><![CDATA[El jueves 31 de mayo junto con Alejandro Mihanovich tuve el honor de participar como orador en una...]]></description>
      <content:encoded><![CDATA[<p align="justify">El jueves 31 de mayo junto con Alejandro Mihanovich tuve el honor de participar como orador en una nueva jornada de las charlas técnicas de MSDN. En esta oportunidad conversamos sobre como podemos medir el rendimiento de nuestra aplicación Web y también que tácticas podemos tomar para mejorarlas.</p>  <p align="justify">Aquí les dejo la presentación que utilizamos en dicha sesión y en el transcurso de estos días iré publicando una serie de artículos relacionados con este tema.</p>  <p align="center"><iframe height="327" src="https://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;p2=1&amp;p3=SDC11F3857664E5F29!940&amp;p4=&amp;ak=!AA6mg71Ca0pai-Y&amp;kip=1" frameborder="0" width="402" scrolling="no"></iframe></p>]]></content:encoded>
    </item>
    <item>
      <title>Temas en SharePoint 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/temas-en-sharepoint-2010</link>
      <pubDate>Tue, 15 May 2012 20:43:19 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/05/15/temas-en-sharepoint-2010/</guid>
      <description><![CDATA[En SharePoint 2007 existía un modelo para la creación de temas el cual es diferente (por diseño) al...]]></description>
      <content:encoded><![CDATA[<p align="justify">En SharePoint 2007 existía un modelo para la creación de temas el cual es diferente (por diseño) al de SharePoint 2010. Temas en SharePoint 2007 utilizaban CSS e imágenes, mientras que en SharePoint 2010 se utilizan archivos con extensión <a href="https://www.fileinfo.com/extension/thmx" target="_blank">.thmx</a> los cuales son utilizados para definir temas de PowerPoint. Por lo cual la creación de temas en SharePoint 2010 es una labor relativamente sencilla.</p>  <p align="justify">Existe una buena cantidad de temas disponibles, los cuales pueden ser vistos en “Acciones del Sitio” –&gt; “Aspecto” –&gt; “Tema del Sitio”. Hay que tener en cuenta que en SharePoint Server, podemos personalizar el tema en el navegador. En SharePoint Foundation, esta funcionalidad no está disponible. Aquí hay un pequeño screenshot de como se ve está página en SharePoint Server:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/0245.1_33284A2C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/0245.1_5F00_33284A2C.png"><img title="1" style="display: inline; background-image: none;" border="0" alt="1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/8255.1_thumb_2A5841E0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/8255.1_5F00_thumb_5F00_2A5841E0.png" width="556" height="327" /></a></p>  <p align="justify">Para poder crear un tema podemos hacerlo de las siguientes maneras:</p>  <ul>   <li>     <div align="justify">Theme Builder</div>   </li>    <li>     <div align="justify">PowerPoint</div>   </li> </ul>  <p align="justify">En el caso de este artículo veremos la opción de Theme Builder, la cual puede ser descargada desde <a href="https://connect.microsoft.com/themebuilder" target="_blank">aquí</a>. En el cual tu puedes definir los diferentes colores que compondrán a tu tema o simplemente tomar uno existente y modificarlo a tu gusto:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/8244.2_64670EBF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/8244.2_5F00_64670EBF.png"><img title="2" style="display: inline; background-image: none;" border="0" alt="2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4540.2_thumb_540B9706.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4540.2_5F00_thumb_5F00_540B9706.png" width="443" height="313" /></a></p>  <p align="justify">Una vez guardado nuestro tema (en mi caso lo llamaré “Prueba”) tenemos varias formas de hacerle deploy hacia nuestro servidor SharePoint como por ejemplo:</p>  <ul>   <li>     <div align="justify">Subirla directamente hacia la librería de temas</div>   </li>    <li>     <div align="justify">ó, generar un WSP e instalar el tema como característica</div>   </li> </ul>  <p align="justify">Si ustedes desean subirla directamente hacia la librería de temas, simplemente navegamos a la siguiente URL: https://<em>tu-servidor</em>/_catalogs/theme/Forms/AllItems.aspx</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/7167.3_602D112D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/7167.3_5F00_602D112D.png"><img title="3" style="display: inline; background-image: none;" border="0" alt="3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3441.3_thumb_02A19FE9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3441.3_5F00_thumb_5F00_02A19FE9.png" width="543" height="325" /></a></p>  <p align="justify">Para hacer deploy mediante una característica, abrimos nuestro Visual Studio 2010 y creamos un proyecto tomando como base la imagen colocada aquí abajo:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1385.4_15E25688.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1385.4_5F00_15E25688.png"><img title="4" style="display: inline; background-image: none;" border="0" alt="4" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1768.4_thumb_260E1E81.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1768.4_5F00_thumb_5F00_260E1E81.png" width="518" height="332" /></a></p>  <p align="justify">En la siguiente ventana, cuando se nos solicite especificar que tipo de deploy haremos seleccionamos la opción “Farm Solution”:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4428.5_524AA565.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4428.5_5F00_524AA565.png"><img title="5" style="display: inline; background-image: none;" border="0" alt="5" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2043.5_thumb_5099D991.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2043.5_5F00_thumb_5F00_5099D991.png" width="418" height="302" /></a></p>  <p align="justify">Cuando creemos nuestro proyecto veremos en la Solution Explorer, un item llamado “Module1” el cual lo renombraremos como “ModuloTema”&#160; y al expandirlo veremos un archivo llamado “Sample.txt” el cual simplemente eliminaremos.</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4186.6_559C1740.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4186.6_5F00_559C1740.png"><img title="6" style="display: inline; background-image: none;" border="0" alt="6" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2352.6_thumb_7810A5FB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2352.6_5F00_thumb_5F00_7810A5FB.png" width="384" height="227" /></a></p>  <p align="justify">Ahora para incorporar nuestro archivo .thmx haremos clic con el botón derecho del mouse sobre el elemento “ModuloTema” y seleccionamos Add –-&gt; Existing Item y escogemos nuestro archivo .thmx con lo cual nuestro “ModuloTema” quedará de la siguiente manera:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/6646.7_6B364FDD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/6646.7_5F00_6B364FDD.png"><img title="7" style="display: inline; background-image: none;" border="0" alt="7" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2437.7_thumb_29BB9D84.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2437.7_5F00_thumb_5F00_29BB9D84.png" width="201" height="197" /></a></p>  <p align="justify">Ahora procederemos a editar nuestro archivo Elements.xml y deberá quedar de la siguiente manera:</p>  <blockquote>   <p>     <br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;      <br />&lt;Elements xmlns=&quot;https://schemas.microsoft.com/sharepoint/&quot;&gt;      <br />&#160;&#160;&#160;&#160;&#160; &lt;Module Name=&quot;Mi Tema&quot; Url=&quot;_catalogs/theme&quot;&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;File Path=&quot;ModuloTema\Prueba.thmx&quot; Url=&quot;Prueba.thmx&quot; /&gt;      <br />&#160;&#160;&#160;&#160;&#160; &lt;/Module&gt;      <br />&lt;/Elements&gt;      <br /></p> </blockquote>  <p align="justify">Una vez que hacemos deploy de nuestra solución y acceder nuevamente a los temas del sitio (recuerden para acceder a esta página es mediante “Acciones del Sitio” –&gt; “Aspecto” –&gt; “Tema del Sitio”)</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1447.8_4F451AE5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1447.8_5F00_4F451AE5.png"><img title="8" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="8" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/6153.8_thumb_5F70E2DE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/6153.8_5F00_thumb_5F00_5F70E2DE.png" width="494" height="292" /></a></p>  <p>Si presionamos el botón “Aplicar” podremos ver nuestro tema, el cual en mi caso no es muy bonito que digamos <img class="wlEmoticon wlEmoticon-smilewithtongueout" style="style" alt="Smile with tongue out" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/0358.wlEmoticon-smilewithtongueout_048E2D4B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/0358.wlEmoticon_2D00_smilewithtongueout_5F00_048E2D4B.png" /></p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3808.9_2EFA5E68.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3808.9_5F00_2EFA5E68.png"><img title="9" style="display: inline; background-image: none;" border="0" alt="9" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3414.9_thumb_3B1BD88F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3414.9_5F00_thumb_5F00_3B1BD88F.png" width="473" height="283" /></a></p>  <p>Si desean descargar el código fuente del ejemplo pueden hacerlo desde <a href="https://cid-c11f3857664e5f29.office.live.com/self.aspx/.Public/Ejemplo%20Tema.rar" target="_blank">aquí</a>.</p>  <p>Espero que este artículo haya sido de su utilidad, hasta la próxima <img class="wlEmoticon wlEmoticon-smile" style="style" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4162.wlEmoticon-smile_194FFFFE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4162.wlEmoticon_2D00_smile_5F00_194FFFFE.png" /></p>]]></content:encoded>
    </item>
    <item>
      <title>Utilizando los mensajes de progreso modales [Tip UI #4]</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/utilizando-los-mensajes-de-progreso-modales-tip-ui-4</link>
      <pubDate>Tue, 15 May 2012 20:33:55 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/05/15/utilizando-los-mensajes-de-progreso-modales-tip-ui-4/</guid>
      <description><![CDATA[Como hemos podido ver a lo largo de esta serie de artículos, SharePoint 2010 viene con un framework...]]></description>
      <content:encoded><![CDATA[<p align="justify">Como hemos podido ver a lo largo de esta serie de artículos, SharePoint 2010 viene con un framework de interfaz de usuario que te permite fácilmente crear experiencias de usuario muy atractivas. Mientras estamos desarrollando nuestras aplicaciones, uno de los desafíos que nos enfrentamos es comunicar al usuario que estamos ejecutando un proceso de larga duración.</p>  <p align="justify">En uno de los artículos que publique, les mostré como pueden hacer uso de la <a href="https://aiturralde.com/2010/11/15/utilizando-el-area-de-notificacion-de-sharepoint-2010-tip-ui-1/" target="_blank">área de notificación</a> para comunicar ciertas cosas a nuestros usuarios, teniendo como resultado lo siguiente:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/8032.1_4C8F7B76.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/8032.1_5F00_4C8F7B76.png"><img title="1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3326.1_thumb_442BA61F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3326.1_5F00_thumb_5F00_442BA61F.png" width="244" height="84" /></a></p>  <p align="justify">Si ustedes revisan el artículo que les mencioné, existe un parámetro booleano que nos permite hacer que nuestro mensaje del área de notificación sea permanente para hacerlo visible mientras dure nuestra operación, y luego esconderlo cuando termine la operación.</p>  <p align="justify">Sin embargo al utilizar el área de notificación para mostrar mensajes de operaciones de larga duración, existen ciertos inconvenientes:</p>  <ol>   <li>     <div align="justify">No puedes actualizar fácilmente el mensaje desplegado en la notificación. Para comunicar el progreso de una operación de larga duración tienes que esconder la notificación anterior y reemplazarla por la nueva.</div>   </li>    <li>     <div align="justify">Los mensajes en el área de notificación no bloquean la interfaz usuaria por lo cual, el usuario podría seleccionar alguna otra opción de la pantalla generando un conflicto con la operación que ya está siendo ejecutada.</div>   </li> </ol>  <p align="justify">Por suerte el framework de interfaz usuaria de SharePoint 2010 tiene una clase javascript llamada <a href="https://msdn.microsoft.com/en-us/library/ff408140.aspx" target="_blank">SP.UI.ModalDialog.showWaitScreenWithNoClose</a> la cual despliega mensajes modales como el siguiente:</p>  <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4403.2_54C3A10D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4403.2_5F00_54C3A10D.png"><img title="2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3225.2_thumb_12DCBBBF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3225.2_5F00_thumb_5F00_12DCBBBF.png" width="426" height="211" /></a></p>  <p align="justify">La función showWaitScreenWithNoClose, acepta los siguientes cuatro parámetros:</p>  <div align="justify">   <ul>     <li>El título de la ventana modal </li>      <li>El mensaje a desplegar que puede ser HTML </li>      <li>El alto de la ventana </li>      <li>El ancho de la ventana </li>   </ul> </div>  <p align="justify">Veamos el siguiente ejemplo:</p>  <blockquote>   <p>var ventanaModal = SP.UI.ModalDialog.showWaitScreenWithNoClose('Mostrando contenido', 'Estoy ejecutando una operación muy larga!', 76, 330);      <br /></p> </blockquote>  <p>Con lo que obtendríamos lo siguiente:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1323.3_1EFE35E6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1323.3_5F00_1EFE35E6.png"><img title="3" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/7607.3_thumb_43AF4D5D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/7607.3_5F00_thumb_5F00_43AF4D5D.png" width="466" height="227" /></a></p>  <p align="justify">Si nosotros quisieramos actualizar la operación, simplemente tendríamos que agregar la siguiente línea:</p>  <blockquote>   <p>ventanaModal.get_html().getElementsByTagName('TD')[1].innerHTML = 'Ya está terminando la operación...';      <br /></p> </blockquote>  <p>Obteniendo lo siguiente:</p>  <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/6507.4_14112ED1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/6507.4_5F00_14112ED1.png"><img title="4" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="4" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/7288.4_thumb_5FFC8F7D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/7288.4_5F00_thumb_5F00_5FFC8F7D.png" width="458" height="225" /></a></p>  <p>Como pudieron ver la línea anterior no es un método estándar para actualizar el mensaje mediante la API. Por lo cual podría variar en actualizaciones posteriores, asi que tengan cuidado al usarlo</p>  <p align="justify">Finalmente para cerrar el mensaje simplemente agregamos la línea</p>  <blockquote>   <p>ventanaModal.close();      <br /></p> </blockquote>  <p>Como pudieron ver a lo largo de esta serie de artículos, el nuevo framework de UI de SharePoint 2010 nos provee muchas funcionalidad muy atractivas para nuestros sitios.</p>  <p align="justify">A continuación les dejo un listado con todos los artículos con tips de la UI que publiqué:</p>  <ul>   <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-el-225-rea-de-notificaci-243-n-de-sharepoint-2010-tip-ui-1.aspx" target="_blank">Utilizando el área de notificación de SharePoint 2010 [Tip UI # 1]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-la-barra-de-estado-de-sharepoint-2010-tip-ui-2.aspx" target="_blank">Utilizando la barra de estado de SharePoint 2010 [Tip UI # 2]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-los-modal-dialogs-de-sharepoint-2010-tip-ui-3.aspx" target="_blank">Utilizando los Modal Dialogs de SharePoint 2010 [Tip UI # 3]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-los-mensajes-de-progreso-modales-tip-ui-4.aspx" target="_blank">Utilizando los mensajes de progreso modales [Tip UI #4]</a></p>   </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Utilizando los Modal Dialogs de SharePoint 2010 [Tip UI # 3]</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/utilizando-los-modal-dialogs-de-sharepoint-2010-tip-ui-3</link>
      <pubDate>Tue, 15 May 2012 20:27:03 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/05/15/utilizando-los-modal-dialogs-de-sharepoint-2010-tip-ui-3/</guid>
      <description><![CDATA[Siguiendo con los tips acerca de como manejar la nueva interfaz gráfica de SharePoint 2010 en esta...]]></description>
      <content:encoded><![CDATA[<p align="justify">Siguiendo con los tips acerca de como manejar la nueva interfaz gráfica de SharePoint 2010 en esta ocasión veremos los modal dialogs o diálogos. Si no conoces que es esto, te dejo la siguiente imagen</p>  <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3716.1_7C80830D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3716.1_5F00_7C80830D.png"><img title="1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4212.1_thumb_06657479.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4212.1_5F00_thumb_5F00_06657479.png" width="347" height="176" /></a></p>  <p align="justify">Lo genial de este modal dialog es que podemos manejar todo desde JavaScript, desde su apertura hasta el cierre de el (detectando si fue por una acción de <strong>Aceptar</strong> o <strong>Cancelar</strong>).</p>  <p align="justify">Ahora bien, ¿cómo abrimos un nuevo diálogo? Simple, llamamos a la función <a href="https://msdn.microsoft.com/en-us/library/ff410058.aspx" target="_blank">SP.UI.ModalDialog.showModalDialog</a> la cual acepta como parámetro las opciones de como será abierta nuestro diálogo. Si desean mayor información con respecto a las opciones que podemos utilizar, les recomiendo que vean el siguiente <a href="https://msdn.microsoft.com/en-us/library/ff411351.aspx" target="_blank">link</a>.</p>  <p align="justify">Veamos la apertura de un diálogo que se direccione a una página que poseo en mi sitio SharePoint, basta ejecutar el siguiente código:</p>  <blockquote>   <p>function crearDialogo()      <br />{       <br />var options = {       <br />url: '/SitePages/Ejemplo.aspx',       <br />title: 'Diálogo de Ejemplo',       <br />allowMaximize: true,       <br />showClose: true,       <br />width: 800,       <br />height: 600,       <br />dialogReturnValueCallback: CallbackCerrar      <br />};</p>    <p>SP.UI.ModalDialog.showModalDialog(options);      <br />}&#160; </p> </blockquote>  <p align="justify">Con lo cual obtendremos el siguiente resultado:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2627.2_0520DB9A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2627.2_5F00_0520DB9A.png"><img title="2" style="display: inline; background-image: none;" border="0" alt="2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1050.2_thumb_18CDC52E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1050.2_5F00_thumb_5F00_18CDC52E.png" width="315" height="236" /></a></p>  <p align="justify">Como podrán darse cuenta, en las opciones de la función JavaScript especifiqué un método llamado “CallbackCerrar” su propósito es que al momento de cerrar el diálogo podamos obtener información de que fue lo que ocurrió ya sea el usuario presionó el botón Aceptar o el botón Cancelar.</p>  <blockquote>   <p>     <br />function CallbackCerrar(dialogResult, returnValue)       <br />{       <br />if(dialogResult == SP.UI.DialogResult.OK)       <br />{       <br />SP.UI.Notify.addNotification('Presionaste OK o Guardar');       <br />document.title = returnValue;       <br />}</p>    <p>if(dialogResult == SP.UI.DialogResult.cancel)      <br />SP.UI.Notify.addNotification('Presionaste Cancelar!');       <br />}&#160; <br /></p> </blockquote>  <p align="justify">Ahora viene lo entretenido, ¿Cómo hacemos que desde nuestra ventana modal podamos notificar a la ventana padre que acción sucedió en ella? Solamente tenemos que llamar a la función <a href="https://msdn.microsoft.com/en-us/library/ff409682.aspx" target="_blank">SP.UI.ModalDialog.commonModalDialogClose</a> el cual acepta dos parámetros, el primero es una enumeración las posibles acciones invocadas y el segundo parámetro es un valor de retorno definido por el usuario. Si desean mayor información con respecto a la enumeración, sigan el siguiente <a href="https://msdn.microsoft.com/en-us/library/ff409060(office.14).aspx" target="_blank">link</a></p>  <p align="justify">A nuestro diálogo anterior le agregaremos dos botones: Aceptar y Cancelar, los cuales invocarían la función “fnAceptar” y “fnCancelar” respectivamente.</p>  <blockquote>   <p>     <br />&lt;input type=&quot;button&quot; value=&quot;Aceptar&quot; onclick=&quot;javascript:fnAceptar();&quot; /&gt;       <br />&lt;input type=&quot;button&quot; value=&quot;Cancelar&quot; onclick=&quot;javascript:fnCancelar();&quot; /&gt;&#160; <br /></p> </blockquote>  <blockquote>   <p>function fnAceptar() {      <br />SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, &quot;El usuario presiono aceptar&quot;);       <br />}</p>    <p>function fnCancelar() {      <br />SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.Cancel, &quot;El usuario presiono cancelar&quot;)       <br />}&#160; <br /></p> </blockquote>  <p>Con lo cual obtendríamos lo siguiente:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/7180.3_17F55F44.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/7180.3_5F00_17F55F44.png"><img title="3" style="display: inline; background-image: none;" border="0" alt="3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/5857.3_thumb_21DA50AF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/5857.3_5F00_thumb_5F00_21DA50AF.png" width="329" height="242" /></a></p>  <p align="justify">Al presionar el botón aceptar, veremos como usando el <a href="https://aiturralde.com/2010/11/15/utilizando-el-area-de-notificacion-de-sharepoint-2010-tip-ui-1/" target="_blank">área de notificación</a> nos aparece un mensaje diciendo “Presionaste OK o Guardar”. Mientras que si presionamos el botón Cancelar veremos el mensaje “El usuario presiono cancelar”.</p>  <div align="justify">&#160; <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/0552.4_27B4F448.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/0552.4_5F00_27B4F448.png"><img title="4" style="display: inline; background-image: none;" border="0" alt="4" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4265.4_thumb_26DC8E5E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4265.4_5F00_thumb_5F00_26DC8E5E.png" width="197" height="60" /></a>    <br />    <p align="justify">ó</p>    <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2625.5_53F17B2C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2625.5_5F00_53F17B2C.png"><img title="5" style="display: inline; background-image: none;" border="0" alt="5" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2210.5_thumb_1A023840.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2210.5_5F00_thumb_5F00_1A023840.png" width="174" height="56" /></a></p>    <p align="justify">respectivamente</p> </div>  <p align="justify">Como puedes ver, manejar las ventanas modales de SharePoint 2010 no es nada complejo simplemente son unas funciones JavaScript y unos pocos parámetros <img class="wlEmoticon wlEmoticon-winkingsmile" style="style" alt="Winking smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/2781.wlEmoticon-winkingsmile_4B2172E0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/2781.wlEmoticon_2D00_winkingsmile_5F00_4B2172E0.png" />! Espero que este artículo haya sido de tu utilidad, hasta la próxima!</p>   <p align="justify">A continuación les dejo un listado con todos los artículos con tips de la UI que publiqué:</p>  <ul>   <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-el-225-rea-de-notificaci-243-n-de-sharepoint-2010-tip-ui-1.aspx" target="_blank">Utilizando el área de notificación de SharePoint 2010 [Tip UI # 1]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-la-barra-de-estado-de-sharepoint-2010-tip-ui-2.aspx" target="_blank">Utilizando la barra de estado de SharePoint 2010 [Tip UI # 2]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-los-modal-dialogs-de-sharepoint-2010-tip-ui-3.aspx" target="_blank">Utilizando los Modal Dialogs de SharePoint 2010 [Tip UI # 3]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-los-mensajes-de-progreso-modales-tip-ui-4.aspx" target="_blank">Utilizando los mensajes de progreso modales [Tip UI #4]</a></p>   </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Utilizando la barra de estado de SharePoint 2010 [Tip UI # 2]</title>
      <link>https://docs.microsoft.com/archive/blogs/aiturralde/utilizando-la-barra-de-estado-de-sharepoint-2010-tip-ui-2</link>
      <pubDate>Tue, 15 May 2012 20:21:03 GMT</pubDate>
      <dc:creator><![CDATA[Andres Iturralde]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aiturralde/2012/05/15/utilizando-la-barra-de-estado-de-sharepoint-2010-tip-ui-2/</guid>
      <description><![CDATA[Como vimos en el artículo anterior, SharePoint 2010 nos permite fácilmente hacer uso de las nuevas...]]></description>
      <content:encoded><![CDATA[<p align="justify">Como vimos en el artículo <a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-el-225-rea-de-notificaci-243-n-de-sharepoint-2010-tip-ui-1.aspx" target="_blank">anterior</a>, SharePoint 2010 nos permite fácilmente hacer uso de las nuevas bondades de la interfaz gráfica con solo utilizar unas simples llamadas a funciones de JavaScript.</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/1070.1_07A82563.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/1070.1_5F00_07A82563.png"><img title="1" style="display: inline; background-image: none;" border="0" alt="1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3527.1_thumb_3EA2039C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3527.1_5F00_thumb_5F00_3EA2039C.png" width="448" height="320" /></a></p>  <h4>Barra de Estado</h4>  <p align="justify">Para poder hacer uso de esta función basta con simplemente llamar a la función: “SP.UI.Status.addStatus”, la cual acepta tres parámetros:</p>  <ul>   <li>     <div align="justify">El primero, es el título del estado</div>   </li>    <li>     <div align="justify">El segundo, es una string que acepta HTML en el cual irá la descripción del estado</div>   </li>    <li>     <div align="justify">El tercero, es un booleano indicando si el mensaje debe ser desplegado como el primero o no.</div>   </li> </ul>  <p align="justify">Ahora veamos un simple ejemplo:</p>  <blockquote>   <p>var sid = SP.UI.Status.addStatus('Mi estado:', 'Este es un &lt;b&gt;ejemplo&lt;/b&gt;', true); </p> </blockquote>  <p align="justify">Con el cual obtendríamos:</p>  <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/3286.2_315B7A89.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/3286.2_5F00_315B7A89.png"><img title="2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4760.2_thumb_2963D827.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4760.2_5F00_thumb_5F00_2963D827.png" width="244" height="83" /></a></p>  <p align="justify">Si se dan cuenta, esta barra muestra un color un poco azulado.. ¿cómo podemos cambiar el color de la barra?. Simplemente llamamos a la función JavaScript SP.UI.Status.setStatusPriColor, el cual acepta dos parámetros, el primero es el ID de la barra de estado a la cual le cambiaremos el color, y el segundo es el color que asignaremos. Tomando la barra que vimos anteriormente, el código sería el siguiente:</p>  <blockquote>   <p>     <br />var sid = SP.UI.Status.addStatus('Mi estado:', 'Este es un &lt;b&gt;ejemplo&lt;/b&gt;', true);       <br />SP.UI.Status.setStatusPriColor(sid, 'red');&#160;&#160; </p>    <p>&#160;</p> </blockquote>  <p>&#160; Lo cual quedaría así:</p>  <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/4263.3_01512908.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/4263.3_5F00_01512908.png"><img title="3" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/5241.3_thumb_327063A8.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/5241.3_5F00_thumb_5F00_327063A8.png" width="244" height="83" /></a></p>  <p>Espero que este tip haya sido de su utilidad, en un próximo artículo les mostraré como hacer uso del Ribbon. Hasta la próxima <img class="wlEmoticon wlEmoticon-smile" style="style" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/46/07/metablogapi/7888.wlEmoticon-smile_312BCAC9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-07-metablogapi/7888.wlEmoticon_2D00_smile_5F00_312BCAC9.png" />!</p>   <p align="justify">A continuación les dejo un listado con todos los artículos con tips de la UI que publiqué:</p>  <ul>   <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-el-225-rea-de-notificaci-243-n-de-sharepoint-2010-tip-ui-1.aspx" target="_blank">Utilizando el área de notificación de SharePoint 2010 [Tip UI # 1]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-la-barra-de-estado-de-sharepoint-2010-tip-ui-2.aspx" target="_blank">Utilizando la barra de estado de SharePoint 2010 [Tip UI # 2]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-los-modal-dialogs-de-sharepoint-2010-tip-ui-3.aspx" target="_blank">Utilizando los Modal Dialogs de SharePoint 2010 [Tip UI # 3]</a></p>   </li>    <li>     <p><a href="https://blogs.msdn.com/b/aiturralde/archive/2012/05/15/utilizando-los-mensajes-de-progreso-modales-tip-ui-4.aspx" target="_blank">Utilizando los mensajes de progreso modales [Tip UI #4]</a></p>   </li> </ul>]]></content:encoded>
    </item>
  </channel>
</rss>