Что такое Quartz.NET?
Quartz.NET – это открытый фреймворк для планирования и выполнения различных задач по расписанию. Quartz.NET легко интегрируется в любое приложение, созданное на платформе .NET – от самых маленьких сервисов до масштабных корпоративных систем. Фреймворк использует два основных концепта: задача, выполняемая по расписанию в фоновом режиме и планировщик, отвечающий за выполнение задачи по триггеру.Создание проекта
Для начала создадим проект под управлением платформы .NET 6. В этом случае будет использоваться .NET Core генератор отчетов, который является полнофункциональным, универсальным и кроссплатформенным средством для создания, обработки, построения, отображения и конвертации отчетов и дашбордов. Его легко интегрировать в пользовательское приложение, установив соответствующий NuGet-пакет.Установка пакетов
Итак, поскольку в данном примере не будут использоваться визуальные компоненты (вьювер и дизайнер отчетов), то для выполнения экспорта отчета достаточно установить NuGet пакет - Stimulsoft.Reports.Engine.NetCore.Кроме этого, для добавления и возможности использования планировщика, необходимо установить пакет Quartz.
После успешной установки пакетов настройка проекта завершена, и можно переходить к определению задач и расписания. Обратите внимание!
Для работы с дашбордами необходимо будет установить пакет Stimulsoft.Dashboards.Web.NetCore package.
Определение задач
Создадим новый класс StiReportJob.cs, в котором должна присутствовать реализация интерфейса IJob с определением метода Execute(). Добавим также два метода: создание (или загрузка) отчета, а также метод экспорта отчета и его отправки по электронной почте. Таким образом, в методе Execute() будет осуществляться вызов метода создания отчета, а затем вызов асинхронного метода отправки по email. Ниже представлен код класса 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("Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ", "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. "))
{
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.cs
public 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, осуществить вызов статического метода Start() класса StiJobScheduler.cs.
Program.cs
StiJobScheduler.Start();
Таким образом, сегодня мы на примере показали автоматизацию процесса, и теперь каждый день в 10:00 отчет будет преобразовываться в PDF-файл, а письмо с ним будет отправляться указанному лицу.
Также мы подготовили для вас подробное видео о работе с планировщиком Quartz.NET в наших продуктах.
Если у вас остались вопросы, свяжитесь с нами!