Behandlung von Ausnahmen in Plug-ins

Die Art und Weise, wie Ausnahmen in Plug-ins verwaltet werden, hängt von der Art der Plug-in-Schritt-Registrierung ab.

  • Ausnahmen für synchrone Plug-In-Schritte führen zum Abbruch und Rollback des Vorgangs. Sie haben die Möglichkeit, die an den Benutzer zurückgegebene Nachricht zu steuern.
  • Ausnahmen für asynchrone Plug-In-Schritte werden protokolliert und der System Job-Tabelle, auch bekannt als AsyncOperation Table, hinzugefügt.

Abbrechen des laufenden Vorgangs

Innerhalb eines synchronen Plug-ins ist eine der Optionen, die Sie haben, die Anfrage abzulehnen. Wenn die Operation nicht den von Ihrem Plug-in erzwungenen Regeln entspricht, können Sie einfach eine InvalidPluginExecutionExceptionAusnahme auslösen und in der Nachricht die Gründe für die Ablehnung der Operation angeben.

Idealerweise sollten Sie nur Vorgänge mithilfe synchroner Plug-Ins abbrechen, die in der Phase PreValidation registriert wurden. Diese Phase erfolgt gewöhnlich außerhalb der Hauptdatenbanktransaktion. Das Abbrechen eines Vorgangs, bevor er die Transaktion erreicht, ist sehr erwünscht, da der abgebrochene Vorgang zurückgesetzt werden muss. Der Rollback des Vorgangs erfordert beträchtliche Ressourcen und wirkt sich auf die Systemleistung aus. Vorgänge in den Phasen PreOperation und PostOperation befinden sich immer innerhalb der Datenbanktransaktion.

Manchmal befinden sich PreValidation-Stufen innerhalb einer Transaktion, wenn sie durch Logik in einer anderen Operation initiiert werden. Wenn Sie z. B. in der PostOperation-Phase der Erstellung eines Kontos einen Datensatz für eine Aufgabe erstellen, durchläuft die Aufgabenerstellung die Pipeline für die Ereignisausführung und findet in der PreValidation-Phase statt, ist aber Teil der Transaktion, die den Datensatz der Kontotabelle erstellt. -Sie können feststellen, ob sich ein Vorgang innerhalb einer Transaktion befindet anhand des Werts der IExecutionContext.IsInTransaction Eigenschaft verfügbar sind.

Wie modellbasierte Apps synchrone Plug-in-Ausnahmen behandeln

Wenn Sie eine InvalidPluginExecutionException-Ausnahme innerhalb eines synchronen Plug-In auslösen, wird dem Benutzer ein Fehlerdialog mit Ihrer Nachricht angezeigt. Wenn Sie keine Meldung bereitstellen, wird dem Benutzer ein generischer Fehlerdialog angezeigt. Wenn eine andere Art von Ausnahme ausgelöst wird, sieht der Benutzer einen Fehlerdialog mit einer generischen Nachricht und die Ausnahmemeldung und die Stack-Trace werden in die PluginTraceLog-Tabelle geschrieben.

Hinweis

In der Einheitlichen Benutzeroberfläche unterstützt der Fehlerdialog keine HTML-kodierten Inhalte in der Nachricht. Bitte nur Text.

Unerwartete Fehler

Wenn im Plugin-Code für einen synchronen Schritt eine Ausnahme auftritt, wird der Vorgang abgebrochen und zurückgerollt, unabhängig davon, ob Sie eine InvalidPluginExecutionException auslösen oder nicht. InvalidPluginExecutionException ist die einzige Ausnahme, bei der Sie die Möglichkeit haben, zu steuern, welche Ausnahmemeldung dem Benutzer angezeigt werden soll. Dies gilt insbesondere für modellbasierte Apps, die von Dynamics 365-Lösungen verwendet werden.

Tipp

Wir empfehlen, dass Sie jeden Fehler abfangen und eine InvalidPluginExecutionException-Ausnahme auslösen, damit Sie steuern können, was dem Benutzer angezeigt wird. Dies kann einfach An unexpected error occurred sein, aber Sie könnten auch einige Informationen hinzufügen, die dem Administrator bei der Fehlersuche helfen. Auf diese Weise haben Sie ein gewisses Steuerelement. Wenn Sie andere Arten von Ausnahmen zulassen, wird der Fehler als IsvUnExpected-Fehler mit der Nachricht An unexpected error occurred from ISV code. dargestellt, was nicht sehr hilfreich ist.

Wie Ausnahmen bei asynchronen Plug-ins behandelt werden

Die Nachricht über die Ausnahme für asynchrone registrierte Plug-ins wird in eine System Job-Tabelle geschrieben, die auch als AsyncOperation Table bekannt ist und im System Jobs-Bereich der Web-Anwendung eingesehen werden kann. Dem Benutzer wird kein Dialog angezeigt. Async-Plugins nehmen nicht an der Datenbanktransaktion teil, die sie in die Warteschlange gestellt hat, daher können sie die Transaktion nicht abbrechen.

Wiederholung eines asynchronen Plug-ins

Mit einem asynchronen Plug-In-Schritt können Sie es erneut versuchen, wenn ein Plug-In fehlschlägt. Dies kann auf einen Netzwerkfehler oder einen anderen wiederholbaren Fehler beim Aufruf einer externen Ressource zurückzuführen sein.

Um Ihr Plugin erneut zu versuchen, verwenden Sie den InvalidPluginExecutionException(OperationStatus, Int32, String) Konstruktor mit dem OperationStatus Enum Retry-Memberwert.

Wenn Ihr Plug-In diese Art von Ausnahme auslöst, versucht der asynchrone Dienst viermal, Ihr Plug-In auszuführen. Wenn dies nicht innerhalb von vier Versuchen gelingt, schlägt es fehl.

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).