Сегодня мы коснемся одного современного тренда разработки программного обеспечения – автоматизации процессов, естественно, в рамках работы с отчетами в продуктах 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 в наших продуктах.

Если у вас остались вопросы, свяжитесь с нами!
By using this website, you agree to the use of cookies for analytics and personalized content. Cookies store useful information on your computer to help us improve efficiency and usability. For more information, please read the privacy policy and cookie policy.