Social Icons

viernes, 17 de septiembre de 2010

Lambdas, Method Extensions y RunWithElevatedPrivileges

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.
/// 
        /// Returns a NEW site with full permissions
        /// 
        public static SPSite OpenSiteWithElevatedPrivileges(this SPSite site)
        {
            SPSite newSite = null;

            SPSecurity.RunWithElevatedPrivileges(() => newSite = new SPSite(site.ID));

            return newSite;
        }
Resulta cómodo, ¿no? A mí me gusta hacer
SPSite site = SPContext.Current.Site.OpenSiteWithElevatedPrivileges();
¿Qué opináis?

No hay comentarios:

miércoles, 15 de septiembre de 2010

Microsoft Charts Controls y MOSS2007

Hacía ya bastante tiempo que sabía de la existencia de estos controles, 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)
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

Para ello seguí los pasos de este blog para instalar todo lo necesario en el entorno de desarrollo:
Por supuesto, no leí las instrucciones si no que directamente me puse a crear un webpart.
Lo primero que hice fue referenciar la librería System.Web.DataVisualization que estaba instalada en C:\Program Files\Microsoft Chart Controls\Assemblies\

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:
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);
        }
    }
Tras crear el webpart, intenté ejecutarlo en sharepoint y recibí el error:

[HttpException (0x80004005): Error executing child request for ChartImg.axd.]

Para solucionarlo seguí el consejo de este foro y añadí la línea:
<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"/>
En el web.config (dentro de <system.web><httpHandlers>)
Acto seguido volví a intentar ver el webpart, pero me encontré con que:

[DirectoryNotFoundException: Invalid temp directory in chart handler configuration [c:\TempImageFiles\].]

Para solucionar este tuve que hacer caso a este post y añadir:
<add key="ChartImageHandler" value="storage=file;timeout=20;" />
En el web.config dentro de <appSettings>

Finalmente lo conseguimos.
RadarStackedBarStackedColumn
Estas gráficas corresponden a un mismo set de datos (diferente al del ejemplo) solo cambiando el parámetro ChartType de las series.

Parece potente, a ver como rinde en producción…

No hay comentarios:

martes, 14 de septiembre de 2010

Vuelvo a la carga

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. El cambio ha sido grande pero, aprovechando que he sobrevivido, he decidido volver a retomar el blog, no ya con fuerzas renovadas si no, más bien, con las pocas fuerzas que me quedan.

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é.

En otro orden de cosas, como sigo siendo un visionario, pero según la primera definición de la RAE, 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”. No vayais al otro blog buscando una traducción del chiste porque no lo voy a traducir…


El nuevo blog está aquí: Developing is Painful in English Too. Como podéis deducir del nombre del blog, el cambio de país no ha empañado ni un ápice mi optimismo. De hecho, Londres se me parece tanto a España que ya no me van quedando dudas de que el problema soy yo.

En el ámbito tecnológico sigo un paso por detrás y estoy trabajando a tope con MOSS 2007, lo que me vendrá muy bien para no tener que crear un nuevo tag en el blog para SharePoint 2010.

Y ahora me voy al blog inglés a crear allí una entrada de presentación no sin antes deciros:


Bienvenidos todos de nuevo a Developing is Painful.

2 comentarios: