将 Quartz.NET 调度框架与 Stimulsoft Reports 结合使用

今天,我们将深入探讨软件开发的一种现代趋势 - 流程自动化,这自然是 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官方正版下载icon-default.png?t=N7T8https://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 文件,并将包含该文件的一封信发送给指定的人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440179.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell脚本中的函数

目录 一.shell函数的作用&#xff1a; 二&#xff1a;shell函数的定义&#xff1a; 三.调用函数的方法&#xff1a; ​四.Shell函数返回值&#xff1a; ​五.函数传参&#xff1a; 六.函数变量的作用范围&#xff1a; ​七.函数的递归&#xff1a; ​八.函数库&#xff…

亚马逊鲲鹏系统的使用方法及操作指南

亚马逊鲲鹏系统作为提升店铺流量与销量的有效工具&#xff0c;其使用方法与功能十分强大。以下是详细的使用方法及操作指南&#xff1a; 1. 批量注册功能&#xff1a; 注册时&#xff0c;需要绑定国外IP代理和最新的反指纹技术&#xff0c;这样每个账号独立运行时就不会造成关…

后序遍历的线索化二叉树

对于后序遍历&#xff0c;需要明确&#xff0c;往往叶子结点&#xff0c;只能指向右子树&#xff08;如果右子树存在的情况&#xff09;&#xff0c;或者指向该结点&#xff08;因为这才是后序遍历&#xff09;&#xff0c;同样在进行退出到前一次递归的时候&#xff0c;我们要…

如何做谷歌seo排名优化?

要优化谷歌搜索排名&#xff0c;网站内容是重中之重&#xff0c;最主要就是创建质量高、相关性强的网站内容&#xff0c; 何谓质量高&#xff1f;最起码要求图文并茂&#xff0c;文章要长&#xff0c;要有视频引用&#xff0c;这是质量高的最基础要求&#xff0c;同时还需要确…

07.领域驱动设计:3种常见微服务架构模型的对比和分析

目录 1、概述 2、整洁架构 3、六边形架构 4、三种微服务架构模型的对比和分析 5、从三种架构模型看中台和微服务设计 5.1 中台建设要聚焦领域模型 5.2 微服务要有合理的架构分层 5.2.1 项目级微服务 5.2.2 企业级中台微服务 5.3 应用和资源的解耦与适配 6、总结 1、概…

【Java基础】之进程与线程

进程与线程 1. 线程与进程1.1 概念1.2 区别与联系 2. 线程的5种状态和切换2.1 简单介绍2.2 状态切换2.2.1 重点情况 3. 线程中常见的方法4. 线程池 1. 线程与进程 1.1 概念 进程&#xff1a;资源分配的基本单元&#xff0c;如QQ音乐 线程&#xff1a;资源调度的基本单元&…

私域必看:让你事半功倍的多微信高效管理方法

随着私域运营的需求不断增长&#xff0c;对于使用微信进行运营的企业或个人&#xff0c;高效地管理微信变得越发重要。今天就分享一些高效管理多个微信账号的实用方法&#xff0c;帮你节省时间。 1.巧用标签和分组 微信的标签和分组功能&#xff0c;相信很多人都使用过&#xf…

AtCoder Beginner Contest 338 --- D - Island Tour -- 题解

D - Island Tour 题目大意 思路解析&#xff1a; 可以发现 1->2->4 整体减1变为5->1->3&#xff0c; 其中2->4的距离等于1->3的距离 其中1->2的距离不等于5->1的距离&#xff0c;则只有当[xj - i] < 0后的xj - > xj1 和 xj -> xj-1的距离才会…

电子液晶屏幕生产厂污废水处理需要哪些工艺设备

随着电子液晶屏幕行业的不断发展&#xff0c;污废水处理成为了一个重要的环保问题。为了达到合规性排放要求&#xff0c;并保护环境&#xff0c;厂家需要采取一系列工艺设备来处理污废水。 首先&#xff0c;常见的一种处理工艺是物理与化学处理。物理处理包括预处理与固液分离&…

基于go mod模式创建项目最佳实践

希望能带给你成功的喜悦&#xff01; 除go get、vendor这两种方式外&#xff0c;Go版本在1.11之后推出了go module模式来管理依赖&#xff0c;使用go mod时下载的依赖文件在$GOPATH/pkg/mod/下。本文以两种办法介绍如何创建go mod项目。 目录 goland开启玩法 本地手动创建项目…

Java二维码图片识别

前言 后端识别二维码图片 代码 引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing<…

C语言指针进阶之四-函数指针的使用之回调函数及库函数qsort函数详解(详解)

目录 1.回调函数 1.1引入 1.2回调函数的使用&#xff0c;加减乘除计算器改造 2.回调函数的应用-qsort函数 实例1&#xff1a;整型数组排序 实例2&#xff1a;结构体排序 ①按照整型数据来排序&#xff0c;这里是按照年龄来排序 ②按照名字来排序&#xff0c;也就是比较…