Ereignisframework
Microsoft Dataverse macht Ereignisse verfügbar, um anzuzeigen, wo der Prozess derzeit in der Ausführungspipeline ausgeführt wird. Wir können mit diesen Ereignissen umgehen, um beispielsweise Daten zu validieren, den Abschluss von Transaktionen zu verhindern oder jede Art von Geschäftslogik zu automatisieren, die Sie mit deklarativen Mitteln nicht ausführen können.
Wir können diese Ereignisse abonnieren, indem wir .NET-Assemblys (sogenannte Plug-Ins) registrieren, um benutzerdefinierte Logik auszuführen, wenn das angegebene Ereignis eintritt. Wir führen die Registrierung mit einem Tool namens „Plugin Registration Tool“ durch. Weitere Informationen zum Plug-in Registration tool finden Sie im Registrieren eines Plug-Ins-Tutorial.
Der Umgang mit Ereignissen umfasst standardmäßig drei Dinge. Zuerst müssen wir eine bestimmte Nachricht abonnieren, die den Typ des Vorgangs (oder Ereignisses) darstellt, der gerade auftritt (oder gerade auftritt), wie z. B. Erstellen, Abrufen, Aktualisieren usw. Anschließend müssen Sie auch angeben, wo wir in dieser Ereignis‑Pipeline möchten, dass unsere Logik ausgeführt wird (d. h. vor oder nach des Vorgangs). Sie können auch Ereignisse behandeln, bevor die Validierung stattfindet. Diese bequeme Methode können Sie nutzen, um eine erweiterte Überprüfungslogik durchzuführen, die Sie nicht über Geschäftsregeln oder Workflows ausführen können. Zuletzt müssen Sie den Ausführungsmodus angeben, in dem Ihre Logik ausgeführt werden soll (synchron oder asynchron).
Gehen wir nun genauer auf diese drei Bereiche ein.
Ereignismeldungen
Dataverse macht viele Nachrichten verfügbar, die veröffentlicht werden, wenn verschiedene Datenoperationen stattfinden. Weitere Informationen zu diesen Meldungen finden Sie unter Verwenden von Messages mithilfe des Organisationsservices.
Die grundlegenden Datenoperationen von Dataverse sind:
Erstellen
Abrufen
Mehrere abrufen
Update
Löschen
Zuordnen
Zuordnung aufheben
Darüber hinaus gibt es verschiedene Nachrichten, die abhängig von der Art der Tabelle, die Sie verarbeiten, kontextbezogen verfügbar gemacht werden. Wenn meine Tabelle beispielsweise über eine Rollupspalte verfügt, kann ich einen Ereignishandler für die CalculateRollupField-Ereignismeldung implementieren.
Im Allgemeinen können wir ein Inventar dieser benutzerdefinierten Nachrichten finden, die über Dataverse bereitgestellt werden, indem wir Microsoft.Sdk.Messages Namespace für alle Klassen, deren Namen auf \Request enden, durchsuchen. Eine andere Möglichkeit, um festzustellen, welche Nachrichten für einen bestimmten Tabellentyp verfügbar sind, besteht darin, in Tabellen-Nachricht-Kombinationen über das Plugin Registration Tool zu navigieren.
Wir können auch eigene Nachrichten erstellen und verfügbar machen, indem wir benutzerdefinierte Aktionen erstellen. Weitere Informationen zu Aktionen finden Sie unter Ihre eigenen Aktionen erstellen.
Ereignis‑Pipeline
Zusätzlich zum Abonnieren einer bestimmten Nachricht oder eines Ereignistyps stellt Dataverse auch die Möglichkeit bereit, zu bestimmen, wo in der Pipeline das Ereignis gerade ausgeführt wird. Für ASP.NET-Entwickler ähnelt dies unserem Umgang mit den Lebenszyklen von Seiten in einer Webanwendung. Dieser Ansatz ist ein gängiges Entwicklungsmuster für Veröffentlichen/Abonnieren-Architekturen und sollte Entwicklern, die Erfahrung mit anderen Ereignisframeworks haben, vertraut sein.
Vorabüberprüfung
Das Ereignis Vorabüberprüfung tritt zuerst in der Pipeline auf, bevor Sicherheitsüberprüfungen durchgeführt werden. Es soll sicherstellen, dass der Benutzer, der die aktuelle Transaktion ausführt, über die notwendigen Berechtigungen verfügt, die zum Ausführen des beabsichtigten Vorgangs erforderlich sind.
Als Entwickler können Sie dieses Ereignis verwenden, um die Validierungslogik auszuführen und den Vorgang abzubrechen, bevor die Transaktion stattfindet. Wenn Sie beispielsweise so konfiguriert sind, dass sie bei jeder Aktualisierung einer Tabelle ausgeführt werden, können Sie den Vorgang abbrechen, bevor die Aktualisierung erfolgt, indem Sie eine InvalidPluginExecutionException-Methode in der Ausführungslogik Ihres Plug-Ins ausführen. Weitere Informationen zum Ausführungskontext finden Sie unter Verstehen des Ausführungskontextes.
Vor dem Vorgang
Verwenden Sie dieses Ereignis, wenn Sie vor dem Speichern Werte der Tabelle ändern möchten.
Nach dem Vorgang
Mit diesem Ereignis können Sie die Eigenschaften der Nachricht ändern, bevor der Anforderer der Anforderung die Antwort erhält. Stellen Sie sicher, dass an dieser Stelle keine Updates für die entsprechende Tabelle durchgeführt werden, da dies ein weiteres Aktualisierungsereignis auslöst!
Ausführungsmodi (synchron im Vergleich mit asynchron)
Sie können Plug-Ins so konfigurieren, dass sie synchron oder asynchron ausgeführt werden, je nachdem, welche Art von Pipelinevorgang ausgeführt wird.
Synchron
In diesem Modus registrierte Plug-Ins werden ausgeführt, sobald die Verarbeitung des Ereignisses ihre Pipeline-Ausführungsphase erreicht ist, und der gesamte Vorgang wird erst fortgesetzt, wenn die Logik die Ausführung abgeschlossen hat. Wenn mehrere Plug-Ins für die Ausführung in derselben Pipeline-Phase registriert sind, bestimmt das (über das Plug-in Registration tool festgelegte) Attribut für die Ausführungsreihenfolge, welches Plug-In zuerst ausgeführt wird.
Asynchron
In diesem Modus registrierte Plug-Ins werden als Systemauftrag an den asynchronen Dienst gesendet, der ihre Logik ausführt, nachdem der angegebene Vorgang abgeschlossen ist. Weitere Informationen zur Funktionsweise von Systemaufträgen finden Sie unter Asynchroner Service.
Hinweis
Sie können asynchrone Plug-Ins nur für die PostOperation-Phase der Ereignis‑Pipeline registrieren.