martes, 28 de julio de 2009

Crystal Report, ASP.NET, paso de parámetros al reporte y a Stored Procedure

Esta guía, incluyendo código fuente, muestra como utilizar los nuevos componentes de Crystal Report en Visual Studio 2005, para mostrar reportes. Para el caso de este ejemplo utilizo una base de datos SQL Server 2000 (funciona igual con SQL 2005), he creado un reporte que esta basado en un Stored Procedure, que espera recibir @CadWhere y @CadSubQuery. Adicionalmente el reporte de Crystal espera recibir 2 parámetros adicionales, para completar los titulos, estos parámetros se llaman: Mensaje (Titulo1) y EmpresaOEM (Titulo 2), En crystal habrán sido creados como ?Mensaje y ?EmpresaOEM.

Adicionalmente el código fuente debe permitirme cambiar mis reportes en tiempo de ejecución, asi como poder cambiar el Stored Procedure fuente del .rpt, ya que tengo un aplicación Web, con un Menú amplio de reportes y debo poder mostrar el que el usuario seleccione.

Para resolver todo esto, utilizaremos los controles CrystalReportSource, SqlDataSource y CrystalReportViewer, así:

1. Cree la pagina conectenedora asp.net y crea allí los controles: CrystalReportSource, SqlDataSource y CrystalReportViewer.

2. Ahora pasaremos los parámetros al Stored Procedure, para lo que utilizaremos el control SqlDataSource. Esta es la signatura del Procedure

PROCEDURE dbo.ViewPpal (@CadWhere nvarchar(1000), @CadSubQuery nvarchar(1000))

'Aqui está nuestro código en Visual Basic, ASP.NET.
Me.SqlDataSource1.ConnectionString = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BdDemo;Data Source=LOCALHOST;

Me.SqlDataSource1.SelectCommand = "ViewPpal" 'Nombre del stored procedure

Me.SqlDataSource1.SelectParameters.Clear()
Me.SqlDataSource1.SelectParameters.Add("CadWhere","Valor del primer parámetro")

Me.SqlDataSource1.SelectParameters.Add("CadSubQuery","Valor del segundo parámetro")

Me.SqlDataSource1.DataBind()

3. Ahora pasaremos los 2 parámetros al reporte de Crystal, estos parámetros son ?Mensaje y ?EmpresaOEM

Dim Source As New CrystalDecisions.Web.DataSourceRef CrystalReportSource1.Report.FileName = "NombreReporte.rpt"

Source.TableName = "ViewPpal" 'Nombre del stored procedure

Source.DataSourceID = "SqlDataSource1" 'Aqui asocio el SqlDatasource.
CrystalSource.Report.DataSources.Add(Source)

'Ahora crea los parámetros para el reporte.

Param1 = New CrystalDecisions.Web.Parameter
Param1.Name = "Mensaje"
Param1.DefaultValue = "Titulo del reporte"
CrystalReportSource1.Report.Parameters.Add(Param1)


Param1 = New CrystalDecisions.Web.Parameter
Param1.Name = "EmpresaOEM"
Param1.DefaultValue = "Empresa Mauricio"

CrystalReportSource1.Report.Parameters.Add(Param1)


'Finalmente asocio al CrystalReportViewer el control: CrystalReportSource1
Me.CrystalReportViewer1.ReportSourceID = "CrystalReportSource1" CrystalReportSource1.DataBind()

Listo, ahora ya puede ejecutar su reporte. Algunas NOTAS IMPORTANTES:
1. Control CrystalReportSource: Aunque puede en tiempo de diseño, definirse el DataSource y la colección de parámetros del reporte, para efectos de producción es mejor que estos 2 parámetros se creen por código fuente, en mi caso al ejecutarlo me aparece un mensaje de error al intentar sacar un reporte con un Store Procedure diferente al que esta por defecto en tiempo de diseño definido en CrystalReportDatasource.FileName

2. OJO: A los Stored procedures que esperan parámetros, no debe pasarse una cadena vacia "" ni en el Wizard ni en el código fuente, sino sale un mensaje de error. Cuando no se quieren pasar datos, debe pasársele un espacio en blanco " ".

3. Acerca de SQL Server: Con esta versión de aplicación puede, cambiar sin problemas de SQL 2000 a SQL 2005, es decir si tiene la misma base de datos en las 2 versiones, lo que me permite configurar mi aplicación sin dejarla en Hard Code a un solo motor. Igualmente puede colocarse la página Web en un sitio y la base de datos en cualquier otro computador, simplemente debe ajustar su cadena de conexión de SQL en el web.config de su aplicación y este código fuente le funcionará perfectamente. Ya lo he probado.

Si desea descargar los merge Modules de Crystal Report, haga clic aquí.

Si le ha sido útil, por deje su comentario.

No hay comentarios.: