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:
- ASP.NET and Windows Forms Chart Controls for .NET Framework 3.5 SP1
- Language Pack for ASP.NET and Windows Forms Chart Controls (si instalas uno diferente del inglés)
- Visual Studio 2008 Add-on for the Chart Controls
- Installation instructions for Chart Controls for .NET Framework and the documentation of the API. (si eres de esos)
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.]
<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\].]
<add key="ChartImageHandler" value="storage=file;timeout=20;" />En el web.config dentro de <appSettings>
Finalmente lo conseguimos.
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:
Publicar un comentario