jueves, 17 de junio de 2010

Report Viewer 10 y ASP.NET en Visual Studio 2010, paso a paso

 

logo_SQL

Como no podía ser de otra manera nos afrontamos a un nuevo reto, la generación de informes elevada a la máxima expresión, SQL Server 2008 Express R2, Reporting Services, y Visual Studio 2010.

El motivo de este post viene derivado de una necesidad del cliente como alternativa a Crystal Reports y sus costes de licencia asociados. Estudiaremos paso paso como instalar todas las distribuciones necesarias para la ejecución de informes en Visual Studio 2010. Los productos que mencionaremos a continuación son gratuitos con ciertas restricciones que también comentaremos.

Descarga de paquetes

Comenzaremos por la descarga de todos los paquetes necesarios para el desarrollo y la integración de informes con Reporting Services, estos son los siguientes:

Una vez descargados e instalados todos los paquetes, nos disponemos a abrir Visual Studio 2010 y agregamos un nuevo proyecto de aplicación web ASP.NET. Llegado a este momento es importante destacar que VS2010 no incluye la versión 10 de Report Viewer sino la 9, por lo tanto será necesario añadir a nuestro cuadro de herramientas la última versión.

Agregando referencias al proyecto

Creamos una carpeta en nuestro proyecto y la llamamos “librerias”, en esta copiamos tres DLLs que se encuentran ubicadas en el GAC_MSIL del directorio c:\windows\assembly, todas ellas en su versión 10:

  • Microsoft.ReportViewer.Common.dll
  • Microsoft.ReportViewer.ProcessingObjectModel.dll
  • Microsoft.ReportViewer.WebForms.dll

Posteriormente añadimos las referencias a nuestro proyecto web ASP.NET. Este paso es interesante tenerlo en cuenta para realizar un futuro despliegue en el servidor de producción o subir el proyecto a algún repositorio de código fuente, de esta manera tendremos todas las dependencias bien guardaditas en el árbol del proyecto y así evitaremos quebraderos de cabeza.

Remozando Visual Studio 2010

Vamos a ello, nos posicionamos sobre la ventana de cuadro de herramientas y añadimos una nueva ficha a la que podemos llamar “Reports”, de seguido elegimos los elementos y seleccionamos el control ReportViewer deMicrosoft.ReportViewer.WebForms.dll, a partir de este momento ya podemos arrastrar y soltar el control ReportViewer en cualquiera de nuestras páginas aspx. La nueva versión de este control necesita de un ScriptManager para su funcionamiento por lo que podríamos añadirlo a nuestra página Maestra para que estuviera disponible en cualquier momento.

Actualizando referencias

Hay que tener cuidadin porque al arrastrar el control ReportViewer a nuestra página, nos añade una directiva de control pero referenciado a la versión 9, tendremos que cambiarlo a la 10, además es nesesario retocar el web.config en los siguientes aspectos:

  • Actualizar versiones de assemblys de la 9 a la 10
  • Incluir el manejador AXD

Nos debería de quedar algo tal como esto:

<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>

<httpHandlers>
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</httpHandlers>
</system.web>

Generando y publicando el informe con Report Builder 3.0

report_builder

Abrimos Report Builder, y creamos un nuevo informe basado en algunas de las plantillas existentes, como anteriormente hemos instalado la base de datos de ejemplo de AdventureWorks podemos tomar esta como origen de datos, para facilitaros la labor os dejo un RDL de ejemplo generado con esta herramienta. Este informe muestra un historial de precios de todos los productos.

Una vez generado tenemos que publicarlo en Reports Manager en esta dirección:http://localhost/Reports_SQLEXPRESS2008, es una herramienta web que nos instala Reporting Services y que nos permite gestionar todos los informes que vayamos publicando, asignar permisos y organizarlos entre otras cuestiones. Por si queréis cotillear la herramienta se nos instala en Microsoft SQL Server 2008 R2 >> Configuration Tools >> Reporting Services Configuration Manager, aquí podemos cambiar el directorio virtual y muchas más cosas que investigaremos en otro post. Por cierto esta herramienta solo funciona con Internet Explorer, en el resto de navegadores tiene algunos problemillas supongo se solucionarán en próximas versiones.

Para publicar el informe simplemente cargamos el archivo desde la opción habilitada a tal efecto y le ponemos un nombre identificativo, en nuestro casopreciosProductos, este nombre es el que corresponderá a la propiedadServerReport.ReportPath del control ReportViewer

Volvemos al IDE

Ya nos queda menos, vamos a añadir una nueva página donde arrastrar un control de tipo ReportViewer, no olvidamos actualizar las directivas del control a la versión 10 y en el Code Behind de nuestra página incluimos lo siguiente:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
ServerReport serverReport = ReportViewer1.ServerReport;
serverReport.ReportServerUrl = new Uri("http://localhost/ReportServer_SQLEXPRESS2008");
serverReport.ReportPath = "/preciosProductos";
}
}

El valor de ReportServerUrl corresponderá a la propiedad Virtual Directory de Web Service URL definido en Reporting Services Configuration Manager.

Conclusiones

Visto lo visto es una muy buena opción ante Crystal Reports, todo muy bien integrado y sobre todo simple, fácil e intuitivo. Aquí os dejo algunas conclusiones:

  • La versión Express de SQL Server 2008 R2 dispone de 10Gb para nuestra base de datos, lo cual es algo más que sobrado.
  • Reporting Services solo permite trabajar con motores de bases de datos SQL Server, si quisiéramos integrar informes de otros proveedores tendremos que adquirir la licencia superior Standard o Enterprise.
  • La herramienta de generación de informes Report Builder 3.0 está un poco verde, peta errores en el diseñador en algunas ocasiones pero normalmente estable.
  • Integración del control Report Viewer 10 con tecnología AJAX.
  • La potencia de la generación de informes con Report Builder 3.0 es impresionantemente productiva, por ejemplo la inclusión de informes de tablas cruzadas, mapas de color, indicadores, gráficos, de verdad que es para echarle un ratillo y ponernos a jugar con el detenidamente.
  • Por cierto, esto también funciona en Visual Studio 2008.

Aquí os dejo el proyecto de ejemplo para Visual Studio 2010 Express:ReportExample.rar

Related Posts Plugin for WordPress, Blogger...