今天,我们将深入探讨软件开发的一种现代趋势 - 流程自动化,这自然是 Stimulsoft 产品中报表处理的一部分。在本文中,我们将讨论如何使用第三方调度程序自动执行与 Web 项目中的报告相关的任务。作为对报告执行操作的示例,我们考虑将其转换为 PDF 文件并通过电子邮件发送结果,利用 Quartz.NET 作为自动化工具。让我们从它开始吧。
Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了所有内容!
Stimulsoft Reports.Ultimate不仅拥有强大的报表导出系统,而且还支持多种报表导出格式,拥有简单且强大的报表引擎。Stimulsoft Reports.Ultimate基本原则是,用简单常规的方法创建报表,将不同的技术应用于应用程序。
Stimulsoft Reports官方正版下载https://www.evget.com/product/2398/download
什么是 Quartz.NET?
Quartz.NET是一个用于调度各种任务的开源框架。它可以集成到.NET 平台上创建的任何应用程序中,范围从最小的服务到大型企业系统。该框架基于两个主要概念:在后台按计划运行的任务和负责根据触发器执行任务的调度程序。
创建项目
首先,让我们创建一个在.NET 6 平台上运行的项目。在本例中,我们将利用.NET Core 报告工具,它是一个功能齐全、通用且跨平台的工具,用于创建、处理、构建、显示和转换报告和仪表板。通过安装适当的 NuGet 包,可以轻松将其集成到自定义应用程序中。
安装软件包
因此,由于此示例不会使用可视化组件(查看器和报表设计器),因此要导出报表,安装 NuGet 包 - Stimulsoft.Reports.Engine.NetCore就足够了。
此外,要添加和使用调度程序,您必须安装Quartz 包。
成功安装软件包后,项目设置就完成了,您可以继续定义任务和计划。
笔记!
要使用仪表板,您需要安装Stimulsoft.Dashboards.Web.NetCore包。
定义任务
让我们创建一个新类StiReportJob.cs,它应包含 IJob 接口的实现以及Execute()方法的定义。我们还将添加两种方法:一种用于创建(或加载)报告,另一种用于导出报告并通过电子邮件发送。因此,Execute()方法将调用报表创建方法,然后调用异步电子邮件发送方法。以下是StiReportJob.cs类的代码。
StiReportsJob.cs
public class StiReportJob : IJob { public async Task Execute(IJobExecutionContext context) { var report = CreateReport();await SendEmail(report); }private StiReport CreateReport() { var report = new StiReport(); // report.Load(); return report; }private async Task SendEmail(StiReport report) { using (MailMessage mail = new MailMessage("admin@gmail.com", "user@gmail.com")) { mail.Subject = "New Report"; mail.Body = "Body Info";using var stream = new MemoryStream(); report.ExportDocument(StiExportFormat.Pdf, stream); stream.Position = 0;var attachment = new Attachment(stream, "report.pdf", "application/pdf"); mail.Attachments.Add(attachment);using var client = new SmtpClient { EnableSsl = true, Host = "host.com", Port = 25, }; await client.SendMailAsync(mail); } } }
尽管我们已经考虑了使用报表的基本情况,但这里可以实现更复杂和创造性的任务
制定时间表
让我们创建另一个新类 - StiJobScheduler.cs,我们将在其中初始化调度程序并向其添加触发器。在本例中,触发器是启动调度程序的条件。在下面的示例中,触发器设置为每天上午 10:00 到中午之间的时间。然而,触发器可能有很多种,从重复的计划到每分钟触发调度程序的无限循环。以下是StiJobScheduler.cs类的代码。
StiJobScheduler.cspublic class StiJobScheduler { public static async void Start() { var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start();var job = JobBuilder.Create<StiReportJob>().Build();var trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule($"0 0 10 ? * *")//At 10:00 AM .Build();await scheduler.ScheduleJob(job, trigger); } }
之后,在主应用程序类中,在本例中为Program.cs,需要调用StiJobScheduler.cs类的静态Start()方法。程序.cs
StiJobScheduler.Start();
因此,今天我们演示了一个自动化流程的示例,现在,每天 10:00,报告将被转换为 PDF 文件,并将包含该文件的一封信发送给指定的人。