Was ist Quartz.NET?
Quartz.NET ist ein Open-Source-Framework für Planung und Erfüllen von Aufgaben nach einem Zeitplan. Quartz.NET kann einfach in jede auf der Plattform .NET entwickelte Anwendung – von kleinen Dienstleistungen bis zu weiträumigen Enterprise-Systemen – integriert werden. Das Framework verwendet zwei Hauptkonzepte: die Aufgabe, die nach einem Zeitplan im Hintergrund erfüllt wird, und der Planer, der für das Erfüllen der Aufgabe basierend auf einem Trigger verantwortlich ist.Erstellen vom Projekt
Zuerst erstellen wir ein Projekt unter der Steuerung der Plattform .NET 6. In diesem Fall verwenden wir das .NET Core-Berichtstool, das vollfunktionsfähige, universelle, plattformübergreifende Tool für Erstellen, Bearbeiten, Rendern, Anzeigen und Umwandeln von Berichten und Dashboards. Sie können den Berichts-Generator durch die Installation vom erforderlichen NuGet-Paket in jede Benutzer-Anwendung integrieren.Installation von Paketen
Also, da in diesem Beispiel keine visuellen Komponenten (Designer und Viewer) verwendet werden, ist es für Erfüllen vom Export ausreichend, das NuGet-Paket - Stimulsoft.Reports.Engine.NetCore zu installieren.Zusätzlich, man muss das Quartz-Paket für Hinzufügen und Verwenden vom Planer installieren.
Nach der erfolgreichen Installation der Pakete wird die Einstellung des Projektes beendet, und man kann weiter den Zeitplan und die Aufgaben festlegen. Bemerken Sie!
Für die Arbeit mit Dashboards muss man das Paket Stimulsoft.Dashboards.Web.NetCore installieren.
Festlegen von Aufgaben
Wollen wir neue Klasse StiReportJob.cs, die die Realisierung der IJob-Schnittstelle mit dem Festlegen der Execute()-Methode enthalten muss, erstellen. Auch fügen wir zwei Methoden hinzu: Erstellen (oder Laden) vom Bericht, und auch die Methode vom Export und Senden vom Bericht per E-Mail. So wird in der Methode Execute() die Methode des Erstellens vom Bericht aufgerufen, und dann – die asynchrone Methode des Sendens per E-Mail. Unten ist der Code der Klasse StiReportJob.cs angezeigt.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("Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. ", "Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. "))
{
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);
}
}
}
Wir haben nur der einfachste Fall der Arbeit mit dem Bericht berücksichtig, aber hier können verschiedene komplizierte und sogar schöpferische Aufgaben erfüllt werden.
Einstellung des Zeitplans
Wollen wir noch eine neue Klasse erstellen - StiJobScheduler.cs, in der wir den Planer initialisieren und einen Trigger hinzufügen. Der Trigger in diesem Fall ist die Bedingung, die den Planer startet. Im oben dargestellten Beispiel der Trigger ist die Zeit 10:00 Uhr, jeden Tag. Man kann dabei zahlreiche Trigger verwenden, z.B., endloser Zyklus vom Erfüllen des Planers jede Minute. Unten ist der Code der Klasse StiJobScheduler.cs dargestellt.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);
}
}
Danach muss man in der Hauptklasse der Anwendung, in diesem Fall – in Program.cs, die statische Methode Start() der Klasse StiJobScheduler.cs aufrufen.
Program.cs
StiJobScheduler.Start();
Wir haben mit dem Beispiel die Automatisierung des Prozesses angezeigt, und jetzt wird der Bericht jeden Tag um 10:00 Uhr in die PDF-Datei umgewandelt, und ein Brief mit diesem Bericht wird an die angegebene Person gesendet.
Auch haben wir eine ausführliche Videostunde über die Arbeit vom Quartz.NET-Planer in unseren Softwares vorbereitet.
Wenn Sie noch Fragen haben, kontaktieren Sie uns!