Neste artigo veremos como gerar relatórios em uma aplicação ASP .NET Core MVC usando o FastReport. |
O
FastReport Community fornece um gerador de relatórios de código aberto para
.NET6/.NET Core/.NET Framework 4.x. Você pode usar o FastReport em aplicativos
MVC, Web API, Windows Forms, etc. O projeto FastReport Open Source é baseado no
projeto
FastReport.Net que é uma ferramenta paga.
Hoje eu vou mostrar como gerar um relatório no formato PDF usando o FastReport Community em uma aplicação ASP.NET Core MVC.
Vou partir de uma aplicação ASP .NET Core MVC que acessa a tabela Products do banco de dados Northwind no SQL Server. Você pode baixar o script para gerar o banco de dados e as tabelas neste link: Northwind database
Após criar a aplicação no VS 2022 usando o template ASP.NET Core Web
App(Model-View-Controller) com o nome WebFastReport
temos que incluir os pacotes do Entity Framework Core e do FastReport no
projeto.
Para isso usando a janela no menu Tools->..->Manage Nuget Packages for Solution , na guia Browse basta selecionar e clicar no botão Install os seguintes pacotes:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Design
FastReport.OpenSource
FastReport.OpenSource.Export.PdfSimple
FastReport.OpenSource.Web
De forma que ao final do processo na guia Installed você veja os componentes instalados:
A seguir crie na pasta Models a classe
Product contendo as propriedades que serão
acessadas :
namespace WebFastReport.Models; public class Product { public int ProductID { get; set; } public string? ProductName { get; set; } public Int16 UnitsInStock { get; set; } public decimal UnitPrice { get; set; } } |
A seguir defina a string de conexão para acessar o banco de dados Northwind no seu ambiente no arquivo appsettings.json:
{ "ConnectionStrings": { "DefaultConnection": "Data Source=SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } |
A seguir vamos uma pasta Context no projeto e nesta pasta criar a classe AppDbContext que representa o contexto do EF Core:
public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) {} public DbSet<Product> Products { get; set; } |
Crie uma pasta Services no projeto e nesta pasta crie a interface IProductService :
using WebFastReport.Models; namespace WebFastReport.Services; public interface IProductService |
Agora crie a classe ProductService que implementa esta interface e que vai retornar uma lista dos produtos que vamos usar no relatório:
using WebFastReport.Models; namespace WebFastReport.Services; public class ProductService : IProductService public List<Product> GetProducts() |
Registre o serviço do contexto e o serviço do produto na classe Program:
using Microsoft.EntityFrameworkCore; using WebFastReport.Models; using WebFastReport.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var con = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddScoped<IProductService, ProductService>(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) app.UseHttpsRedirection(); app.MapControllerRoute( app.Run(); |
Todas essas configurações foram feitas para acessar os dados via EF Core. Vamos agora usar o controlador e definir a geração do relatório.
Gerando o relatório em PDF
Na pasta Controllers vamos aproveitar o controlador HomeController existente e injetar os serviços IProductService e IWebHostEnvironment no construtor.
Vamos também criar na pasta wwwroot a pasta reports onde vamos armazenar os relatórios gerados.
A seguir vamos criar dois métodos Action no Controlador :
CreateReport - Usado para gerar um template do relatório que vamos usar para criar o nosso relatório;
ProductsReport - Usado para gerar o relatório no formato PDF com a Designer do FastReport;
public class HomeController : Controller { public readonly IWebHostEnvironment _webHostEnv; private readonly IProductService _productService;
public HomeController(IWebHostEnvironment webHostEnv, IProductService productService) [Route("CreateReport")] freport.Dictionary.RegisterBusinessObject(productList, "productList", 10, true); return Ok($" Relatorio gerado : {caminhoReport}"); [Route("ProductsReport")] freport.Report.Load(reportFile); var pdfExport = new PDFSimpleExport(); using MemoryStream ms = new MemoryStream(); return File(ms.ToArray(), "application/pdf"); |
Neste código vamos destacar os dois métodos Action :
1- CreateReport
public IActionResult CreateReport()
{
var caminhoReport = Path.Combine(_webHostEnv.WebRootPath, @"reports\ReportMvc.frx");
var reportFile = caminhoReport;
var freport = new FastReport.Report();
var productList = _productService.GetProducts();
freport.Dictionary.RegisterBusinessObject(productList, "productList", 10, true);
freport.Report.Save(reportFile);
return Ok($" Relatorio gerado : {caminhoReport}");
}
Neste código estamos obtendo o comanho completo do
relatório com seu nome ReportMvc.frx e criando uma
instância do FastReport. A seguir obtemos os dados
dos produtos que vamos usar e registramos este objeto com um nome e a seguir
salvamos o relatório na pasta wwwroot/reports.
2- ProductsReport
public IActionResult ProductsReport()
{
var caminhoReport = Path.Combine(_webHostEnv.WebRootPath, @"reports\ReportMvc.frx");
var reportFile = caminhoReport;
var freport = new FastReport.Report();
var productList = _productService.GetProducts();
freport.Report.Load(reportFile);
freport.Dictionary.RegisterBusinessObject(productList, "productList", 10, true);
freport.Prepare();
var pdfExport = new PDFSimpleExport();
using MemoryStream ms = new MemoryStream();
pdfExport.Export(freport, ms);
ms.Flush();
return File(ms.ToArray(), "application/pdf");
}
Neste código, após montarmos o relatório com o Designer, vamos gerar o relatório no formato PDF.
Então primeiro executar a aplicação e gerar o template
ReportMvc.frx clicando no menu -
Create Report:
Vamos obter a resposta abaixo:
Com isso temos o
template gerado na pasta wwwroot/reports.
Usando o Designer
Ao baixar o FastReport iremos obter o arquivo Designer que é um aplicativo .exe que usamos para montar o relatório.
Acesse o link para
download
:
download FastReport - e baixe o pacote
FastReport.Community.2022.2.0.zip com 18.4 MB. A seguir descompacte na
sua máquina local.
Dentre os arquivos você terá o aplicativo Designer que deverá ser executado para criar o relatório.
Para abrir o Designer basta executar o aplicativo e selecione File-> Open e informar o local onde esta o template gerado ou onde desejamos salvar os relatórios criados.
No nosso exemplo será em : D:\_Artigos\_reports\WebFastReport\WebFastReport\wwwroot\reports\ReportMvc.frx
A seguir vamos montar o leiaute abaixo para o nosso relatório :
Basta arrastar e soltar os dados que queremos exibir para montar o relatório usando os recursos do Designer.
Após Salvar podemos executar o projeto novamente e acessar o método Action ProductsReport :
Você pode consultar a documentação do FastReport em : https://github.com/FastReports/FastReport.Documentation
Na próxima parte do artigo vou mostar outra abordagem que podemos usar para criar relatórios usando o FastReport.
Pegue o código aqui : WebFastReport.zip
"E ouvi uma grande voz do céu, que dizia: Eis aqui o tabernáculo de Deus com
os homens, pois com eles habitará, e eles serão o seu povo, e o mesmo Deus
estará com eles, e será o seu Deus."
Apocalipse 21:3
Referências: