<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0UFR3k_eyp7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100</id><updated>2012-01-12T16:13:36.743+01:00</updated><category term="C#" /><category term="Windows Phone" /><category term="Office 365" /><category term="javascript" /><category term="Designer" /><category term="SQL Server" /><category term="MOSS" /><category term="Otros" /><category term="SharePoint 2010" /><category term="IIS" /><category term="Azure" /><category term="WSS" /><category term="Silverlight" /><category term="Configuración" /><title>Developing is painful (por Er Chan)</title><subtitle type="html">Si lees algo en este blog que no sabías eres, oficialmente, el último en enterarte.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://developingispainful.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jose Sanchez</name><uri>https://profiles.google.com/107240685504527394203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-JrtB_B7TnGw/AAAAAAAAAAI/AAAAAAAAAAA/h0vr9ElEE20/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DevelopingIsPainfulporErChan" /><feedburner:info uri="developingispainfulporerchan" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>35.405636</geo:lat><geo:long>-80.638237</geo:long><entry gd:etag="W/&quot;C0UFR3k-eip7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-9097956498774376961</id><published>2012-01-12T16:13:00.000+01:00</published><updated>2012-01-12T16:13:36.752+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T16:13:36.752+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Sobre Windows Phone 7 y la autenticación con SharePoint</title><content type="html">Conectar el teléfono a nuestro entorno de SharePoint era mi proyecto de navidad, y me llevó un rato... Al final conseguí hacerlo así que he pensado en compartir mi alegría. Además, he leído un montón de blogs sobre el tema &lt;strike&gt;¿todos los que hay?&lt;/strike&gt; y quería aportar mi granito de arena.&lt;br /&gt;
&lt;br /&gt;
Vamos al asunto. Me he creado una clase llamada SPAuthBridge partiend del código de la SDK que puede ser usada para realizar las conexiones con el servidor de SharePoint.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;using System;
using System.IO;
using System.Net;
using System.Text;

namespace PhoneUtils.Code
{
    public class SPAuthBridge
    {
        #region Properties
        public CookieContainer cookieJar = new CookieContainer();

        string SiteUrl, User;
        string Password; //This should be securestring, but I don't think it's available in WP7
        #endregion

        #region Constructors
        public SPAuthBridge(string SiteUrl, string User, string Password)
        {
            this.SiteUrl = SiteUrl;
            this.User = User;
            this.Password = Password;
        }
        #endregion

        #region Public Methods
        public void Authenticate()
        {
            try
            {
                if (string.IsNullOrEmpty(SiteUrl)) throw new ArgumentOutOfRangeException("The SPAuthBridge was not properly initialized");

                System.Uri authServiceUri = new Uri(string.Format("{0}/_vti_bin/authentication.asmx", SiteUrl));

                HttpWebRequest spAuthReq = HttpWebRequest.Create(authServiceUri) as HttpWebRequest;
                spAuthReq.CookieContainer = cookieJar;
                spAuthReq.Headers["SOAPAction"] = "http://schemas.microsoft.com/sharepoint/soap/Login";
                spAuthReq.ContentType = "text/xml; charset=utf-8";
                spAuthReq.Method = "POST";

                //add the soap message to the request
                spAuthReq.BeginGetRequestStream(new AsyncCallback(spAuthReqCallBack), spAuthReq);
            }
            catch
            {
                TriggerOnAuthenticated(false);
            }
        }
        #endregion

        #region Private Methods
        private void spAuthReqCallBack(IAsyncResult asyncResult)
        {
            string envelope =
                    @"&amp;lt;?xml version=""1.0"" encoding=""utf-8""?&amp;gt;
                    &amp;lt;soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""&amp;gt;
                      &amp;lt;soap:Body&amp;gt;
                        &amp;lt;Login xmlns=""http://schemas.microsoft.com/sharepoint/soap/""&amp;gt;
                          &amp;lt;username&amp;gt;{0}&amp;lt;/username&amp;gt;
                          &amp;lt;password&amp;gt;{1}&amp;lt;/password&amp;gt;
                        &amp;lt;/Login&amp;gt;
                      &amp;lt;/soap:Body&amp;gt;
                    &amp;lt;/soap:Envelope&amp;gt;";

            UTF8Encoding encoding = new UTF8Encoding();
            HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
            Stream _body = request.EndGetRequestStream(asyncResult);
            envelope = string.Format(envelope, User, Password);
            byte[] formBytes = encoding.GetBytes(envelope);

            _body.Write(formBytes, 0, formBytes.Length);
            _body.Close();

            request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);
        }

        private void ResponseCallback(IAsyncResult asyncResult)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
                Stream content = response.GetResponseStream();

                if (request != null &amp;amp;&amp;amp; response != null)
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (StreamReader reader = new StreamReader(content))
                        {
                            //Put debugging code here
                            string _responseString = reader.ReadToEnd();
                            reader.Close();
                        }
                    }
                }

                //authentication complete
                TriggerOnAuthenticated(true);
            }
            catch
            {
                TriggerOnAuthenticated(false);
            }
        }
        #endregion

        #region Events
        public delegate void OnAuthenticatedHandler(bool Success);

        public event OnAuthenticatedHandler OnAuthenticated;

        protected virtual void TriggerOnAuthenticated(bool Success)
        {
            if (OnAuthenticated != null)
                OnAuthenticated(Success);
        }
        #endregion
    }
}&lt;/pre&gt;
&lt;br /&gt;
La manera de usar esto es bastante simple, creas el objeto SPAuthBridge y, llamas al método Authenticate y listo, algo así:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;        StratexWP7SoapClient StratexWP7 = new StratexWP7SoapClient(); //This is my web service
        SPAuthBridge SharePointAuth;

        public MainPage()
        {
            InitializeComponent();

            (...)

            SharePointAuth = new SPAuthBridge(SiteUrl, Username, Password);
            SharePointAuth.OnAuthenticated += new SPAuthBridge.OnAuthenticatedHandler(SharePointAuth_OnAuthenticated);

            if (!string.IsNullOrEmpty(Password))
                SharePointAuth.Authenticate();
            else
                MessageBox.Show("The application should be configured before use.");
        }

        void SharePointAuth_OnAuthenticated(bool Success)
        {
            if (!Success)
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =&amp;gt;
                    { MessageBox.Show("There was an error on the authentication procedure. Please check the configuration."); });

                return;
            }

            StratexWP7.CookieContainer = SharePointAuth.cookieJar; //This is all you have to do to connect your web service. \m/ O.O \m/

            HookEvents();

            RequestData();
        }&lt;/pre&gt;
&lt;br /&gt;
Es precioso &lt;strike&gt;cuando funciona…&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh3.ggpht.com/-cGYJ3dZ0iyQ/Tw7sVAZc3bI/AAAAAAAAADo/ErxZf2x4OX8/s1600-h/clip_image002%25255B8%25255D.jpg"&gt;&lt;img alt="clip_image002" height="240" src="http://lh6.ggpht.com/-hCZ2YUJIm14/Tw7sWEzjmWI/AAAAAAAAADw/g6jUfBf1F0I/clip_image002_thumb%25255B3%25255D.jpg?imgmax=800" style="display: inline;" title="clip_image002" width="128" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/-QfAu9P3jnYA/Tw7sXPKN7HI/AAAAAAAAAD4/hxPYSS4fuEE/s1600-h/clip_image002%25255B4%25255D%25255B5%25255D.jpg"&gt;&lt;img alt="clip_image002[4]" height="240" src="http://lh6.ggpht.com/-aU3xq8Po8wM/Tw7sYBsDaOI/AAAAAAAAAEA/7-JdVZ-zCSE/clip_image002%25255B4%25255D_thumb%25255B3%25255D.jpg?imgmax=800" style="display: inline;" title="clip_image002[4]" width="126" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: right;"&gt;
(Por cierto, las gráficas son de &lt;a href="http://blog.amcharts.com/2010/11/amcharts-quick-charts-in-windows-phone.html"&gt;AmCharts&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-9097956498774376961?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=zDj7TO7Yhe8:GpH7UYMcmRE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=zDj7TO7Yhe8:GpH7UYMcmRE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=zDj7TO7Yhe8:GpH7UYMcmRE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=zDj7TO7Yhe8:GpH7UYMcmRE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=zDj7TO7Yhe8:GpH7UYMcmRE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/zDj7TO7Yhe8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/9097956498774376961/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=9097956498774376961" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/9097956498774376961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/9097956498774376961?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/zDj7TO7Yhe8/sobre-windows-phone-7-y-la.html" title="Sobre Windows Phone 7 y la autenticación con SharePoint" /><author><name>Jose Sanchez</name><uri>https://profiles.google.com/107240685504527394203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-JrtB_B7TnGw/AAAAAAAAAAI/AAAAAAAAAAA/h0vr9ElEE20/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-hCZ2YUJIm14/Tw7sWEzjmWI/AAAAAAAAADw/g6jUfBf1F0I/s72-c/clip_image002_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2012/01/sobre-windows-phone-7-y-la.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMNQnw8eyp7ImA9WhRVEkU.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-4214207813970741191</id><published>2012-01-11T12:48:00.000+01:00</published><updated>2012-01-11T12:48:13.273+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T12:48:13.273+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Las Barras de Desplazamiento aparecen en SharePoint 2010 en los Silverlights</title><content type="html">Si, cada vez que fijas la altura o la anchura del web part te muestra las horribles barras de desplazamiento.
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://developingispainful.blogspot.com/2011/08/ocultando-las-scrollbars-en-los-web.html" target="_blank"&gt;Esta no es la primera vez que trato me encuentro con esto&lt;/a&gt;, pero creo que esta vez lo he resuelto para siempre &lt;strike&gt;o por lo menos hasta la nueva versión de SharePoint el año que viene…&lt;/strike&gt;. El problema estaba en la forma en que estaba creando el objeto Silverlight. Estaba usando estilos CSS en línea. Era algo así:
&lt;br /&gt;
&lt;blockquote&gt;
&amp;lt;object id='silverlightHost' style='height: 600px; width: 350px; margin: 0; padding: 0;' data='data:application/x-silverlight-2,' type='application/x-silverlight-2'&amp;gt;&lt;/blockquote&gt;
&lt;br /&gt;
Después de un millón de experimentos basados en la técnica del ensayo / error &lt;strike&gt;no pienses jamás que soy capáz de crear un Web Part Silverlight de los OOTB de SharePoint 2010 y copiar el código&lt;/strike&gt; he cambiado la primera línea del objeto a:&lt;br /&gt;
&lt;blockquote&gt;
&amp;lt;object id='silverlightHost' height='600px' width='350px' data='data:application/x-silverlight-2,' type='application/x-silverlight-2' style='display:block' class='ms-dlgDisable'&amp;gt;&lt;/blockquote&gt;
Y eso resuelve el problema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-4214207813970741191?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=h_DtN87qT6U:KziXHMxqn_8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=h_DtN87qT6U:KziXHMxqn_8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=h_DtN87qT6U:KziXHMxqn_8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=h_DtN87qT6U:KziXHMxqn_8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=h_DtN87qT6U:KziXHMxqn_8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/h_DtN87qT6U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/4214207813970741191/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=4214207813970741191" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4214207813970741191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4214207813970741191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/h_DtN87qT6U/las-barras-de-desplazamiento-aparecen.html" title="Las Barras de Desplazamiento aparecen en SharePoint 2010 en los Silverlights" /><author><name>Jose Sanchez</name><uri>https://profiles.google.com/107240685504527394203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-JrtB_B7TnGw/AAAAAAAAAAI/AAAAAAAAAAA/h0vr9ElEE20/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2012/01/las-barras-de-desplazamiento-aparecen.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08NQ3g-fCp7ImA9WhRWGEs.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-4856714734177781335</id><published>2012-01-06T15:57:00.002+01:00</published><updated>2012-01-06T15:58:12.654+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-06T15:58:12.654+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Creando Eventos en Silverlight</title><content type="html">He leído que es imposible en un par de sitios. No se si lo sería en las versiones anteriores pero, por lo menos desde Silverlight 3 se puede… y digo más… es fácil.&lt;br /&gt;
&lt;br /&gt;
Este evento lo uso para comprobar cuándo se ha movido un objeto.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;        #region Events
        public delegate void PositionChangeHandler(Object Sender);

        public event PositionChangeHandler PositionChangedEvent;

        protected virtual void OnPositionChanged()
        {
            if (PositionChangedEvent != null)
                PositionChangedEvent(this);
        }
        #endregion&lt;/pre&gt;
&lt;br /&gt;
Y entonces en la función en donde actualizo la posición del objeto llamo a:&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;OnPositionChanged();&lt;/pre&gt;
&lt;br /&gt;
Después de esto solo tengo que suscribirme al evento desde las otras clases:
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;ParentObjective.PositionChangedEvent += new Objective.PositionChangeHandler(RelatedObjectives_PositionChangedEvent);&lt;/pre&gt;
&lt;br /&gt;
Fácil… &lt;strike&gt;por una vez en la vida&lt;/strike&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-4856714734177781335?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=U2WrXimmJrc:Zofrzrnc7jY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=U2WrXimmJrc:Zofrzrnc7jY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=U2WrXimmJrc:Zofrzrnc7jY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=U2WrXimmJrc:Zofrzrnc7jY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=U2WrXimmJrc:Zofrzrnc7jY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/U2WrXimmJrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/4856714734177781335/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=4856714734177781335" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4856714734177781335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4856714734177781335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/U2WrXimmJrc/creando-eventos-en-silverlight.html" title="Creando Eventos en Silverlight" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2012/01/creando-eventos-en-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4MR30zcSp7ImA9WhRWGEs.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-2718261011187507867</id><published>2012-01-04T15:07:00.000+01:00</published><updated>2012-01-06T15:43:06.389+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-06T15:43:06.389+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IIS" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Configuración" /><title>Configurando Silverlight y Servicios Web con SSL y Certificados Autofirmados</title><content type="html">Yo tenía un servidor de SharePoint funcionando perfectamente &lt;strike&gt;o por lo menos tan bien como funciona un server de SharePoint&lt;/strike&gt; en HTTP, pero de repente sentí la urgencia de hacerlo HTTPS. Extendí la aplicación etc., y era capaz de acceder a todas partes, pero &lt;strike&gt;¡Oh sorpresa!&lt;/strike&gt;, mis silverlights no funcionaban.&lt;br /&gt;
&lt;br /&gt;
Cambié el &lt;em&gt;&amp;lt;security mode="Transport" /&amp;gt;&lt;/em&gt; en el &lt;em&gt;ServiceReferences.ClientConfig&lt;/em&gt; pero siempre me daba el infame error:&lt;br /&gt;
&lt;blockquote&gt;
&lt;em&gt;An error occurred while trying to make a request to URI '&lt;/em&gt;&lt;a href="https://myurl/_vti_bin/Service.asmx'"&gt;&lt;em&gt;https://&lt;span style="color: blue;"&gt;MyURL&lt;/span&gt;/_vti_bin/Service.asmx'&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute.&lt;/em&gt;&lt;/blockquote&gt;
Hay un par de cosas que arreglar aquí.&lt;br /&gt;
&lt;br /&gt;
Lo primero es añadir un buen certificado autofirmado a tu sitio.&lt;br /&gt;
&lt;blockquote&gt;
&lt;em&gt;C:\Program Files\Microsoft SDKs\Windows\v7.1&amp;gt;MakeCert.exe -r -pe -n "CN=&lt;span style="color: blue;"&gt;MyURL&lt;/span&gt;" -sky exchange -ss my&lt;/em&gt;&lt;/blockquote&gt;
El &lt;span style="color: blue;"&gt;MyURL&lt;/span&gt; es muy importante. No puedes usar un certificado autofirmado cualquiera, debes usar uno que le venga bien a la URL de tu sitio.&lt;br /&gt;
El certificado se almacena en tus certificados personales, asi que para exportarlo deberás ejecutar MMC.exe, y allí:&lt;br /&gt;
&lt;blockquote&gt;
File –&amp;gt; Add/Remove Snap-In –&amp;gt; Certificates –&amp;gt; My user account –&amp;gt; Finish –&amp;gt; OK&lt;/blockquote&gt;
Entonces podrás de ver tus certigicados. El que acabas de crear está enÑ:&lt;br /&gt;
&lt;blockquote&gt;
Certificates – Current User –&amp;gt; Personal –&amp;gt; Certificates –&amp;gt; &lt;span style="color: blue;"&gt;MyURL&lt;/span&gt;&lt;/blockquote&gt;
Allí deberás:&lt;br /&gt;
&lt;blockquote&gt;
Click derecho –&amp;gt; All Tasks –&amp;gt; Export&lt;/blockquote&gt;
Y entonces &lt;span style="color: #ffc000;"&gt;asegurate de que exportas la clave privada con el certificado&lt;/span&gt;. Esto te dará como resultado un fichero &lt;span style="color: #ffc000;"&gt;.pfx&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos ir al server que queremos hacer SSL, si es que no estábamos allí ya, y copiar el fichero .pfx &lt;strike&gt;en algún sitio en donde luego recordemos donde esta&lt;/strike&gt;. &lt;br /&gt;
&lt;br /&gt;
Después abrimos el IIS Manager, seleccionamos el nodo raíz y hacemos click en Certificados del Servidor &lt;a href="http://lh3.ggpht.com/-2dZk7TE_woc/TwRJtgSkfuI/AAAAAAAAAVc/al-EQAn0QkI/s1600-h/image%25255B2%25255D.png"&gt;&lt;img alt="image" border="0" height="84" src="http://lh4.ggpht.com/-b1g-r7G_eLU/TwRJuaFiNrI/AAAAAAAAAVg/qMozIeHbh1s/image_thumb.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="server certificates" width="68" /&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En la columna de la derecha deberás hacer click en Importar y seleccionar el fichero &lt;span style="color: #ffc000;"&gt;.pfx&lt;/span&gt; que acabas de crear. Después de importarlo deberás poder verlo en la lista de Certificados del Servidor.&lt;br /&gt;
&lt;br /&gt;
Entonces haremos click en la colección de sitios 443 (la mía se llama SharePoint 443) y allí, otra vez en la columna derecha, hacemos click en bindings. Seleccionamos HTTPS (añade uno si no lo tienes ya creado) y luego hacemos click en editar. En la lista Certificado SSL selecciona el que acabas de subir.&lt;br /&gt;
&lt;br /&gt;
Bien, ya hemos hecho la parte difícil, ahora todo es más fácil.&lt;br /&gt;
&lt;br /&gt;
Ahora añadiremos el crossdomain.xml y el clientaccesspolicy.xml tanto a la carpeta 80 como a la 443. (c:\inetpub\…\443)&lt;br /&gt;
El contenido de estos ficheros es:&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;crossdomain.xml&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"&amp;gt;
&amp;lt;cross-domain-policy&amp;gt;
  &amp;lt;allow-access-from domain="*"/&amp;gt;
  &amp;lt;allow-http-request-headers-from domain="*" headers="SOAPAction"/&amp;gt;
&amp;lt;/cross-domain-policy&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;clientaccesspolicy.xml&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;access-policy&amp;gt;
  &amp;lt;cross-domain-access&amp;gt;
    &amp;lt;policy&amp;gt;
      &amp;lt;allow-from http-request-headers="SOAPAction"&amp;gt;
        &amp;lt;domain uri="http://*"/&amp;gt;
        &amp;lt;domain uri="https://*"/&amp;gt;
      &amp;lt;/allow-from&amp;gt;
      &amp;lt;grant-to&amp;gt;
        &amp;lt;resource path="/" include-subpaths="true"/&amp;gt;
      &amp;lt;/grant-to&amp;gt;
    &amp;lt;/policy&amp;gt;
  &amp;lt;/cross-domain-access&amp;gt;
&amp;lt;/access-policy&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Y ahora la parte todavía más sencilla. Configurar el navegador.&lt;br /&gt;
Debemos navegar a &lt;a href="https://myurl/"&gt;https://MyURL&lt;/a&gt; y allí veremos algo así:&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-irjMspUgK4Y/TwRJvGUVEqI/AAAAAAAAAVs/4xtiO23dq34/s1600-h/image%25255B5%25255D.png"&gt;&lt;img alt="image" border="0" height="100" src="http://lh6.ggpht.com/-dbQ8yKzgvd8/TwRJv3lyK4I/AAAAAAAAAV0/GzmSzwgOq1w/image_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IE Self Signed Certificate" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Aquí deberás hacer click en continuar (Recomendado) y después verás la barra de dirección volverse roja. Bien.&lt;br /&gt;
Haz click en el botón Error de Certificado y luego en el link Ver Certificados:&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-0L1DiG3SoM0/TwRJwoXFDmI/AAAAAAAAAV4/C3kI92sMco4/s1600-h/image%25255B8%25255D.png"&gt;&lt;img alt="image" border="0" height="244" src="http://lh3.ggpht.com/-PiNlgjmfHr0/TwRJxZT9MaI/AAAAAAAAAWE/VsTsVgVjSzE/image_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Certificate Error" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Después de eso:&lt;br /&gt;
&lt;blockquote&gt;
Instalar Certificado… –&amp;gt; Next –&amp;gt; &lt;a href="http://lh3.ggpht.com/-wpDTGXOqJlU/TwRJyEou6XI/AAAAAAAAAWI/LJWgGVHv2_8/s1600-h/image%25255B11%25255D.png"&gt;&lt;img alt="image" border="0" height="78" src="http://lh5.ggpht.com/-A1vgkRwW928/TwRJyujeXZI/AAAAAAAAAWQ/zGfcryKUcqY/image_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt; &amp;amp; Next –&amp;gt; Finish –&amp;gt; Yes –&amp;gt; Ok.&lt;/blockquote&gt;
Cierra el navegador y ábrelo otra vez tu &lt;a href="https://myurl/"&gt;https://myurl&lt;/a&gt;. Ahora deberías ver la barra de la URL en blanco y el icono del candado al lado:&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-YOkmHOSFb6w/TwRJzEI8mxI/AAAAAAAAAWY/9FFGOiau4xU/s1600-h/image%25255B14%25255D.png"&gt;&lt;img alt="image" border="0" height="23" src="http://lh3.ggpht.com/-hBzaEvPpm5c/TwRJ0P3CElI/AAAAAAAAAWg/K9F6LSElwfw/image_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Lock Icon" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Vamos bien. Ahora borraremos las cookies del navegador &lt;strike&gt;y todo lo demás, qué demonios&lt;/strike&gt;:&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-gpmFrJY6cIo/TwRJ0gZ6EnI/AAAAAAAAAWs/ebizTY38KDw/s1600-h/image%25255B17%25255D.png"&gt;&lt;img alt="image" border="0" height="244" src="http://lh4.ggpht.com/-uoa1qVgGLDc/TwRJ16LARdI/AAAAAAAAAW0/KId_D2-nyco/image_thumb%25255B5%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="204" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Como toque final reiniciaremos el IIS&lt;strike&gt; y saltaremos tres veces a la pata coja&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
Ahora, finalmente, debes de ser capaz de depurar tus web services SSL y tus Silverlights en Visual Studio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-2718261011187507867?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=b9TRmPTrKzs:by8bBXm9zls:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=b9TRmPTrKzs:by8bBXm9zls:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=b9TRmPTrKzs:by8bBXm9zls:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=b9TRmPTrKzs:by8bBXm9zls:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=b9TRmPTrKzs:by8bBXm9zls:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/b9TRmPTrKzs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/2718261011187507867/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=2718261011187507867" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/2718261011187507867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/2718261011187507867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/b9TRmPTrKzs/configurando-silverlight-y-servicios.html" title="Configurando Silverlight y Servicios Web con SSL y Certificados Autofirmados" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-b1g-r7G_eLU/TwRJuaFiNrI/AAAAAAAAAVg/qMozIeHbh1s/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Londres, Reino Unido</georss:featurename><georss:point>51.508129 -0.128005</georss:point><georss:box>51.350007 -0.443862 51.666250999999995 0.187852</georss:box><feedburner:origLink>http://developingispainful.blogspot.com/2012/01/configurando-silverlight-y-servicios.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04FQXY6fSp7ImA9WhdWFEQ.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-2615776451890394272</id><published>2011-09-08T18:36:00.000+02:00</published><updated>2011-09-08T18:38:30.815+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T18:38:30.815+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Web Part Proveedor de Filtro con un árbol Silverlight en un ModalDialog</title><content type="html">Empecé con esto hace un par de días... No quería hacerlo, porque sabría que iba a ser doloroso... pero me obligaron... Y entonces pensé que sería un post perfecto para el blog  &lt;strike&gt;por lo de painful&lt;/strike&gt;.&lt;br /&gt;&lt;br /&gt;


Lo que queríamos conseguir era filtrar elementos en un List View Web Part por Entidad. En nuestra solución tenemos una jerarquía de entidades por lo que pensamos que sería buena idea que el web part mostrase la jerarquía como un árbol.&lt;br /&gt;

Bien, así que necesitamos un web part con un TreeView que sea capaz de mandar la entidad seleccionada como filtro a un LVWP. Fantástico. Lo hice... Y no le gustó a nadie. Lo querían en Silverlight y no solo eso, lo querían en una ventana pop up. Sip, me cogieron, nunca había hecho nada parecido pero, ¿Quién dijo miedo?&lt;br /&gt;&lt;br /&gt;



Es un montón de código, la mayor parte feo así que solo postearé la parte interesante (básicamente la parte relacionada con la comunicación entre las páginas y el Silverlight) y las URLs de donde cogí las ideas.&lt;br /&gt;


Lo primero es poner a funcionar un Filter Provider Web Part. Para ello seguí las instrucciones de &lt;a href="http://msdn.microsoft.com/en-us/library/bb457205(v=office.12).aspx" target="_blank"&gt;aquí&lt;/a&gt;. Primero lo intenté con un IWebPartRow, pero no era lo que yo quería así que cambié a ITransformableFilterValues. Esta parte es bastante simple así que no comentaré nada más.&lt;br /&gt;


La segunda parte es crear una ventana emergente. Después de googlear &lt;strike&gt;si googlear te parece un palabro raro deberías escucharme decir overridar o rollupear&lt;/strike&gt; un rato me enconté con &lt;a href="http://www.eggheadcafe.com/tutorials/aspnet/96c46e09-b383-4330-ae8d-99436cb6c330/aspnet-modaldialog-with-postback-and-return-values-to-parent-page.aspx" target="_blank"&gt;este&lt;/a&gt; post, que me pareció un buen sitio para empezar. Mi código en el web part terminó así:&lt;br /&gt;

&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;        protected override void OnLoad(EventArgs e)
        {
            if (Page.IsPostBack)
            {
                if (!string.IsNullOrEmpty(GetFormValue("HiddenEntityName")))
                {
                    Page.Session["SelectedEntityName"] = Page.Request.Form["HiddenEntityName"];
                    Page.Session["SelectedEntityID"] = Page.Request.Form["HiddenEntityID"];

                    RenderHeader();

                    //SelectedEntityText.Text = string.Format("{0}  ", Page.Request.Form["HiddenEntityName"], Page.Request.Form["HiddenEntityID"]);
                }
                else
                    RenderHeader();
            }

            string CurrentWeb = SPContext.Current.Web.Url;
            string height = "500";
            string width = "500";
            string page = "/_layouts/stratex/EntityTree.aspx";

            // use next line for direct with &lt;base target="_self"&gt;&lt;/base&gt; between  and  
            string scrp = @"
                            &lt;script javascript??="" text="" type=""&gt;
                                var ReturnValue = new Array("","");
                                function ShowModalDialog(){
                                    ReturnValue = window.showModalDialog('" + page + "?CurrentWeb=" + CurrentWeb + "&amp;SelectedEntityID=" + Page.Session["SelectedEntityID"] + "&amp;dialogHeight:" + height + " px;dialogWidth:" + width + @" px;');
                                    if(ReturnValue[0] != null){
                                        document.getElementById('HiddenEntityName').value = ReturnValue[0];
                                        document.getElementById('HiddenEntityID').value = ReturnValue[1];
                                        __doPostBack('','');
                                    }
                                }
                            
&lt;/script&gt;";

            Type t = this.GetType();
            if (!Page.ClientScript.IsClientScriptBlockRegistered(t, "bindWebserviceToAutocomplete"))
                Page.ClientScript.RegisterClientScriptBlock(t, "bindWebserviceToAutocomplete", scrp);
        }&lt;/pre&gt;
Tuve problemas trayéndome los valores del ModalDialog. No era capaz de encontrar los ID ni los Titles de los controles porque son creados dinámicamente. El truco que usé fue crear dos campos ocultos en el CreateChildControls:
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            ...

            Page.ClientScript.RegisterHiddenField("HiddenEntityName", "");
            Page.ClientScript.RegisterHiddenField("HiddenEntityID", "");

            ...
        }&lt;/pre&gt;
&lt;strike&gt;Oye Chan, ¿Te has dado cuenta que podrías usar solo la sesión y olvidarte de los HiddenFields? No preguntes, te lo advierto…&lt;/strike&gt;&lt;br /&gt;
La próxima parte es crear la página aspx para el modal dialog. La guardé en un directorio que me creé en _layouts. El código de la página quedó así:&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;&amp;lt;%@ Page Language="C#" Inherits="StratExFramework.EntityTree,StratExFramework,Version=2.2.0.0,Culture=neutral,PublicKeyToken=311246df7412ca98" %&amp;gt;

&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Select Entity for filtering&amp;lt;/title&amp;gt;
&amp;lt;script type='text/javascript'&amp;gt;
    function PassParameterAndClose(EntityName, EntityID) {

        window.returnValue = new Array( EntityName, EntityID) ;

        var version = parseFloat(navigator.appVersion.split('MSIE')[1]);
        if (version &amp;gt;= 7) 
            { window.open('', '_parent', ''); }
        else
            { window.opener = self; }

        window.close();
    }
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
También me creé una clase de code behind &lt;strike&gt;como puedes ver en la primera línea del aspx...&lt;/strike&gt; :
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;    public class EntityTree : WebPartPage
    {
        string CurrentWeb;
        string SelectedEntityID;

        protected void Page_Load(object sender, System.EventArgs e)
        {
            CurrentWeb = Request.Params["CurrentWeb"];
            SelectedEntityID = Request.Params["SelectedEntityID"];
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            string Source = CurrentWeb + "/Lists/XAPLibrary/SilverlightEntityTreeSelector.xap";
            string SilverlightHeight = "515";
            string SilverlightWidth = "500";

            LiteralControl obj = new LiteralControl();
            obj.Text = "&amp;lt;object id='silverlightHost' style='height: " + SilverlightHeight + "; width: " + SilverlightWidth + @"; margin: 0; padding: 0;' data='data:application/x-silverlight-2,' type='application/x-silverlight-2'&amp;gt;
                            &amp;lt;param name='Source' value='" + Source + @"' /&amp;gt;
                            &amp;lt;param name='MinRuntimeVersion' value='3.0.40624.0' /&amp;gt;
                            &amp;lt;param name='Background' value='#FFFFFFFF' /&amp;gt;
                            &amp;lt;param name='initParams' value='" +
                                string.Format("{0}={1}", "site", HttpUtility.UrlEncode(CurrentWeb)) +
                                string.Format(", {0}={1}", "selectedentityid", HttpUtility.UrlEncode(SelectedEntityID)) +
                                @"' /&amp;gt;
                            &amp;lt;/object&amp;gt;";
            this.Controls.Add(obj);
        }

        public override void VerifyRenderingInServerForm(Control control)
        {
            return;
        }
    }&lt;/pre&gt;
Lo que hago aquí es coger los parámetros del entorno en donde se ejecuta el web part y pasárselos al Silverlight. Uso el CurrentWeb para decirle a los web services del Silverlight cual es el contexto y el SelectedEntityID para resaltar la entidad que fue seleccionada la última vez que se abrió la ventana modal. Este es el código del Silverlight.
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;namespace SilverlightEntityTreeSelector
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();

            Tree.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Tree_PropertyChanged);

            Tree.Show(string.Empty);
        }

        void Tree_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "SelectedEntityID")
                HtmlPage.Window.Invoke("PassParameterAndClose", Tree.SelectedEntityName, Tree.SelectedEntityID);
            else if (e.PropertyName == "TreeLoaded")
                if (Application.Current.Resources.Contains("selectedentityid"))
                    if (!string.IsNullOrEmpty(Application.Current.Resources["selectedentityid"] as string))
                        Tree.ChangeSelectedItemTo(Application.Current.Resources["selectedentityid"] as string);
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Ya tenemos todos los componentes.&lt;br /&gt;


Esto funciona de la siguiente manera: Seleccionas una entidad en el árbol de Silverlight, luego el Silverlight llama a la función javascript de la ventana modal y que pasa los parámetros al web part padre y cierra el popup. Finalmente el web part manda el filtro al List View WebPar.&lt;br /&gt;


Si usas este código te faltarán algunos métodos, pero lo que quería compartir aquí es el método que he seguido para conseguirlo &lt;strike&gt;básicamente porque no quiero tener que volver a pensarlo si alguna vez me vuelven a pedir que haga algo parecido en el futuro&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div align="right"&gt;
&lt;strike&gt;&lt;span style="color: #cccccc; font-size: x-small;"&gt;Me encantaría enseñaros algunas fotos, pero los web parts no han sido retocados por las hábiles manos de Adam, nuestro diseñador, y &lt;/span&gt;&lt;a href="http://thetorchonline.com/wp-content/uploads/2010/09/total-recall-bulge-eyes-300.jpg" target="_blank"&gt;&lt;span style="color: #cccccc; font-size: x-small;"&gt;se os podrían salir los ojos de las órbitas&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #cccccc; font-size: x-small;"&gt;.&lt;/span&gt;&lt;/strike&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-2615776451890394272?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=0VTyRV1F2jY:mB77xVxEuI0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=0VTyRV1F2jY:mB77xVxEuI0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=0VTyRV1F2jY:mB77xVxEuI0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=0VTyRV1F2jY:mB77xVxEuI0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=0VTyRV1F2jY:mB77xVxEuI0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/0VTyRV1F2jY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/2615776451890394272/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=2615776451890394272" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/2615776451890394272?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/2615776451890394272?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/0VTyRV1F2jY/web-part-proveedor-de-filtro-con-un.html" title="Web Part Proveedor de Filtro con un árbol Silverlight en un ModalDialog" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/09/web-part-proveedor-de-filtro-con-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMBR3o-fCp7ImA9WhdQFks.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-3680770270791566987</id><published>2011-08-18T13:37:00.000+02:00</published><updated>2011-08-18T13:37:36.454+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-18T13:37:36.454+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Creando una aplicación Windows Forms en SharePoint 2010</title><content type="html">En mi tónica habitual, creo que me he tropezado con cada posible problema antes de conseguir ejecutar mi aplicación.&lt;br /&gt;
&lt;br /&gt;
Lo que en MOSS2007 era todo risas y alegría se ha convertido en SharePoint 2010 en una tarea que me llevó por lo menos una hora… Y tuve suerte porque &lt;strike&gt;en mi tónica habitual, otra vez&lt;/strike&gt; he llegado bastante tarde a 2010 y la mayoría de los problemas han sido ya resueltos y comentados en los foros…&lt;br /&gt;
&lt;br /&gt;
Bueno, contaré la experiencia, así no se me olvidan los pasos necesarios la próxima vez &lt;strike&gt;con un poco de suerte&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
Añadí la Microsoft.SharePoint.dll como siempre a las referencias y empecé a teclear. Escribí mi aplicación de tres lineas (sólo quería una aplicación para ayudarme a programar otra cosa) y le di a F5.&lt;br /&gt;
&lt;p align="center"&gt;&lt;font color="#ffc000"&gt;&lt;em&gt;“The type or namespace name 'SharePoint' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)”&lt;/em&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
Bien, no se me había olvidado nada, el problema era que tienes que apuntar la solución al .Net Framework 3.5…&lt;br /&gt;
&lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/--r32Kba6UqU/Tkz0iR0xaCI/AAAAAAAAAU8/zjFPQxqzE1k/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 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/-TvVj6jt0-jM/Tkz0iz28nXI/AAAAAAAAAVA/I7plvxlewO4/image_thumb.png?imgmax=800" width="244" height="128"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Esa fue fácil. Había un par de sitios en donde puedes encontrar esa información. Vale, F5 otra vez.&lt;br /&gt;
&lt;p align="center"&gt;&lt;font color="#ffc000"&gt;“The Web application at http://localhost could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application”&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
- ¡Oh venga ya! ¡Está ahí! ¿Por qué no lo encuentras? + Porque no me has apuntado a 64 bits y no estoy funcionando en modo nativo. - Ups, perdona. + No pasa nada, solo tienes que leer mis mensajes de error que te indicarán perfectamente lo que tienes que hacer.&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-aCip0Fh6npM/Tkz0jRKNi_I/AAAAAAAAAVE/9duwrkTLaY0/s1600-h/image%25255B5%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/-teP6A6AClYY/Tkz0jwRbcZI/AAAAAAAAAVI/JdK5nuyPG5I/image_thumb%25255B1%25255D.png?imgmax=800" width="244" height="87"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Esta fue un poco más difícil de encontrar, pero después de cambiar eso, le di felizmente a F5 otra vez y… ¡Sorpresa!&lt;br /&gt;
&lt;p align="center"&gt;&lt;font color="#ffc000"&gt;“The Web application at http://localhost could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application”&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
Si, el mismo error otra vez… Y ya no encontraba más información en internet… ¿Y si es un problema de permisos?&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-FiVWzx3VsDk/Tkz0kcGH5nI/AAAAAAAAAVM/1jZjjOBkEc0/s1600-h/image%25255B8%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/-wHSwkYg0DyA/Tkz0kzbnxuI/AAAAAAAAAVQ/PSyaUP0mPvs/image_thumb%25255B2%25255D.png?imgmax=800" width="244" height="152"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Arranqué el Visual Studio como administrador y funcionó. ¡Por fin!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-3680770270791566987?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=U5R-P74ks1o:yqoYjz70a-4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=U5R-P74ks1o:yqoYjz70a-4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=U5R-P74ks1o:yqoYjz70a-4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=U5R-P74ks1o:yqoYjz70a-4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=U5R-P74ks1o:yqoYjz70a-4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/U5R-P74ks1o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/3680770270791566987/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=3680770270791566987" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/3680770270791566987?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/3680770270791566987?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/U5R-P74ks1o/creando-una-aplicacion-windows-forms-en.html" title="Creando una aplicación Windows Forms en SharePoint 2010" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-TvVj6jt0-jM/Tkz0iz28nXI/AAAAAAAAAVA/I7plvxlewO4/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/08/creando-una-aplicacion-windows-forms-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcBSXs4fSp7ImA9WhRVE0o.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-90517949890611501</id><published>2011-08-05T18:13:00.000+02:00</published><updated>2012-01-12T15:04:18.535+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T15:04:18.535+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><title>Ocultando las Scrollbars en los web parts de SharePoint 2010</title><content type="html">Después de desplegar la primera versión alpha de nuestra solución en SharePoint 2010 noté que los web parts Silverlight estaban enmarcados en unas antiestéticas barras de scroll. Me di cuenta también que si cambiaba la altura y anchura a automático desaparecían, pero claro, entonces mi web part no tenía la talla que yo quería...&lt;br /&gt;
&lt;br /&gt;
Leí este post: &lt;a href="http://blog.benfox.info/?p=11" title="http://blog.benfox.info/?p=11"&gt;http://blog.benfox.info/?p=11&lt;/a&gt; y&lt;strike&gt;, como probablemente hayas adivinado,&lt;/strike&gt; me tiré de cabeza a la solución fea.&lt;br /&gt;
&lt;br /&gt;
Había un problema, que el código javascript estaba en una foto… mal… y entonces pensé &lt;strike&gt;“Voy a demostrarles a todos que puedo ser tan cazurro en SharePoint 2010 como siempre lo he sido en SharePoint 2007”&lt;/strike&gt; ¿Por qué no crear un post sobre esto?&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;&amp;lt;script type="text/javascript"&amp;gt;

 function HideScrollBars()
 {
 document.getElementById('WebPartWPQ2').style.overflowX = "hidden";
 document.getElementById('WebPartWPQ2').style.overflowY = "hidden";

 document.getElementById('WebPartWPQ3').style.overflowX = "hidden";
 document.getElementById('WebPartWPQ3').style.overflowY = "hidden";
 }

_spBodyOnLoadFunctionNames.push("HideScrollBars")&amp;lt;/script&amp;gt;&lt;/pre&gt;
Y &lt;strike&gt;después de pelearme por lo menos 15 minutos con el Content Editor Web Part&lt;/strike&gt; me las arreglé por fin para esconder las barras de scroll verticales y horizontales en mis web parts.&lt;br /&gt;
&lt;br /&gt;
Ahora puedo mandar orgulloso una foto del sitio con la Vista de SharePoint 2010.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://developingispainful.blogspot.com/2012/01/las-barras-de-desplazamiento-aparecen.html"&gt;--- Actualización --- he cambiado el codigo de los web parts y ahora no es necesaria &lt;strike&gt;la guarreria d&lt;/strike&gt;el javascript.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-90517949890611501?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=Mjpy_c_2ZRg:vptdLlrMb-E:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=Mjpy_c_2ZRg:vptdLlrMb-E:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=Mjpy_c_2ZRg:vptdLlrMb-E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=Mjpy_c_2ZRg:vptdLlrMb-E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=Mjpy_c_2ZRg:vptdLlrMb-E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/Mjpy_c_2ZRg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/90517949890611501/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=90517949890611501" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/90517949890611501?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/90517949890611501?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/Mjpy_c_2ZRg/ocultando-las-scrollbars-en-los-web.html" title="Ocultando las Scrollbars en los web parts de SharePoint 2010" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/08/ocultando-las-scrollbars-en-los-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04EQX8zfyp7ImA9WhdTE0Q.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-3381489854459536306</id><published>2011-07-11T17:58:00.000+02:00</published><updated>2011-07-11T17:58:20.187+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T17:58:20.187+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Otros" /><title>Error HTTP 500  (No authority could be contacted for authentication.) en SharePoint</title><content type="html">Después de restaurar mi máquina virtual de desarrollo en una red diferente &lt;strike&gt;la de mi casa&lt;/strike&gt; estaba recibiendo un error 500 al intentar conectar. La cosa era curiosa porque podía ver el sitio desde el server, pero no desde mi máquina física &lt;strike&gt; y sí, había comprobado que las IPs estuviesen bien&lt;/strike&gt;. Lo primero que hice fue configurar el IE9 para que me enseñase los errores HTTP como a mi me gusta verlos de la manera "unfriendly”.&lt;br /&gt;
&lt;br /&gt;
Para hacerlo fui a Tools –&amp;gt; Internet Options –&amp;gt; Advanced, y allí en el arbol debajo de Browsing Browsing desmarqué la opción de “Show friendly HTTP error messages”.&lt;br /&gt;
&lt;br /&gt;
Después de eso pude ver que el problema que estaba teniendo conectando desde fuera era “No authority could be contacted for authentication.”. &lt;a href="http://forums.asp.net/t/986545.aspx" target="_blank"&gt;Aquí&lt;/a&gt; vi que la manera más simple de arreglar el problema era sacar el servidor del dominio y voverlo a meter.&lt;br /&gt;
&lt;br /&gt;
Y funcionó... Por fin...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-3381489854459536306?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=1NjxaClX-6Q:U103JYAvyCs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=1NjxaClX-6Q:U103JYAvyCs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=1NjxaClX-6Q:U103JYAvyCs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=1NjxaClX-6Q:U103JYAvyCs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=1NjxaClX-6Q:U103JYAvyCs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/1NjxaClX-6Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/3381489854459536306/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=3381489854459536306" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/3381489854459536306?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/3381489854459536306?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/1NjxaClX-6Q/error-http-500-no-authority-could-be.html" title="Error HTTP 500  (No authority could be contacted for authentication.) en SharePoint" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/07/error-http-500-no-authority-could-be.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSX0-cCp7ImA9WhdTEUk.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-4293450302009444697</id><published>2011-07-08T18:00:00.000+02:00</published><updated>2011-07-08T18:00:38.358+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-08T18:00:38.358+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Escondiendo los List View web parts cuando están vacíos</title><content type="html">Hoy me han pedido que esconda los List View web parts de la solución cuando están vacíos... No me gusta el javascript, pero era obviamente la solución más simple, así que le pregunté a Google y me mandó a &lt;a href="http://allypearl.wordpress.com/2011/01/20/hide-all-the-empty-web-parts-on-a-page/" target="_blank"&gt;este post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Copié el código en un web part Editor de Contenido y funcionó más o menos, pero cuando intenté esconder también las cabeceras de las columnas y añadir un mensaje solo funcionaba para dos de los tres web parts que tenía en la página &lt;strike&gt;cosas veredes&lt;/strike&gt; asi que después de buscar un ratito más en Google lo cambié a:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;&amp;lt;script type="text/javascript"&amp;gt;
 function HideEmptyWebParts()
 {
   var itemsfound = new Array;
   var elements = document.getElementsByTagName('*');
   for(var i=0;i&amp;lt;elements.length;i++)
   {
      if(elements[i].className == 'ms-vb')
      {
         itemsfound.push(elements[i]);
      }
   }
  
   for (var i=0;i&amp;lt;itemsfound.length;i++)
   {
       if (itemsfound[i].innerHTML.indexOf("There are no items to show in this view of the")&amp;gt;-1)
       {
                itemsfound[i].parentNode.parentNode.parentNode.parentNode.innerHTML="&amp;lt;div class='ms-vb'&amp;gt;Not enough data to produce a dashboard.&amp;lt;/div&amp;gt;";
         
       }
   }
 }

_spBodyOnLoadFunctionNames.push("HideEmptyWebParts")
 
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;div class="c#" name="code"&gt;&lt;br /&gt;
&lt;/div&gt;Y entonces sí que empezó a funcionar como esperaba.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-4293450302009444697?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=4R1DAlYyGgQ:ZrI4NoIzjVM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=4R1DAlYyGgQ:ZrI4NoIzjVM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=4R1DAlYyGgQ:ZrI4NoIzjVM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=4R1DAlYyGgQ:ZrI4NoIzjVM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=4R1DAlYyGgQ:ZrI4NoIzjVM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/4R1DAlYyGgQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/4293450302009444697/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=4293450302009444697" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4293450302009444697?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4293450302009444697?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/4R1DAlYyGgQ/escondiendo-los-list-view-web-parts.html" title="Escondiendo los List View web parts cuando están vacíos" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/07/escondiendo-los-list-view-web-parts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDRnY8eyp7ImA9WhZaFU4.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-8070222166316395823</id><published>2011-07-01T18:24:00.000+02:00</published><updated>2011-07-01T18:24:37.873+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-01T18:24:37.873+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Depurando aplicaciones en el teléfono después de actualizar a “Mango”</title><content type="html">Acabo de actualizar el teléfono a Windows Phone 7.1 codename “Mango”. No puedo decir mucho porque no he tenido tiempo de probarlo, pero sí que puedo decir que es más rápido.&lt;br /&gt;
&lt;br /&gt;
Algunas de las nuevas funcionalidades no estan implementadas y tienen un cartelito de “Coming soon!” pero no es esto lo que quiero contar hoy.&lt;br /&gt;
&lt;br /&gt;
El caso es que después de actualizar no podía depurar las aplicaciones en el teléfono como antes. El emulador se lanzaba automáticamente (y esto me cascaba todas las máquinas vituales de &lt;strike&gt;vBox&lt;/strike&gt; que tenía corriendo en el momento.&lt;br /&gt;
&lt;br /&gt;
Después de un ratito mirando me di cuenta de que era más facil de lo que pensaba… Hay un dropdown ahí arriba para que elijas cómo quieres debugarÑ&lt;br /&gt;
&lt;div align="center"&gt;&lt;a href="http://lh3.ggpht.com/-Chbvmk1KYnY/Tg3epH1BeaI/AAAAAAAAAUw/54zlki5f3A4/s1600-h/image%25255B2%25255D.png"&gt;&lt;img alt="image" border="0" height="100" src="http://lh3.ggpht.com/-u_egfZgeq0A/Tg3eqe54usI/AAAAAAAAAU0/E1hfhXlryQI/image_thumb.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Solo tienes que elegir Windows Phone Device&lt;strike&gt; y enmi caso desbloquear otra vez el teléfono con la Developer Phone Registration tool &lt;/strike&gt;y a correr!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-8070222166316395823?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=TBTHJ1krAEw:5ix--Cev2-U:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=TBTHJ1krAEw:5ix--Cev2-U:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=TBTHJ1krAEw:5ix--Cev2-U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=TBTHJ1krAEw:5ix--Cev2-U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=TBTHJ1krAEw:5ix--Cev2-U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/TBTHJ1krAEw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/8070222166316395823/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=8070222166316395823" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8070222166316395823?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8070222166316395823?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/TBTHJ1krAEw/depurando-aplicaciones-en-el-telefono.html" title="Depurando aplicaciones en el teléfono después de actualizar a “Mango”" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-u_egfZgeq0A/Tg3eqe54usI/AAAAAAAAAU0/E1hfhXlryQI/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/07/depurando-aplicaciones-en-el-telefono.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08MRns7eip7ImA9WhZVEkk.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-6023484226554496996</id><published>2011-05-24T16:04:00.000+02:00</published><updated>2011-05-24T16:04:47.502+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-24T16:04:47.502+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Otros" /><title>Caso de Estudio de Microsoft sobre la solución de Gestión de Riesgos basada en SharePoint de StratexSystems</title><content type="html">Estoy muy contento de ver como StratexPoint ha ayudado a HML a mejorar su Gestión de Riesgos y a reducir sus pérdidas operacionales.&lt;br /&gt;
&lt;div align="center"&gt;&lt;a href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000009984" target="_blank"&gt;Caso de Estudio de Microsoft - StratexPoint + HML&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Hemos trabajado un montón en la solución este año y me es muy gratificante ver que nuestro trabajo tiene un impacto en el Mundo Real™. La mayoria de las veces se me olvida.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-6023484226554496996?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=oNZ-IeYMCzU:xuOdthW296o:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=oNZ-IeYMCzU:xuOdthW296o:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=oNZ-IeYMCzU:xuOdthW296o:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=oNZ-IeYMCzU:xuOdthW296o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=oNZ-IeYMCzU:xuOdthW296o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/oNZ-IeYMCzU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/6023484226554496996/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=6023484226554496996" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/6023484226554496996?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/6023484226554496996?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/oNZ-IeYMCzU/caso-de-estudio-de-microsoft-sobre-la.html" title="Caso de Estudio de Microsoft sobre la solución de Gestión de Riesgos basada en SharePoint de StratexSystems" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/05/caso-de-estudio-de-microsoft-sobre-la.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFSXw_fSp7ImA9WhZQFEs.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-4840489355061208591</id><published>2011-04-22T11:21:00.000+02:00</published><updated>2011-04-22T11:21:58.245+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T11:21:58.245+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Office 365" /><title>Stratex Systems está en la Nube</title><content type="html">Acabo de recibir el link para unirme al programa beta de Office 365, lamentablemente &lt;strike&gt;otra vez&lt;/strike&gt; no tengo tiempo hoy para probarlo como Dios manda, pero lo tendré el martes &lt;strike&gt;ojalá&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
Os mantendré informados.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_jzoQkZVzs5U/TbFHdL4zVKI/AAAAAAAAAUo/Ve89zNbSt4U/s1600-h/image%5B2%5D.png"&gt;&lt;img alt="image" border="0" height="145" src="http://lh5.ggpht.com/_jzoQkZVzs5U/TbFHdZTqY1I/AAAAAAAAAUs/luCrhya68io/image_thumb.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align="right"&gt;&lt;span style="color: #a5a5a5;"&gt;Un montón de licencias que asignar, un monton de software que probar...&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-4840489355061208591?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=iSqbyMYx7dc:1Gd2XZRFo3M:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=iSqbyMYx7dc:1Gd2XZRFo3M:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=iSqbyMYx7dc:1Gd2XZRFo3M:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=iSqbyMYx7dc:1Gd2XZRFo3M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=iSqbyMYx7dc:1Gd2XZRFo3M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/iSqbyMYx7dc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/4840489355061208591/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=4840489355061208591" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4840489355061208591?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/4840489355061208591?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/iSqbyMYx7dc/stratex-systems-esta-en-la-nube.html" title="Stratex Systems está en la Nube" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_jzoQkZVzs5U/TbFHdZTqY1I/AAAAAAAAAUs/luCrhya68io/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/04/stratex-systems-esta-en-la-nube.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAMRXkycCp7ImA9WhZQE0Q.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-6407843593236245283</id><published>2011-04-21T14:59:00.000+02:00</published><updated>2011-04-21T14:59:44.798+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T14:59:44.798+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Depurando aplicaciones de Windows Phone 7</title><content type="html">Finalmente conseguí cargar y depurar mi aplicación en mi teléfono, pero no fue tan fácil...&lt;br /&gt;
&lt;br /&gt;
Antes de nada encontré las instrucciones en esta página &lt;a href="http://msdn.microsoft.com/en-us/library/ff941089(v=vs.92).aspx#BKMK_Register"&gt;http://msdn.microsoft.com/en-us/library/ff941089(v=vs.92).aspx#BKMK_Register&lt;/a&gt; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Ahí dice que tienes que &lt;a href="https://users.create.msdn.com/Register" target="_blank"&gt;registrarte&lt;/a&gt; en el App Hub antes de poder hacer nada con tu móvil (y cuesta 100$) las palabras textuales son:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #666666;"&gt;&lt;em&gt;“You should register for membership as a Windows Phone developer&lt;span style="color: red;"&gt; &lt;strong&gt;before&lt;/strong&gt;&lt;/span&gt; you begin creating applications because some development tasks, such as installing your application on a physical phone for testing, require App Hub membership”&lt;/em&gt;&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
Bien, esto significa que tienes que pagar 100$ antes de probar nada... paga antes, decide después. No puedo decir que me guste la filosofía.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Al final mi jefe se registró en el App Hub con su Live ID personal. Gran error. Sabíamos que podíamos tener hasta tres teléfonos de desarrollo, pero nadie nos dijo que todos ellos debían estar con la misma Live ID. Creíamos que se podrían invitar desarrolladores o algo así, pero no. Y no hay vuelta atrás no puedes cambiar tu suscripción a App Hub a otro Live ID... Tampoco estoy contento con esto.&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;¿Quieres saber cómo lo solucionamos? pues con una buena dosis de confianza por su parte.&lt;/strike&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Una vez que tienes registrada la Live ID al App Hub todo es fácil.&lt;br /&gt;
&lt;br /&gt;
Conseguí desbloquear y registrar el teléfono usando la "Developer Phone Registration tool" &lt;a href="http://msdn.microsoft.com/en-us/library/ff769508(VS.92).aspx"&gt;http://msdn.microsoft.com/en-us/library/ff769508(VS.92).aspx&lt;/a&gt;… Bien, ¿y ahora que? &lt;br /&gt;
&lt;br /&gt;
Pues ahora ya está todo preparado. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Si quieres ejecutar tu aplicación en tu móvil en cualquier momento tienes que desplegarla con la “&lt;a href="http://msdn.microsoft.com/en-us/library/ff769512(v=vs.92).aspx" target="_blank"&gt;Application Deployment&lt;/a&gt;” siguiendo las instrucciones de &lt;a href="http://msdn.microsoft.com/en-us/library/gg588378(v=vs.92).aspx"&gt;http://msdn.microsoft.com/en-us/library/gg588378(v=vs.92).aspx&lt;/a&gt; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
O si prefieres puedes pulsar F5 en tu Visual Studio y poner la aplicación a correr en el teléfono y, finalmente... &lt;strong&gt;¡Depurar!&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-6407843593236245283?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=SsjoNpLLLHY:07eoabXa-NY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=SsjoNpLLLHY:07eoabXa-NY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=SsjoNpLLLHY:07eoabXa-NY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=SsjoNpLLLHY:07eoabXa-NY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=SsjoNpLLLHY:07eoabXa-NY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/SsjoNpLLLHY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/6407843593236245283/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=6407843593236245283" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/6407843593236245283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/6407843593236245283?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/SsjoNpLLLHY/depurando-aplicaciones-de-windows-phone.html" title="Depurando aplicaciones de Windows Phone 7" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/04/depurando-aplicaciones-de-windows-phone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQDSXYyfip7ImA9WhZQE0U.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-8682073615824087820</id><published>2011-04-21T14:02:00.000+02:00</published><updated>2011-04-21T14:02:58.896+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T14:02:58.896+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Creando un Expander en Silverlight para Windows Phone</title><content type="html">Hace unos días estaba migrando una aplicación a WP7 y me di cuenta de que el control Expander no estaba... Me instalé entonces el &lt;a href="http://silverlight.codeplex.com/releases/view/60291" target="_blank"&gt;Silverlight for Windows Phone Toolkit&lt;/a&gt; pero me di cuenta de que tampoco había Expander allí.&lt;br /&gt;
&lt;br /&gt;
No se me ocurría ninguna manera nueva de representar la información sin expanders así que tuve que crear una versión simplificada para la ocasión. El control se compone de un Grid, un StackPanel y un TextBlock. &lt;br /&gt;
&lt;br /&gt;
Está muy limitado y no se supone que con esto se vaya a poder sustituir al Expander de toda la vida, pero quizás pueda ayudar a alguien por ahí.&lt;br /&gt;
&lt;br /&gt;
El código XAP es:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;
  &amp;lt;Border VerticalAlignment="Top" BorderBrush="#FF929EB0" BorderThickness="1" CornerRadius="2" Background="#FFE9E9E9" Margin="5,2"&amp;gt;
            &amp;lt;Grid d:LayoutOverrides="Width"&amp;gt;
    &amp;lt;Grid.RowDefinitions&amp;gt;
     &amp;lt;RowDefinition Height="Auto" MinHeight="20"/&amp;gt;
     &amp;lt;RowDefinition Height="Auto" MinHeight="5"/&amp;gt;
    &amp;lt;/Grid.RowDefinitions&amp;gt;
    &amp;lt;TextBlock x:Name="Header" TextWrapping="Wrap" d:LayoutOverrides="Width" Foreground="#FF656565" Margin="15,2,0,0" VerticalAlignment="Top"/&amp;gt;
    &amp;lt;StackPanel x:Name="ChildrenPanel" VerticalAlignment="Top" d:LayoutOverrides="Width" Margin="0,2,0,0" Grid.Row="1"/&amp;gt;
   &amp;lt;/Grid&amp;gt;
  &amp;lt;/Border&amp;gt;
 &amp;lt;/Grid&amp;gt;&lt;/pre&gt;El truco está en añadir un TextBlock en la cabecera del expander y suscribirse al evento MouseLeftButtonUp del TextBlock para controlar el plegado y desplegado. También he añadido una propiedad Folded para manejar el estado del expander desde afuera. &lt;br /&gt;
&lt;br /&gt;
Si el expander está plegado añado los elementos al StackPanel, si está desplegado los quito. Suena muy simple, pero no era capaz de hacerlo funcionar. El StackPanel se quedaba del mismo tamaño, pero vacío, sin hijos... feísimo.&lt;br /&gt;
&lt;br /&gt;
Después de pasar un rato intentando encoger el StackPanel a manija cambiando el parámetro Heigh encontré el problema.&lt;br /&gt;
&lt;br /&gt;
Estaba intentando borrar todos los elementos del StackPanel a la vez con Children.Clear y eso estaba volviéndolo loco. La solución era borrar los elementos dentro de Children de &lt;strong&gt;uno en uno&lt;/strong&gt;. &lt;br /&gt;
&lt;br /&gt;
El código para la clase Expander es algo así:&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public partial class Expander : UserControl
 {
        bool _Folded;
        public bool Folded
        {
            get { return _Folded; }
            set
            {
                _Folded = !value;
                ExpanderSwitch();
            }
        }
        List&lt;uielement&gt; ChildrenList;


  public Expander()
  {
   // Required to initialize variables
   InitializeComponent();

            ChildrenList = new List&lt;uielement&gt;();

            Header.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(UserActivity_MouseLeftButtonUp);
  }

        void UserActivity_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            ExpanderSwitch();
        }

        private void ExpanderSwitch()
        {
            if (Folded)
            {
                foreach (var child in ChildrenList)
                    ChildrenPanel.Children.Add(child);
            }
            else
            {
                if (ChildrenList.Count == 0)
                    foreach (var item in ChildrenPanel.Children)
                        ChildrenList.Add(item);

                while (ChildrenPanel.Children.Count &amp;gt; 0)
                    ChildrenPanel.Children.RemoveAt(0);
            }

            _Folded = !_Folded;
        }
 }&lt;/uielement&gt;&lt;/uielement&gt;&lt;/pre&gt;Y para usarlo solo tienes que añadir el control:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;
        &amp;lt;this:Expander x:Name="UserNews" /&amp;gt;
    &amp;lt;/Grid&amp;gt;&lt;/pre&gt;Y en el code behind puedes hacer algo como esto: &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;UserNews.Header.Text = GetHeader(News[0]);

            foreach (FrameworkNews news in News)
                UserNews.ChildrenPanel.Children.Add(new NewsDetail(news.Link, GetDetail(news), news.Where));

            UserNews.Folded = true;&lt;/pre&gt;Si tienes tiempo puedes añadir imágenes y animaciones al expander, y también un mejor "control del despliegue"... Yo no puedo dedicarle más tiempo, aunque me encantaría.... Una pena.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-8682073615824087820?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=ZQRHR713vtc:eb0Lh8ftVfo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=ZQRHR713vtc:eb0Lh8ftVfo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=ZQRHR713vtc:eb0Lh8ftVfo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=ZQRHR713vtc:eb0Lh8ftVfo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=ZQRHR713vtc:eb0Lh8ftVfo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/ZQRHR713vtc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/8682073615824087820/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=8682073615824087820" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8682073615824087820?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8682073615824087820?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/ZQRHR713vtc/creando-un-expander-en-silverlight-para.html" title="Creando un Expander en Silverlight para Windows Phone" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/04/creando-un-expander-en-silverlight-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8FQnozfyp7ImA9Wx9VGEw.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-1369056084431127256</id><published>2011-02-04T11:20:00.000+01:00</published><updated>2011-02-04T11:20:13.487+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-04T11:20:13.487+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Otros" /><title>Efímeras máquinas virtuales gratuitas en CloudShare</title><content type="html">Esta última semana he estado buscando una forma de contratar IaaS &lt;strike&gt;Olé ya me se un acrónimo nuevo con el que torturar a la gente&lt;/strike&gt; y lo he publicado por twitter&lt;strike&gt;, por cierto ahora tengo &lt;a href="http://twitter.com/chanido"&gt;twitter&lt;/a&gt;&lt;/strike&gt; y en twitter mi amigo &lt;a href="http://luisruizpavon.blogspot.com/"&gt;Luis Ruiz&lt;/a&gt; me aconsejó que probara &lt;a href="http://www.cloudshare.com/"&gt;CloudShare&lt;/a&gt;. Yo, con el ajetreo del día a día no le hice mucho caso al principio... &lt;b&gt;MAL&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
En CloudShare te ofrecen la posibilidad de crear entornos virtuales gratis. Con software y licencias incluidos en el precio.&lt;br /&gt;
&lt;br /&gt;
Tienen un montón de plantillas de máquinas básicas para que empieces a trabajar con tu máquina virtual en 10 minutos (contando el tiempo de registro).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_jzoQkZVzs5U/TUvIkQiAyvI/AAAAAAAAAUY/xJ8nbIIm0O8/s1600/FreeMachines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="102" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/TUvIkQiAyvI/AAAAAAAAAUY/xJ8nbIIm0O8/s320/FreeMachines.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Por el módico precio de nada de nada te prestan 3 procesadores, 120GB de HD y 6144MB de RAM más las licencias de la máquina que elijas.&lt;br /&gt;
&lt;br /&gt;
Si decides pagar por la cuenta ProPlus 49$ puedes elegir plantillas más complejas como Sharepoint 2010&lt;br /&gt;
:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_jzoQkZVzs5U/TUvJzkvTejI/AAAAAAAAAUg/772XIboIcJw/s1600/Machines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="139" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/TUvJzkvTejI/AAAAAAAAAUg/772XIboIcJw/s320/Machines.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: right;"&gt;&lt;s&gt;Sí, funciona aquí, pero no en Azure VM Role...&lt;/s&gt;&lt;/div&gt;&lt;br /&gt;
Cuando arrancas la máquina ya tienes disponible tu URL para poder acceder a ella, todo sorprendentemente sencillo. Puedes compartir tus m'aquinas con otros usuarios de CloudShare y además puedes guardar snapshots de tus máquinas y recuperarlos en caso de que las estropees...&lt;br /&gt;
&lt;br /&gt;
El inconveniente de todo esto es que las máquinas se apagan a los 30 minutos de inactividad (y cuando las despiertas les ha cambiado la IP externa), pero aún así, es un entorno gratis y fantástico para hacer demos o testings.&lt;br /&gt;
&lt;br /&gt;
Os aconsejo que lo probéis.&lt;br /&gt;
&lt;br /&gt;
Y tampoco ofrecen VPN en la versión gratis, por si estabas pensando saltarte el límite de MegaVideo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-1369056084431127256?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=MxpNAk9UKro:kkIqPKvZUuw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=MxpNAk9UKro:kkIqPKvZUuw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=MxpNAk9UKro:kkIqPKvZUuw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=MxpNAk9UKro:kkIqPKvZUuw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=MxpNAk9UKro:kkIqPKvZUuw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/MxpNAk9UKro" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/1369056084431127256/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=1369056084431127256" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/1369056084431127256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/1369056084431127256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/MxpNAk9UKro/efimeras-maquinas-virtuales-gratuitas.html" title="Efímeras máquinas virtuales gratuitas en CloudShare" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_jzoQkZVzs5U/TUvIkQiAyvI/AAAAAAAAAUY/xJ8nbIIm0O8/s72-c/FreeMachines.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/02/efimeras-maquinas-virtuales-gratuitas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcFQHoyeSp7ImA9Wx9VFUo.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-1229653961981040457</id><published>2011-02-01T16:26:00.000+01:00</published><updated>2011-02-01T16:26:51.491+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-01T16:26:51.491+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Azure" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Ni SharePoint ni SQL Server funcionan en Azure VM Role</title><content type="html">Como ya sabréis los que me leéis he estado intentando que me dejaran participar en la beta del Azure VM Role, pues bien, he conseguido una entrevista con los encargados de darme el acceso y me han hecho la pregunta más temida... ¿Y tu eso para que lo quieres?&lt;br /&gt;
&lt;br /&gt;
Mi idea era montar una granja en la nube  con SQL y SharePoint de manera que pudiese usar SSIS, nuestro cubo de BI, Reporting Services y SharePoint.&lt;br /&gt;
&lt;br /&gt;
Bien, pues me han comentado que "De momento es imposible" al parecer hay problemas de conectividad entre las máquinas de VM Role y no funcionan correctamente ni SharePoint ni SQL Server.&lt;br /&gt;
&lt;br /&gt;
Consejo que me dan, que lo monte todo en Office 365. Pero claro, &lt;strike&gt;primero de todo, es imposible pronunciar Office 365 en inglés y segundo,&lt;/strike&gt; ¿qué pasa con mi cubo y mis reporting services si no puedo sacar web services del sandbox de Office 365? pues que no pueden funcionar, con lo que me quedaría con la mitad de mi solución funcionando y la otra tristemente olvidada en el último rincón de mi disco duro.&lt;br /&gt;
&lt;br /&gt;
Solución que me dan... que me espere hasta el verano.&lt;br /&gt;
&lt;br /&gt;
Voy a intentar que mi jefe me de 6 meses de vacaciones, pero si esto no funciona voy a tener que buscarme otro sitio en donde montar mi granja.&lt;br /&gt;
&lt;br /&gt;
Ah y, por si alguien lo dudaba, al final no me han dado acceso al beta program.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="color: #999999; font-size: x-small;"&gt;Y los de Google mientras tanto &amp;nbsp;regalando portátiles para que la gente pruebe el Chrome OS...&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-1229653961981040457?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=NYdxDg4oKWk:PbVinYLFzVI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=NYdxDg4oKWk:PbVinYLFzVI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=NYdxDg4oKWk:PbVinYLFzVI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=NYdxDg4oKWk:PbVinYLFzVI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=NYdxDg4oKWk:PbVinYLFzVI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/NYdxDg4oKWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/1229653961981040457/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=1229653961981040457" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/1229653961981040457?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/1229653961981040457?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/NYdxDg4oKWk/ni-sharepoint-ni-sql-server-funcionan.html" title="Ni SharePoint ni SQL Server funcionan en Azure VM Role" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/02/ni-sharepoint-ni-sql-server-funcionan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUFRXY8fyp7ImA9Wx9VEk8.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-8619444673531069914</id><published>2011-01-28T14:10:00.000+01:00</published><updated>2011-01-28T14:10:14.877+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-28T14:10:14.877+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Azure" /><title>Subiendo Máquinas a Azure VM Role</title><content type="html">Dado que toda la tecnología que usamos en &lt;a href="http://www.stratexsystems.com/"&gt;Stratex Systems&lt;/a&gt; es de Microsoft parece coherente que alojemos nuestras máquinas virtuales en Azure... &lt;strike&gt;¡Beta!, tengo miedo&lt;/strike&gt;. Como todavía hay poca información disponible sobre este tema voy a intentar escribir un poco sobre mi experiencia.&lt;br /&gt;
&lt;br /&gt;
Lo primero que quiero deciros a los que estéis intentando probar el VM Role es que hace falta que os acepten en el beta program. Hay un montón de webs &lt;strike&gt;incluidas muchas de Microsoft&lt;/strike&gt; que dan por hecho que solo con daros de alta ya sería suficiente para empezar a trabajar, pero no es cierto.&lt;br /&gt;
&lt;br /&gt;
Para quien no sepa de qué va esto, se trata de un sistema de venta de IaaS (Infraestructura como Servicio) en donde tú subes tus discos duros de Hyper-V tras instalarles todo el software que necesitas y ellos se encargan de darles vida. Luego te cobran por espacio el almacenado, el número de procesadores y la cantidad de RAM que utilices (por hora).&lt;br /&gt;
&lt;br /&gt;
Bien, no puedo hablar mucho más de este tema ya que todavía estoy esperando a que me aprueben la solicitud...&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_jzoQkZVzs5U/TUK7CtV_dAI/AAAAAAAAAUM/LDi1nbNr1co/s1600/AzureVMRole.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="137" src="http://2.bp.blogspot.com/_jzoQkZVzs5U/TUK7CtV_dAI/AAAAAAAAAUM/LDi1nbNr1co/s320/AzureVMRole.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;s&gt;&lt;span class="Apple-style-span" style="color: #999999; font-size: x-small;"&gt;Ahora mismo me siento como un chaval de 15 años, mucha teoría y poca práctica.&lt;/span&gt;&lt;/s&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-8619444673531069914?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=FdJpekhDEWg:quxylXTK4TA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=FdJpekhDEWg:quxylXTK4TA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=FdJpekhDEWg:quxylXTK4TA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=FdJpekhDEWg:quxylXTK4TA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=FdJpekhDEWg:quxylXTK4TA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/FdJpekhDEWg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/8619444673531069914/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=8619444673531069914" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8619444673531069914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8619444673531069914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/FdJpekhDEWg/subiendo-maquinas-azure-vm-role.html" title="Subiendo Máquinas a Azure VM Role" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_jzoQkZVzs5U/TUK7CtV_dAI/AAAAAAAAAUM/LDi1nbNr1co/s72-c/AzureVMRole.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2011/01/subiendo-maquinas-azure-vm-role.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUHQX44fip7ImA9Wx9SE0U.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-1946418133645429219</id><published>2010-12-03T15:23:00.000+01:00</published><updated>2010-12-03T15:23:50.036+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-03T15:23:50.036+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Copiando ListViewWebParts entre diferentes sitios con sus correspondientes vistas personalizadas</title><content type="html">&lt;strike&gt;Por un segundo he dudado si escribir el resto del post en el título.&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
En otro ejemplo de lo que ahora he dado en llamar Guerrilla Coding &lt;strike&gt;gracias a mis asombrosos conocimientos de la lengua que se habla en la pérfida Albión ahora puedo usar palabras como guerrilla&lt;/strike&gt; en un par de horas tuve que hacer un programita para copiar cientos de páginas llenas de ListViewWebparts cada uno con su vista personalizada. &lt;strike&gt;Yo no sé vosotros, pero yo cada vez que tengo que tocar el ListViewWebpart me pongo a temblar...&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
Los ListViewWebparts crean en la lista de la que son "hijos" una vista Oculta cuando nosotros personalizamos la vista del webpart. Esto implica que para copiar los webparts a otro sitio tendremos que copiar las vistas en la lista del sitio de destino y apuntar al webpart a la nueva vista, no sé si me explico bien... mejor pondré un trozo de código...&lt;br /&gt;
&lt;br /&gt;
Aquí lo que hago es copiar los webparts de cada fichero de origen al de destino, y les doy un tratamiento especial si son ListViewWebpart &lt;strike&gt;para esta aplicación es suficiente&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;private static void CopyWebParts(SPFile origFile, SPFile destFile)
        {
            SPLimitedWebPartManager origWpm = origFile.GetLimitedWebPartManager(PersonalizationScope.Shared);
            SPLimitedWebPartManager destWpm = destFile.GetLimitedWebPartManager(PersonalizationScope.Shared);

            DeleteWebparts(destWpm);

            foreach (Microsoft.SharePoint.WebPartPages.WebPart webpart in origWpm.WebParts)
            {
                Microsoft.SharePoint.WebPartPages.WebPart newWp;

                if (webpart is ListViewWebPart)
                    newWp = UpdateListViewWebPart(webpart as ListViewWebPart, origFile.GetWeb(), destFile.GetWeb());
                else
                    newWp = webpart;

                destWpm.AddWebPart(newWp, Common.ConvertToString(newWp.ZoneID), newWp.ZoneIndex);
            }

            try
            {
                destFile.Publish("Added Web Parts");
                destFile.Approve("Web Part additions approved");
            }
            catch { }
        }

        private static ListViewWebPart UpdateListViewWebPart(ListViewWebPart webpart, SPWeb origWeb, SPWeb destWeb)
        {
            ListViewWebPart newWebPart = webpart; //yeah I know.

            string oldListName = webpart.ListName;
            string oldViewGuid = webpart.ViewGuid;

            SPList OrigList = origWeb.Lists.GetList(new Guid(oldListName), true);
            
            SPList DestList = destWeb.Lists[OrigList.Title];

            SPView OrigView = OrigList.GetView(new Guid(oldViewGuid));
            SPView DestView = DestList.Views.Add(string.Empty, OrigView.ViewFields.ToStringCollection(), OrigView.Query,
                OrigView.RowLimit, OrigView.Paged, OrigView.DefaultView);
            DestView.Hidden = OrigView.Hidden;
            DestView.Scope = OrigView.Scope;
            DestView.ApplyStyle(destWeb.ViewStyles.StyleByID(Convert.ToInt32(OrigView.StyleID)));

            DestView.Update();

            newWebPart.ViewGuid = DestView.ID.ToString("B").ToUpper();
            newWebPart.ListName = destWeb.Lists[OrigList.Title].ID.ToString("B").ToUpper();


            return newWebPart;
        }&lt;/pre&gt;&lt;pre class="c#" name="code"&gt;&lt;/pre&gt;&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Y, contra todo pronóstico, funcionó... Espero no tener que tocar estos webparts otra vez en mucho tiempo.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-1946418133645429219?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=KIHE98tDJdA:mHJJ-E-2Snw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=KIHE98tDJdA:mHJJ-E-2Snw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=KIHE98tDJdA:mHJJ-E-2Snw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=KIHE98tDJdA:mHJJ-E-2Snw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=KIHE98tDJdA:mHJJ-E-2Snw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/KIHE98tDJdA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/1946418133645429219/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=1946418133645429219" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/1946418133645429219?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/1946418133645429219?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/KIHE98tDJdA/copiando-listviewwebparts-entre.html" title="Copiando ListViewWebParts entre diferentes sitios con sus correspondientes vistas personalizadas" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/12/copiando-listviewwebparts-entre.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ICQn84cCp7ImA9Wx9TFE8.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-423841296544279722</id><published>2010-11-22T11:26:00.000+01:00</published><updated>2010-11-22T11:26:03.138+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-22T11:26:03.138+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Code Snippets en C# y ¿Por qué mi binding TwoWay no funciona?</title><content type="html">Bien, respecto al problema de los bindings TwoWays, hoy he aprendido que no funcionan por arte de magia, si no que cada propiedad tiene que implementar la notificación de cambio de propiedad... vamos lo que viene a ser la INotifyPropertyChanged. No es muy complicado, pero se tarda un poco más que en declarar la propiedad con notificación, por cierto viene todo bien explicado &lt;a href="http://msdn.microsoft.com/en-us/library/ms743695.aspx"&gt;aquí&lt;/a&gt;, y esto nos lleva al tema de los Code Snippets.&lt;br /&gt;
&lt;br /&gt;
Lo de crear Code Snippets (Fragentos de Código) es una de esas cosas que siempre he dejado para aprender más tarde y al final nunca he aprendido... hasta hoy, que tenía que hacer un objeto con más de treinta propiedades que lanzasen el PropertyChanged y no he podido retrasarlo más.&lt;br /&gt;
&lt;br /&gt;
Para aumentar mi productividad he perdido un poco el tiempo y me he creado un Code Snipplet para las propiedades que implementan el INotifyPropertyChanged, lo he llamado propNot &lt;strike&gt;en otro alarde de originalidad sin precedentes&lt;/strike&gt;.&lt;br /&gt;
Para ello, en Visual Studio me fui a Tools y desde allí al Code Snippets Manager. Una vez allí seleccioné C# y luego copié &lt;strike&gt;habilmente&lt;/strike&gt; la dirección de la carpeta de los Code Snippets de usuario (My Code Snippets).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_jzoQkZVzs5U/TOo9rNLZ-rI/AAAAAAAAAUE/2_9HisWq_rk/s1600/CodeSnippetsUrl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://2.bp.blogspot.com/_jzoQkZVzs5U/TOo9rNLZ-rI/AAAAAAAAAUE/2_9HisWq_rk/s320/CodeSnippetsUrl.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Me situé en esa carpeta, creé un fichero .snippet y escribí esto:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"&amp;gt;
 &amp;lt;CodeSnippet Format="1.0.0"&amp;gt;
  &amp;lt;Header&amp;gt;
   &amp;lt;Title&amp;gt;propNot&amp;lt;/Title&amp;gt;
   &amp;lt;Shortcut&amp;gt;propNot&amp;lt;/Shortcut&amp;gt;
   &amp;lt;Description&amp;gt;Code snippet for properties with NotifyPropertyChanged&amp;lt;/Description&amp;gt;
   &amp;lt;Author&amp;gt;Chan&amp;lt;/Author&amp;gt;
   &amp;lt;SnippetTypes&amp;gt;
    &amp;lt;SnippetType&amp;gt;Expansion&amp;lt;/SnippetType&amp;gt;
    &amp;lt;SnippetType&amp;gt;SurroundsWith&amp;lt;/SnippetType&amp;gt;
   &amp;lt;/SnippetTypes&amp;gt;
  &amp;lt;/Header&amp;gt;
  &amp;lt;Snippet&amp;gt;
   &amp;lt;Declarations&amp;gt;
    &amp;lt;Literal&amp;gt;
     &amp;lt;ID&amp;gt;privName&amp;lt;/ID&amp;gt;
     &amp;lt;Default&amp;gt;privName&amp;lt;/Default&amp;gt;
     &amp;lt;ToolTip&amp;gt;Private name of the property&amp;lt;/ToolTip&amp;gt;
    &amp;lt;/Literal&amp;gt;
    &amp;lt;Literal&amp;gt;
     &amp;lt;ID&amp;gt;pubName&amp;lt;/ID&amp;gt;
     &amp;lt;Default&amp;gt;pubName&amp;lt;/Default&amp;gt;
     &amp;lt;ToolTip&amp;gt;Public name of the property&amp;lt;/ToolTip&amp;gt;
    &amp;lt;/Literal&amp;gt;
    &amp;lt;Literal&amp;gt;
     &amp;lt;ID&amp;gt;type&amp;lt;/ID&amp;gt;
     &amp;lt;Default&amp;gt;string&amp;lt;/Default&amp;gt;
     &amp;lt;ToolTip&amp;gt;Type of the property&amp;lt;/ToolTip&amp;gt;
    &amp;lt;/Literal&amp;gt;
   &amp;lt;/Declarations&amp;gt;
   &amp;lt;Code Language="csharp"&amp;gt;&amp;lt;![CDATA[private $type$ $privName$;
        
    public $type$ $pubName$
    {
     get { return $privName$; }

     set
     {
      $privName$ = value;
      // Call NotifyPropertyChanged when the property is updated
      NotifyPropertyChanged("$pubName$");
     }
    }]]&amp;gt;
   &amp;lt;/Code&amp;gt;
  &amp;lt;/Snippet&amp;gt;
 &amp;lt;/CodeSnippet&amp;gt;
&amp;lt;/CodeSnippets&amp;gt;&lt;/pre&gt;&lt;br /&gt;
Probado y funcionando, tanto el binding TwoWay como los Code Snippets. Ahora que sé cómo se hace lo voy a hacer muy a menudo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-423841296544279722?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=ktPj_YYgWsk:t6DHUBCbWcA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=ktPj_YYgWsk:t6DHUBCbWcA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=ktPj_YYgWsk:t6DHUBCbWcA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=ktPj_YYgWsk:t6DHUBCbWcA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=ktPj_YYgWsk:t6DHUBCbWcA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/ktPj_YYgWsk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/423841296544279722/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=423841296544279722" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/423841296544279722?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/423841296544279722?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/ktPj_YYgWsk/code-snippets-en-c-y-por-que-mi-binding.html" title="Code Snippets en C# y ¿Por qué mi binding TwoWay no funciona?" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_jzoQkZVzs5U/TOo9rNLZ-rI/AAAAAAAAAUE/2_9HisWq_rk/s72-c/CodeSnippetsUrl.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/11/code-snippets-en-c-y-por-que-mi-binding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8MQ3k_eyp7ImA9Wx5aE0w.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-8001065988043496474</id><published>2010-11-09T15:28:00.000+01:00</published><updated>2010-11-09T15:28:02.743+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-09T15:28:02.743+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Cambiando el NewValue en el PropertyChangedCallback</title><content type="html">Normalmente no escribo sobre Silverlight, básicamente es por dos razones, la primera es que todo viene perfectamente explicado en un montón de blogs &lt;strike&gt;justo al contrario que SharePoint&lt;/strike&gt; y la segunda es porque tampoco trabajo tanto con Silverlight como para encontrarme problemas. &lt;strike&gt;Era perfecto hasta que lo conocí, como tantas otras cosas...&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;
&lt;/strike&gt;&lt;br /&gt;
Últimamente estoy teniendo que usar bastante esta tecnología &lt;strike&gt;casi nueva para mí y ya &lt;a href="http://arstechnica.com/microsoft/news/2010/11/silverlight-html5-and-microsofts-opaque-development-strategy.ars"&gt;desfasada para Microsoft&lt;/a&gt;&lt;/strike&gt; y se me plantean dudas, como por ejemplo la de hoy.&lt;br /&gt;
&lt;br /&gt;
Estaba creando un botón para añadirlo a una DataGrid como DataGridTemplateColumn y necesitaba crearme una DependencyProperty para poder hacer el Binding, hasta aquí todo más o menos claro, pero en el último momento &lt;strike&gt;cuando ya me veía victorioso&lt;/strike&gt; me surgió una duda... si la propiedad (una URL en este caso) no cumple con los requisitos que yo quiero ¿Cómo hago para modificar el NewValue en el mismo PropertyChangedCallback?&lt;br /&gt;
&lt;br /&gt;
El truco está en llamar a SetValue, que no dispara el evento, porque si no obviamente crearíamos un bucle infinito. Algo así.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public string CommentsURL
{
    get { return (string)GetValue(CommentsURLProperty); }
    set { SetValue(CommentsURLProperty, value); }
}

public static readonly DependencyProperty CommentsURLProperty =
    DependencyProperty.Register("CommentsURL", typeof(string), typeof(ButtonComments),
    new PropertyMetadata(new PropertyChangedCallback(ChangedURL)));

private static void ChangedURL(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    try
    {
        string url = e.NewValue.ToString().Split(',')[0];
        new Uri(url);
        d.SetValue(e.Property, url);

        (d as ButtonComments).IsEnabled = true;
    }
    catch
    {
        (d as ButtonComments).IsEnabled = false;
    }
}&lt;/pre&gt;&lt;strike&gt;Nótese la sutileza del código siempre intentando evitar una excepción antes de que se produzca.&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;
&lt;/strike&gt;&lt;br /&gt;
Al final, por si alguien siente curiosidad, el webpart ha quedado así:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_jzoQkZVzs5U/TNG-3kLeAgI/AAAAAAAAAUA/Xgyd-81DU7c/s1600/IndicatorValues.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="78" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/TNG-3kLeAgI/AAAAAAAAAUA/Xgyd-81DU7c/s320/IndicatorValues.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Los intelectuales arreglan los problemas, los genios los evitan."&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-8001065988043496474?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=OcrttF4orxA:Y6JAj0crb2Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=OcrttF4orxA:Y6JAj0crb2Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=OcrttF4orxA:Y6JAj0crb2Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=OcrttF4orxA:Y6JAj0crb2Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=OcrttF4orxA:Y6JAj0crb2Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/OcrttF4orxA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/8001065988043496474/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=8001065988043496474" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8001065988043496474?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/8001065988043496474?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/OcrttF4orxA/cambiando-el-newvalue-en-el.html" title="Cambiando el NewValue en el PropertyChangedCallback" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_jzoQkZVzs5U/TNG-3kLeAgI/AAAAAAAAAUA/Xgyd-81DU7c/s72-c/IndicatorValues.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/11/cambiando-el-newvalue-en-el.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNSH8zcSp7ImA9Wx5bEU0.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-255519276149993962</id><published>2010-10-26T17:48:00.001+02:00</published><updated>2010-10-26T17:49:59.189+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-26T17:49:59.189+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Otros" /><title>SharePoint y RPM de New Relic</title><content type="html">Acabo de instalar en uno de mis servers de demo una copia del &lt;a href="http://www.newrelic.com/RPMlite-dotnet.html"&gt;RPM de New Relic&lt;/a&gt; para ver cómo se comportaba con SharePoint y qué es lo que hacía.&lt;br /&gt;
&lt;br /&gt;
Increiblemente se ha instalado sin ningún problema y ha empezado a funcionar &lt;strike&gt;cosa poco común cuando tratamos de SharePoint&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
Tras instalarlo,&lt;strike&gt; la versión gratis por supuesto&lt;/strike&gt;, y registrarlo me dieron una licencia gold 8 días para que probase el producto en toda su plenitud por lo que a los pocos minutos de desplegar en mi servidor ya tenía disponibles un buen montón de estadísticas y gráficas que me confirmaban otra vez que mis web services son lentos y que los tiempos de respuesta de MOSS recién despertado de un IISRESET no son los mejores del mundo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_jzoQkZVzs5U/TMbxH_Qg_wI/AAAAAAAAAT4/z0NTlW_5URo/s1600/relicGraph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://2.bp.blogspot.com/_jzoQkZVzs5U/TMbxH_Qg_wI/AAAAAAAAAT4/z0NTlW_5URo/s320/relicGraph.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Me han gustado bastante las gráficas relativas al rendimiento del sistema. Nunca antes fue tan sencillo para un empleado demostrar que el server es lento y que hay que ampliarlo y en qué parte, bien sea el SQL, la RAM o la CPU &lt;strike&gt;se les ha olvidado el disco duro&lt;/strike&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_jzoQkZVzs5U/TMby6Z6Ot2I/AAAAAAAAAT8/sIgi0EGHXr8/s1600/relicGraph2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://4.bp.blogspot.com/_jzoQkZVzs5U/TMby6Z6Ot2I/AAAAAAAAAT8/sIgi0EGHXr8/s320/relicGraph2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Para los que duden en probarlo les puedo asegurar que (en mi entorno) tanto SharePoint, como los web services, como los reporting services como todo lo demás están funcionando perfectamente, o por lo menos tan bien como antes &lt;strike&gt;acabo de encontrar, gracias al RPM un error en un report, ya voy a estar dándole la vara al de BI&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
En fin, que como lo mío es quejarme y esta vez no he podido no comento más de este producto, que además no me pagan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;Con los servidores públicos tan gordotes que he tenido bajo mi bota y ahora tengo que hacer click muy rápido para hacer como si hubiese tráfico...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;Menos pelo, menos poder, de toda la vida.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-255519276149993962?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=8Q8_kgw6GQs:_YneUdzKn44:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=8Q8_kgw6GQs:_YneUdzKn44:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=8Q8_kgw6GQs:_YneUdzKn44:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=8Q8_kgw6GQs:_YneUdzKn44:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=8Q8_kgw6GQs:_YneUdzKn44:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/8Q8_kgw6GQs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/255519276149993962/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=255519276149993962" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/255519276149993962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/255519276149993962?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/8Q8_kgw6GQs/sharepoint-y-rpm-de-new-relic.html" title="SharePoint y RPM de New Relic" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_jzoQkZVzs5U/TMbxH_Qg_wI/AAAAAAAAAT4/z0NTlW_5URo/s72-c/relicGraph.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/10/sharepoint-y-rpm-de-new-relic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ECRXkyfSp7ImA9Wx5XF0w.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-3157256027557190701</id><published>2010-09-17T11:27:00.000+02:00</published><updated>2010-09-17T11:27:44.795+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-17T11:27:44.795+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Lambdas, Method Extensions y RunWithElevatedPrivileges</title><content type="html">A estas alturas ya no es un problema para nadie abrir un sitio como administrador independientemente del usuario que este logueado, sin embargo, quiero proponer una función que me parece bastante útil.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;/// &lt;summary&gt;
        /// Returns a NEW site with full permissions
        /// &lt;/summary&gt;
        public static SPSite OpenSiteWithElevatedPrivileges(this SPSite site)
        {
            SPSite newSite = null;

            SPSecurity.RunWithElevatedPrivileges(() =&amp;gt; newSite = new SPSite(site.ID));

            return newSite;
        }&lt;/pre&gt;Resulta cómodo, ¿no? A mí me gusta hacer&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;SPSite site = SPContext.Current.Site.OpenSiteWithElevatedPrivileges();&lt;/pre&gt;¿Qué opináis?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-3157256027557190701?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=wSA2hrHFLdc:JvRG1N7ZiU8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=wSA2hrHFLdc:JvRG1N7ZiU8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=wSA2hrHFLdc:JvRG1N7ZiU8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=wSA2hrHFLdc:JvRG1N7ZiU8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=wSA2hrHFLdc:JvRG1N7ZiU8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/wSA2hrHFLdc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/3157256027557190701/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=3157256027557190701" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/3157256027557190701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/3157256027557190701?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/wSA2hrHFLdc/lambdas-method-extensions-y.html" title="Lambdas, Method Extensions y RunWithElevatedPrivileges" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/09/lambdas-method-extensions-y.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04DRHs8fCp7ImA9Wx5XFUg.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-2995792650207174912</id><published>2010-09-15T13:54:00.001+02:00</published><updated>2010-09-15T13:59:35.574+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-15T13:59:35.574+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Microsoft Charts Controls y MOSS2007</title><content type="html">Hacía ya bastante tiempo que sabía de la existencia de estos controles, &lt;strike&gt;pero nunca se me había planteado la necesidad de usarlos. Las dos veces que he tenido que hacer graficas las he creado a mano poniendo puntos en un bmp (que es lo más simple)&lt;/strike&gt;  &lt;br /&gt;
Sin embargo ahora en Manigent tenemos que hacer un montón de gráficas complejas… pensé en usar Excel Services, pero no tenía sentido mandar datos del modelo de objetos a un libro de Excel y crear la gráfica desde ahí por lo que al final me decidí por usar los controles de .Net  &lt;br /&gt;
&lt;br /&gt;
Para ello seguí los pasos de &lt;a href="http://davidhayden.com/blog/dave/archive/2008/10/26/FreeASPNETWindowsFormsChartControlsVisualStudio2008.aspx"&gt;este blog&lt;/a&gt; para instalar todo lo necesario en el entorno de desarrollo:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;amp;displaylang=es"&gt;ASP.NET and Windows Forms Chart Controls for .NET Framework 3.5 SP1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=581FF4E3-749F-4454-A5E3-DE4C463143BD&amp;amp;displaylang=es"&gt;Language Pack for ASP.NET and Windows Forms Chart Controls&lt;/a&gt; (si instalas uno diferente del inglés)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=1D69CE13-E1E5-4315-825C-F14D33A303E9&amp;amp;displaylang=en"&gt;Visual Studio 2008 Add-on for the Chart Controls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;amp;displaylang=es"&gt;Installation instructions for Chart Controls for .NET Framework and the documentation of the API.&lt;/a&gt; (si eres de esos)&lt;/li&gt;
&lt;/ul&gt;Por supuesto, no leí las instrucciones si no que directamente me puse a crear un webpart.  &lt;br /&gt;
Lo primero que hice fue referenciar la librería System.Web.DataVisualization que estaba instalada en C:\Program Files\Microsoft Chart Controls\Assemblies\  &lt;br /&gt;
&lt;br /&gt;
Y con eso ya puedes crear el webpart en visual studio. El código que usé era una adaptación de un ejemplo que venía en las demos de la documentación:  &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public class ControlAssessmentChart : Microsoft.SharePoint.WebPartPages.WebPart
    {
        Chart Chart1 = new Chart();

        protected override void CreateChildControls()
        {
            Chart1.Width = 400;
            Chart1.Height = 300;
            Chart1.RenderType = RenderType.ImageTag;

            Chart1.Palette = ChartColorPalette.BrightPastel;
            Title t = new Title("StratEx Testing Chart", Docking.Top,
                new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold)
                , System.Drawing.Color.FromArgb(26, 59, 105));
            Chart1.Titles.Add(t);
            Chart1.ChartAreas.Add("Test 1");

            // create a couple of Test
            Chart1.Series.Add("Test 1");
            Chart1.Series.Add("Test 2");

            //ChartType can also be added to the series
            // add points to Test 1
            Chart1.Series["Test 1"].Points.AddY(5);
            Chart1.Series["Test 1"].Points.AddY(8);
            Chart1.Series["Test 1"].Points.AddY(12);
            Chart1.Series["Test 1"].Points.AddY(6);
            Chart1.Series["Test 1"].Points.AddY(9);
            Chart1.Series["Test 1"].Points.AddY(4);

            // add points to Test 2
            Chart1.Series["Test 2"].Points.AddY(2);
            Chart1.Series["Test 2"].Points.AddY(6);
            Chart1.Series["Test 2"].Points.AddY(18);
            Chart1.Series["Test 2"].Points.AddY(16);
            Chart1.Series["Test 2"].Points.AddY(21);
            Chart1.Series["Test 2"].Points.AddY(14);

            Chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
            Chart1.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
            Chart1.BorderlineDashStyle = ChartDashStyle.Solid;
            Chart1.BorderWidth = 2;

            Chart1.Legends.Add("Legend1");

            Chart1.Legends["Legend1"].Enabled = true;

            Controls.Add(Chart1);
        }
    }&lt;/pre&gt;Tras crear el webpart, intenté ejecutarlo en sharepoint y recibí el error:  &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;[HttpException (0x80004005): Error executing child request for ChartImg.axd.]  &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;Para solucionarlo seguí el consejo de &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/thread/1dc4b352-c9a5-49dc-8f35-9b176509faa1"&gt;este foro&lt;/a&gt; y añadí la línea:  &lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;add path="ChartImg.axd" verb="GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/&amp;gt;&lt;/pre&gt;En el web.config (dentro de &amp;lt;system.web&amp;gt;&amp;lt;httpHandlers&amp;gt;)  &lt;br /&gt;
Acto seguido volví a intentar ver el webpart, pero me encontré con que:  &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;[DirectoryNotFoundException: Invalid temp directory in chart handler configuration [c:\TempImageFiles\].]  &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;Para solucionar este tuve que hacer caso a &lt;a href="http://forums.aspfree.com/net-development-11/invalid-temp-directory-in-chart-handler-configuration-261429.html"&gt;este post&lt;/a&gt; y añadir:  &lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;add key="ChartImageHandler" value="storage=file;timeout=20;" /&amp;gt;&lt;/pre&gt;En el web.config dentro de &amp;lt;appSettings&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;Finalmente lo conseguimos.  &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_jzoQkZVzs5U/TJCkNOrSSiI/AAAAAAAAAS4/tpvizhDKm5s/s1600-h/Radar%5B2%5D.png"&gt;&lt;img alt="Radar" border="0" height="196" src="http://lh6.ggpht.com/_jzoQkZVzs5U/TJCkN1TKIgI/AAAAAAAAAS8/TQt5FvNnih8/Radar_thumb.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Radar" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_jzoQkZVzs5U/TJCkONkK0OI/AAAAAAAAATA/HrAGyZ0kA4U/s1600-h/StackedBar%5B2%5D.png"&gt;&lt;img alt="StackedBar" border="0" height="197" src="http://lh3.ggpht.com/_jzoQkZVzs5U/TJCkOgi886I/AAAAAAAAATE/B1LBQ-VY-QM/StackedBar_thumb.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="StackedBar" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_jzoQkZVzs5U/TJCkPIeuTrI/AAAAAAAAATI/xREXCkScCx4/s1600-h/StackedColumn%5B2%5D.png"&gt;&lt;img alt="StackedColumn" border="0" height="193" src="http://lh6.ggpht.com/_jzoQkZVzs5U/TJCkPoqfxuI/AAAAAAAAATM/a8T-eB3QPec/StackedColumn_thumb.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="StackedColumn" width="244" /&gt;&lt;/a&gt;  &lt;/div&gt;Estas gráficas corresponden a un mismo set de datos (diferente al del ejemplo) solo cambiando el parámetro ChartType de las series.  &lt;br /&gt;
&lt;br /&gt;
Parece potente, a ver como rinde en producción…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-2995792650207174912?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=j816NB0eHL0:kCpmNuhqf2M:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=j816NB0eHL0:kCpmNuhqf2M:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=j816NB0eHL0:kCpmNuhqf2M:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=j816NB0eHL0:kCpmNuhqf2M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=j816NB0eHL0:kCpmNuhqf2M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/j816NB0eHL0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/2995792650207174912/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=2995792650207174912" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/2995792650207174912?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/2995792650207174912?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/j816NB0eHL0/microsoft-charts-controls-y-moss2007.html" title="Microsoft Charts Controls y MOSS2007" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_jzoQkZVzs5U/TJCkN1TKIgI/AAAAAAAAAS8/TQt5FvNnih8/s72-c/Radar_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/09/microsoft-charts-controls-y-moss2007.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQ34zfip7ImA9Wx5XFEo.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-6611533414830669640</id><published>2010-09-14T16:36:00.000+02:00</published><updated>2010-09-14T16:36:42.086+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-14T16:36:42.086+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Otros" /><title>Vuelvo a la carga</title><content type="html">Ya hace un montón de meses que no escribo en el blog. Dado el abultadísimo número de visitas de este blog me atrevo a decir sin equivocarme que si estás leyendo esto ya sabes que es porque me he mudado a Londres.&amp;nbsp;El cambio ha sido grande pero, aprovechando que he sobrevivido, he decidido volver a retomar el blog, &lt;s&gt;no ya con fuerzas renovadas si no, más bien, con las pocas fuerzas que me quedan&lt;/s&gt;.&lt;br /&gt;
&lt;br /&gt;
Por cierto, lo del número de visitas lo digo con cariño porque tener una audiencia como la que tengo me permite en cada post que escribo poder recordar las caras de las personas que lo van a leer y sentirme un poco entre amigos por muy lejos que esté.&lt;br /&gt;
&lt;br /&gt;
En otro orden de cosas, como sigo siendo un visionario, &lt;strike&gt;pero según la primera definición de la &lt;/strike&gt;&lt;a href="http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&amp;amp;LEMA=visionario" target="_blank"&gt;RAE&lt;/a&gt;&lt;strike&gt;&lt;/strike&gt;, he decidido hacer un blog gemelo en inglés. Mi idea es comparar la repercusión de los posts en los dos idiomas por un lado, y por otro practicar traduciendo mis pensamientos al inglés… A ver como traduzco lo de “visionario”. &lt;strike&gt;No vayais al otro blog buscando una traducción del chiste porque no lo voy a traducir…&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;
&lt;/strike&gt;&lt;br /&gt;
El nuevo blog está aquí: &lt;a href="http://dip-en.blogspot.com/" target="_blank"&gt;Developing is Painful in English Too&lt;/a&gt;. Como podéis deducir del nombre del blog, el cambio de país no ha empañado ni un ápice mi optimismo. &lt;strike&gt;De hecho, Londres se me parece tanto a España que ya no me van quedando dudas de que el problema soy yo&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
En el ámbito tecnológico &lt;strike&gt;sigo un paso por detrás y&lt;/strike&gt; estoy trabajando a tope con MOSS 2007, &lt;strike&gt;lo que me vendrá muy bien para no tener que crear un nuevo tag en el blog para SharePoint 2010&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
Y ahora me voy al blog inglés a crear allí una entrada de presentación no sin antes deciros:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Bienvenidos todos &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;de nuevo&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt; a Developing is Painful.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-6611533414830669640?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=IbemZ7hsM4Y:pmORstoYPrY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=IbemZ7hsM4Y:pmORstoYPrY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=IbemZ7hsM4Y:pmORstoYPrY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=IbemZ7hsM4Y:pmORstoYPrY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=IbemZ7hsM4Y:pmORstoYPrY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/IbemZ7hsM4Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/6611533414830669640/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=6611533414830669640" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/6611533414830669640?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/6611533414830669640?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/IbemZ7hsM4Y/vuelvo-la-carga.html" title="Vuelvo a la carga" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/09/vuelvo-la-carga.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8HQH0-fCp7ImA9WxBVGEg.&quot;"><id>tag:blogger.com,1999:blog-1057575419884033100.post-7847524546806003671</id><published>2010-02-22T16:05:00.004+01:00</published><updated>2010-02-22T18:13:51.354+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-22T18:13:51.354+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WSS" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Búsqueda por propiedades administradas desde parámetros en la URL</title><content type="html">&lt;p&gt;Para hacer mi nube de tags mi objetivo primario era &lt;strike&gt;trabajar lo menos posible&lt;/strike&gt; aprovechar al máximo las posibilidades que nos brinda MOSS y para lograrlo, en tema de búsquedas, es primordial encontrar la forma de pasarle tu consulta a la página de resultados de búsqueda en la URL.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Al principio me desanimé bastante porque yo quería usar una clave al estilo k= o s= para las propiedades administradas, pero como seguramente habrás notado no la hay.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Por cierto aprovecho para enumerar los parámetros que conozco y así no se me olvidan:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;k&lt;/strong&gt;: Es la consulta en texto libre que mandamos al motor,&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;/Results.aspx?k=Hola&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;s&lt;/strong&gt;: Es el ámbito en el que vamos a buscar nuestra consulta,&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;/Results.aspx?k=Hola&amp;amp;s=Todos%20los%20sitios&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;v&lt;/strong&gt;: Orden de resultados,&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;Results.aspx?k=Hola&amp;amp;s=Todos%20los%20sitios&amp;amp;v=date&lt;/span&gt; (o también&lt;span style="color:#000066;"&gt; relevance&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;start&lt;/strong&gt;: Número del primer elemento que se mostrará en los resultados (útil para paginar),&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;/Results.aspx?k=Hola&amp;amp;s=Todos%20los%20sitios&amp;amp;&amp;amp;v=relevance&amp;amp;start=21&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Con esto ya tenemos para ir tirando, pero no me servía de nada para mi nube de tags. ¿Qué podía hacer? pues le pregunté a mi compañero Igor, que está haciendo un proyecto de búsquedas facetadas. Inmediatamente me dio la solución.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Para buscar por propiedades administradas tan solo tenemos que hacer la consulta de este modo:&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;span style="font-size:130%;color:#000099;"&gt;&lt;strong&gt;&lt;em&gt;k=PropiedadAdministrada:Valor&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Qué fácil va a ser ahora apuntar las consultas mediante links aprovechando el motor de búsquedas de MOSS &lt;strike&gt;y qué poco trabajo me costó preguntar&lt;/strike&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1057575419884033100-7847524546806003671?l=developingispainful.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=2KNNqoHDNFI:gMKqTCduylQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=2KNNqoHDNFI:gMKqTCduylQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=2KNNqoHDNFI:gMKqTCduylQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?a=2KNNqoHDNFI:gMKqTCduylQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopingIsPainfulporErChan?i=2KNNqoHDNFI:gMKqTCduylQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingIsPainfulporErChan/~4/2KNNqoHDNFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developingispainful.blogspot.com/feeds/7847524546806003671/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1057575419884033100&amp;postID=7847524546806003671" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/7847524546806003671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1057575419884033100/posts/default/7847524546806003671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingIsPainfulporErChan/~3/2KNNqoHDNFI/busqueda-por-propiedades-administradas.html" title="Búsqueda por propiedades administradas desde parámetros en la URL" /><author><name>Er Chan</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_jzoQkZVzs5U/SO0JBkJBRkI/AAAAAAAAAEQ/Rwe_ZiPanUY/S220/jetaPeque%C3%B1a.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://developingispainful.blogspot.com/2010/02/busqueda-por-propiedades-administradas.html</feedburner:origLink></entry></feed>

