Ereignisframeworks,

Die Funktion zur Erweiterung des Standardverhaltens von Microsoft Dataverse hängt davon ab, dass erkannt wird, wann Ereignisse im Server auftreten. Ereignisframework bietet die Möglichkeit, benutzerdefinierte Codes zu erfassen, die in Antworten für bestimmte Ereignisse ausgeführt werden.

Alle Funktionen, das standardmäßige Verhalten der Plattform zu erweitern hängt vom Ereignisframework ab. Wenn Sie einen Workflow so konfigurieren, dass er auf Ereignisse mithilfe des Workflowdesigners reagiert ohne einen Code zu verfassen, wird dieses Ereignis vom Ereignisframework bereitgestellt.

Als Entwickler können Sie das Plug-In-Registrierungstool verwenden, die Plug-Ins, Azure-Integrationen, virtuelle Tabellendatenanbieter und Webhooks so konfigurieren, dass sie auf Ereignisse reagieren, die vom Ereignisframework bereitgestellt werden. Wenn Ereignisse ausgeführt werden und den Erwerb einer Erweiterung registriert ist, darauf zu reagieren, werden kontextbezogene Informationen über die Daten, auf die in den Vorgang mit einbezogen werden, zur Erweiterung übergeben. Je nachdem, wie die Registrierung für das Ereignis konfiguriert ist, kann die Erweiterung die an sie übergebenen Daten ändern, einen automatisierten Prozess initiieren, der sofort angewendet wird, oder festlegen, dass eine Aktion zu einer Warteschlange hinzugefügt wird, um später ausgeführt zu werden.

Damit das Ereignisframework für die benutzerdefinierten Erweiterungen profitieren, müssen Sie verstehen:

  • Folgende Ereignisse sind verfügbar:
  • Wie das Ereignis verarbeitet wird
  • Welche Art von Daten stehen Ihrer angepassten Erweiterung zur Verfügung, wenn das Ereignis eintritt
  • Zeit- und Ressourcenbeschränkungen
  • Gesamtleistung überwachen

Folgende Ereignisse sind verfügbar

Wie unter Nachrichten mit dem SDK für .NET verwenden beschrieben basieren Datenvorgänge auf der Dataverse-Plattform auf Nachrichten und jede Nachricht hat einen Namen. Es gibt Create-, Retrieve-, RetrieveMultiple-, Update-, Delete-, Associate- und Disassociate-Nachrichten, die die grundlegenden Datenoperationen abdecken, die mit Tabellen geschehen. Es gibt auch spezielle Nachrichten für komplexere Operationen, und angepasste Aktionen fügen neue Nachrichten hinzu.

Wenn Sie das Tool „Plug-in-Registrierung“ verwenden, um eine Erweiterung mit einer bestimmten Nachricht zu verknüpfen, registrieren Sie sie als Schritt. Der Screenshot zeigt das Dialogfeld Neuen Schritt registrieren, der beim Registrieren eines Plug-Ins verwendet wird.

Dialog zum Registrieren eines neuen Schrittes.

Ein Schritt enthält die Informationen, auf welche Message die Erweiterung reagieren sollen und einige weitere Konfigurations-Auswahlen. Geben Sie im Feld Message die Message der Erweiterung ein, au die reagiert wird

Im Allgemeinen finden Sie eine Meldung für die meisten *Anforderungsklassen in den Namespaces Microsoft.Crm.Sdk.Messages oder Microsoft.Xrm.Sdk.Messages, Sie finden jedoch auch Meldungen für alle benutzerdefinierten Aktionen, die in der Organisation erstellt wurden. Alle Operationen, die Tabellendefinitionen beinhalten, sind nicht verfügbar.

Daten über Nachrichten werden in den Tabellen SdkMessage und SdkMessageFilter gespeichert. Das Plug-In-Registrierungstool filtert diese Informationen, um nur gültige Nachrichten anzuzeigen.

Um zu überprüfen, ob eine Nachrichten- und Tabellenkombination die Ausführung von Plug-ins über eine Datenbankabfrage unterstützt, können Sie die folgende Web-API-Abfrage verwenden:

[Organization URI]/api/data/v9.1/sdkmessages?$select=name
&$filter=isprivate eq false 
and (name ne 'SetStateDynamicEntity' 
and name ne 'RemoveRelated' 
and name ne 'SetRelated' and 
name ne 'Execute') 
and sdkmessageid_sdkmessagefilter/any(s:s/iscustomprocessingstepallowed eq true 
and s/isvisible eq true)
&$expand=sdkmessageid_sdkmessagefilter($select=primaryobjecttypecode;
$filter=iscustomprocessingstepallowed eq true and isvisible eq true)
&$orderby=name

Tipp

Mit dieser Abfrage und den Anweisungen in diesem Blog-Beitrag können Sie diese Daten in ein Excel-Arbeitsblatt exportieren: Finden Sie Nachrichten und Tabellen, die für Plug-Ins in Frage kommen, mit der Dataverse

Sie können diese Informationen auch mithilfe des folgenden FetchXML abrufen. Der FetchXML-Generator ist ein hilfreiches Tool, um diese Art von Abfrage auszuführen.

<fetch>
  <entity name='sdkmessage' >
    <attribute name='name' />
    <link-entity name='sdkmessagefilter' alias='filter' to='sdkmessageid' from='sdkmessageid' link-type='inner' >
      <filter type='and' >
        <condition attribute='iscustomprocessingstepallowed' operator='eq' value='1' />
        <condition attribute='isvisible' operator='eq' value='1' />
      </filter>
      <attribute name='primaryobjecttypecode' />
    </link-entity>
    <filter>
      <condition attribute='isprivate' operator='eq' value='0' />
      <condition attribute='name' operator='not-in' >
        <value>SetStateDynamicEntity</value>
        <value>RemoveRelated</value>
        <value>SetRelated</value>
          <value>Execute</value>
      </condition>
    </filter>
    <order attribute='name' />
  </entity>
</fetch>

Achtung

Die Execute-Message ist verfügbar, aber Sie sollten Erweiterungen nicht registrieren, da diese von jedem Vorgang erstellt werden.

Hinweis

Es gibt bestimmte Fälle, in denen Plug-Ins und Workflows, die für das Ereignis „Update“ registriert sind, doppelt aufgerufen werden können. Weitere Informationen: Verhalten spezieller Vorgänge mithilfe Update

Ereignisausführungspipeline

Wenn Sie einen Schritt mit dem Tool „Plug-in-Registrierung“ registrieren, müssen Sie auch die Ausführungsphase der Ereignis-Pipeline wählen. Jede Nachricht wird in eine Reihe von 4 Phasen verarbeitet, wie in der folgenden Tabelle beschrieben:

Name Beschreibung
Vorabüberprüfung Beim Erstbetrieb tritt diese Phase vor dem Betrieb des Hauptsystems auf.

Auf diese Weise kann Logik eingebunden werden, mit der sich der Vorgang vor der Datenbanktransaktion abbrechen lässt.

Nachfolgende Vorgänge, die von Erweiterungen ausgelöst werden, die in anderen Phasen registriert sind, passieren diese Phase auch, werden aber in die Transaktion der aufrufenden Erweiterungen aufgenommen.

Diese Phase tritt vor der Durchführung sämtlicher Sicherheitsprüfungen auf, um zu überprüfen, ob der aufrufende oder angemeldete Benutzer berechtigt ist, den gewünschten Vorgang durchzuführen.
PreOperation Tritt vor Betrieb des Hauptsystems und während der Datenbanktransaktion auf.

Wenn Sie die Werte einer in einer Nachricht enthaltenen Entität ändern möchten, tun Sie dies hier.

Brechen Sie an dieser Stelle besser keinen Vorgang ab. Andernfalls wird die Transaktion rückabgewickelt, und es kommt zu erheblichen Leistungseinbußen.
MainOperation Nur zur internen Verwendung, außer bei Anbietern benutzerdefinierter APIs und benutzerdefinierter virtueller Tabellendaten.
Weitere Informationen:
Benutzerdefinierte APIs erstellen und verwenden
Anbieter benutzerdefinierter virtueller Tabellendaten
PostOperation Tritt nach Betrieb des Hauptsystems und während der Datenbanktransaktion auf.

Mit dieser Phase können Sie die Eigenschaften der Nachricht ändern, bevor sie an den Anrufer zurückgeht.

Die Entitäten in einer Nachricht sollten nicht geändert werden, weil das ein neues Update-Ereignis auslöst.

In der PostOperation-Phase können Sie Schritte zur Nutzung des asynchronen Ausführungsmodus aufzeichnen. Diese Schritte erfolgen mithilfe des asynchronen Dienstes außerhalb der Datenbanktransaktion.

Sie müssen beim Registrieren Ihres Plug-Ins den asynchronen Modus verwenden, wenn das Plug-In für die Durchführung eines Aktualisierungsvorgangs konzipiert ist und in der Nachricht „Create” der Entität User (SystemUser) registriert ist.

Weitere Informationen: Asynchroner Dienst.

Die auszuwählende Phase hängt vom Zweck der Erweiterung ab. Sie müssen nicht die gesamte Geschäftslogik innerhalb eines Einzelschritts anwenden. Sie können mehrere Schritte gelten für die Logik zu, dass eines Prozesses können, um den Vorgang fortzusetzen Phase kann in der PreValidation sein und die Logik, um Änderungen an den Nachrichteneigenschaften ausführen kann in der PostOperation auftreten.

Wichtig

Eine Ausnahme, die von Ihrem Code in einer synchronen Phase in der Datenbanktransaktion ausgegeben wurde, setzt die gesamte Transaktion zurück. Sie sollten achtgeben, um sicherzustellen, dass alle möglichen Ausnahmefälle vom Code behandelt werden. Wenn Sie den Vorgang abbrechen möchten, sollten Sie dies in der PreValidations-Phase erkennen und nur eine InvalidPluginExecutionException auslösen, die eine entsprechende Meldung enthält, die nur den Grund für den Abbruch des Vorgangs beschreibt.

Mehrere Erweiterungen können für dieselbe Phase derselben Message registriert werden. Innerhalb der Schrittregistrierung bestimmt die Ausführungsreihenfolge die Reihenfolge, in dem mehrere Erweiterungen für eine bestimmte Phase verarbeitet werden sollen.

Informationen über registrierte Schritte werden in der Tabelle SdkMessageProcessingStep gespeichert.

Asynchrone Plug-In-Schritte

Bei der Anmeldung zur PostOperation-Phase haben Sie die Möglichkeit, den auszuführenden Schritt im asynchronen Ausführungsmodus zu registrieren. Diese Plug-Ins werden ausgeführt, nachdem der Datensatzvorgang abgeschlossen ist.

Dies ist häufig erforderlich, wenn Sie mit Datensätzen arbeiten, die dem aktuellen Datensatz zugeordnet sind, aber in einem anderen Prozess erstellt wurden. Die UserSettings, die mit einem bestimmten SystemUser zusammenhängen, werden zum Beispiel erst erstellt, wenn die SystemUser-Zeile erstellt wird.

Weitere Informationen: Asynchroner Dienst

Ereigniskontext

Wenn Ihre Erweiterung ein Plug-In ist, erhält sie einen Parameter, der die Schnittstelle IPluginExecutionContext implementiert. Diese Klasse liefert einige Informationen über die Stage, für die das Plug-in registriert ist, sowie Informationen über die ParentContext, die Informationen über jeden Vorgang innerhalb eines anderen Plug-ins liefert, der den aktuellen Vorgang ausgelöst hat.

Wenn Ihre Erweiterung ein Azure Service Bus-Endpunkt, ein Azure EventHub-Thema oder ein Web-Hook ist, werden die Daten, die an den registrierten Endpunkt gepostet werden, in Form einer RemoteExecutionContext sein, die sowohl IPluginExecutionContext als auch IExecutionContext implementiert

Weitere Informationen zum Ausführungskontext finden Sie unter Verstehen des Ausführungskontexts.

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).