Según muchas personas, el lenguaje de programación Visual Basic .NET es un lenguaje de nivel inicial. Pero, ciertamente, no es así. Estamos acostumbrados al hecho de que el Visual Basic .NET se utiliza más a menudo en aplicaciones de Escritorio. Sin embargo, este lenguaje permite mucho más, por ejemplo, crear aplicaciones web en un marco ASP .NET.
ASP .NET admite el modelo de programación MVC (Model-View-Controller), que simplifica mucho el escalado y las pruebas de la aplicación, en comparación con el habitual ASP .NET. Este modelo tiene varias modificaciones, pero la esencia es la misma: delimitar las áreas de responsabilidad entre la lógica de negocios y la representación. Todos los frameworks web modernos se basan en tal estructura. Por lo tanto, utilizando Visual Basic .NET puede crear fácilmente aplicaciones web para frontend en Angular o cualquier otro framework.
Pero volvamos al tema de este artículo: generación de informes. Los programas de generación de informes entraron firmemente en nuestra vida a principios de los 2000, y ahora solo pocas personas se etreverán a crear un informe desde cero. Este debe ser un informe verdaderamente único que ningún generador puede hacer. Suena irónico, pero tales casos realmente ocurren. La lógica particular de la generación de informes realmente puede ser un obstáculo antes de usar generadores de informes. Sin embargo, tal vez simplemente no conoce todas sus posibilidades. Entonces, por ejemplo, pocas personas conocen y usan la capacidad de crear una plantilla de informe a partir del código de la aplicación personalizada en el generador de informes FastReport .NET. Este método de creación de informes le brinda la oportunidad única de administrar la estructura de la plantilla y el proceso de generación directamente en el código del programa. Su lógica "astuta" se puede implementar aquí.
Sí, esta forma de crear un informe requiere un buen conocimiento del producto, es decir, la estructura del informe, los objetos y sus propiedades. Por lo tanto, la calificación del desarrollador debe ser apropiada.
Quizás dejemos este razonamiento y comencemos a crear un programa de demostración que genere un informe a partir del código de la aplicación web ASP .NET MVC en el lenguaje VisualBasic.
En primer lugar, debe crear un proyecto apropiado para esto.
VisualStudio creará cuidadosamente una aplicación de demostración lista para usar con una estructura lista para el uso. Solo queda conectar las bibliotecas FastRport.NET y añadir su código de creación de informes.
Agregaremos bibliotecas a las referencias del proyecto: FastReport.dll, FastReport.Web.dll. Estas bibliotecas se encuentran en la raíz del programa instalado FastReport.NET.
Usemos el controlador listo para programar la lógica principal, HomeController:
'Conectamos las bibliotecas necesarias Imports System.Drawing Imports FastReport Imports FastReport.Data Imports FastReport.Utils Imports FastReport.Web 'Editamos el método Index Function Index() As ActionResult Dim AppFolder As String Dim report As New WebReport() 'create instance of class Report Dim ds As New DataSet() 'create dataset object AppFolder = "C:\Users\FR\source\repos\WebAppVB\WebAppVB\App_Data" 'load data ds.ReadXml(AppFolder + "\nwind.xml") report.RegisterData(ds) report.Report.GetDataSource("Products").Enabled = True 'create report page Dim page As New ReportPage() report.Report.Pages.Add(page) 'add created page to report page collection page.CreateUniqueName() 'with generated name 'create group header band Dim group As New GroupHeaderBand() page.Bands.Add(group) 'add the band to band collection group.CreateUniqueName() 'with generated name group.Height = Units.Centimeters * 1 group.Condition = "[Products.ProductName].Substring(0,1)" 'set the group condition group.SortOrder = FastReport.SortOrder.Ascending 'and set sort order 'create text object Dim groupTxt As New TextObject() groupTxt.Parent = group 'set the object on whitch the text will be shown groupTxt.CreateUniqueName() groupTxt.Bounds = New RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 1) 'set the text object bounds groupTxt.Text = "[[Products.ProductName].Substring(0,1)]" 'set the text value groupTxt.Font = New Font("Arial", 14, FontStyle.Bold) 'set the font style groupTxt.VertAlign = VertAlign.Center ' set the text align groupTxt.Fill = New LinearGradientFill(Color.LightGoldenrodYellow, Color.Gold, 90, 0.5F, 1) 'set the text object fill 'create data band Dim data As New DataBand() group.Data = data 'set the group data data.CreateUniqueName() data.DataSource = report.Report.GetDataSource("Products") 'set data band source data.Height = Units.Centimeters * 0.5F 'set data band height 'create one more text object Dim productText As New TextObject() productText.Parent = data 'add the text object to data band productText.CreateUniqueName() productText.Bounds = New RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5F) 'set the text object bounds productText.Text = "[Products.ProductName]" 'set the text value 'create group footer band group.GroupFooter = New GroupFooterBand() group.GroupFooter.CreateUniqueName() group.GroupFooter.Height = Units.Centimeters * 1 'set the group footer height 'create total object Dim groupTotal As New Total() groupTotal.Name = "TotalRows" 'set total object name groupTotal.TotalType = TotalType.Count 'set total type groupTotal.Evaluator = data 'set the band for which the total will be calculated groupTotal.PrintOn = group.GroupFooter 'set the total place report.Report.Dictionary.Totals.Add(groupTotal) 'add the total object to totals collection 'create text object Dim totalText As New TextObject() totalText.Parent = group.GroupFooter 'set the object on whitch the text will be shown totalText.CreateUniqueName() totalText.Bounds = New RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5F) 'set the text object bounds totalText.Text = "Rows: [TotalRows]" 'set the text value totalText.HorzAlign = HorzAlign.Right 'set the text align totalText.Border.Lines = BorderLines.Top 'set the border lines type ViewBag.WebReport = report Return View() End Function
A partir de los comentarios del código, está claro que creamos objetos de informe y también construimos una jerarquía y dependencia claras. Por ejemplo, todas los band deben agregarse a la página y los cuadros de texto se colocan en los band o dentro de otros objetos, como tablas o matrices, por ejemplo. Es importante no solo construir una dependencia, sino también configurar correctamente las propiedades de los objetos: su tamaño, posición con respecto al objeto principal, etc. El informe se suma de todos estos detalles. Por lo tanto, este método de creación de informes requiere un buen nivel de conocimiento del producto FastReport .NET.
Cada método web en nuestra aplicación de demostración ya está presentado. En la carpeta Views, busque Index.vbhtml. Pegue la siguiente línea de código en un lugar conveniente:
@ViewBag.WebReport.GetHtml()
Aquí realizamos un método de conversión del informe web a HTML. Por supuesto, además de html, contendrá estilos, scripts, imágenes, en general, todo lo que se necesita para la demostración del informe en una página web.
En la carpeta Views hay un archivo de configuración para la aplicación front-end Web.config. Vamos a añadir nuevos espacios de nombres:
<namespaces> <add namespace="FastReport" /> <add namespace="FastReport.Web" /> </namespaces>
En la misma carpeta, hay otro archivo en el que tenemos que realizar correcciones: Views/Home/Shared/_Layout.vbhtml. Agreguemos el uso de scripts y estilos de las bibliotecas de FastReport:
En la raíz del proyecto hay otra Web.config. En este, después de la sección </system.web> tenemos que añadir:
<system.webServer> <handlers> <add name="FastReportHandler" path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/> </handlers> </system.webServer>
Nuestra aplicación está lista para su lanzamiento. Nos aseguraremos de su funcionalidad.
Eso es todo: hemos creado un informe completo directamente en el código del programa. En apariencia, no es diferente del informe creado en un diseñador visual especial. Pero, por supuesto, hacerlo en el código resulta más difícil. Por lo tanto, recomendamos usar este método solo en casos especiales en los que no se puede implementar una lógica compleja dentro del informe.