Сегодня мы коснемся одного современного тренда разработки программного обеспечения – автоматизации процессов, естественно, в рамках работы с отчетами в продуктах Stimulsoft. Итак, в этой статье мы расскажем о том, как можно автоматизировать связанные с отчетами задачи при помощи сторонних планировщиков в веб-проектах. В качестве примера действия над отчетом возьмём его преобразование в PDF-файл и отправку результата по электронной почте, а в качестве средства автоматизации – Quartz.NET. С него и начнём.

Что такое 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 в наших продуктах.

Если у вас остались вопросы, свяжитесь с нами!
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.