Freigeben über


Ausnahmen in Plug-Ins behandeln

Die Art und Weise, wie Ausnahmen in Plug-Ins verwaltet werden, hängt vom Typ 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 Systemauftragstabelle hinzugefügt, die auch als AsyncOperation-Tabelle bezeichnet wird.

Abbrechen des aktuellen Vorgangs

Innerhalb eines synchronen Plug-Ins besteht eine der Optionen, die Sie haben, darin, die Anforderung abzulehnen. Wenn der Vorgang nicht den von Ihrem Plug-In erzwungenen Regeln folgt, können Sie eine InvalidPluginExecutionException Ausnahme auslösen und die Gründe angeben, warum der Vorgang in der Nachricht abgelehnt wurde.

Im Idealfall sollten Sie Vorgänge nur mithilfe synchroner Plug-Ins abbrechen, die in der PreValidation-Phase registriert sind. Diese Phase tritt in der Regel außerhalb der Hauptdatenbanktransaktion auf. Das Abbrechen eines Vorgangs, bevor er die Transaktion erreicht, ist äußerst wünschenswert, da der abgebrochene Vorgang zurückgesetzt werden muss. Das Zurücksetzen des Vorgangs erfordert erhebliche Ressourcen und hat auswirkungen auf das System. Vorgänge in den Phasen PreOperation und PostOperation befinden sich immer innerhalb der Datenbanktransaktion.

Manchmal befinden sich PreValidation-Phasen innerhalb einer Transaktion, wenn sie von logik in einem anderen Vorgang initiiert werden. Wenn Sie z. B. einen Aufgabendatensatz in der PostOperation-Phase der Erstellung eines Kontos erstellen, durchläuft die Aufgabenerstellung die Ereignisausführungspipeline und tritt in der PreValidation-Phase auf, aber es ist Teil der Transaktion, die den Datensatz der Kontotabelle erstellt. Sie können feststellen, ob sich ein Vorgang innerhalb einer Transaktion befindet, indem Sie den Wert der IExecutionContextEigenschaft verwendenIsInTransaction .

So behandeln modellgesteuerte Apps synchrone Plug-In-Ausnahmen

Wenn Sie eine InvalidPluginExecutionException Ausnahme innerhalb eines synchronen Plug-Ins auslösen, wird dem Benutzer ein Fehlerdialogfeld mit ihrer Meldung angezeigt. Wenn Sie keine Meldung angeben, wird dem Benutzer ein generisches Fehlerdialogfeld angezeigt. Wenn ein anderer Ausnahmetyp ausgelöst wird, wird dem Benutzer ein Fehlerdialogfeld mit einer allgemeinen Nachricht angezeigt, und die Ausnahmemeldung und Stack-Trace werden in die PluginTraceLog-Tabelle geschrieben.

Hinweis

In Unified Interface unterstützt das Fehlerdialogfeld keinen HTML-codierten Inhalt in der Nachricht. Nur Text.

Unerwartete Fehler

Wenn im Plug-In-Code für einen synchronen Schritt eine Ausnahme auftritt, wird die Verarbeitung des Pipelinevorgangs in der Datenbanktransaktion abgebrochen und ein Rollback findet statt, unabhängig davon, ob Sie eine InvalidPluginExecutionException auslösen oder nicht. InvalidPluginExecutionException ist die einzige Ausnahme, die Ihnen die Möglichkeit bietet, zu steuern, welche Ausnahmemeldung für den Benutzer angezeigt wird. Dies gilt, wenn modellgesteuerte Apps von Dynamics 365-Lösungen verwendet werden.

Sehen Sie sich die verfügbaren InvalidPluginExecutionException Konstruktoren an, um zu sehen, welche Art von Fehlerdaten Ihr Plug-In an die Plattform übergeben kann.

Tipp

Es wird empfohlen, alle Fehler abzufangen und eine InvalidPluginExecutionException Ausnahme auszulösen, damit Sie steuern können, was für den Benutzer angezeigt wird. Dieser Fehler kann einfach "An unexpected error occurred" sein, Aber Sie könnten auch einige Informationen hinzufügen, die dem Administrator bei der Problembehandlung helfen. Auf diese Weise haben Sie eine gewisse Kontrolle. 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 Ausnahmemeldung für asynchron registrierte Plug-Ins wird in eine Systemauftragstabelle geschrieben, die auch als AsyncOperation Table bezeichnet wird, die im Bereich "Systemaufträge " der Webanwendung angezeigt werden kann. Dem Benutzer wird kein Dialogfeld angezeigt. Asynchrone Plug-Ins nehmen nicht an der Datenbanktransaktion teil, die sie in die Warteschlange gestellt hat, daher können sie die Transaktion nicht abbrechen.

Erneut versuchen eines asynchronen Plugins

Bei einem asynchronen Plug-In-Schritt können Sie wiederholen, wenn ein Plug-In fehlschlägt. Die Ursache des Fehlers kann auf einen Netzwerkfehler oder einen anderen erneuten Fehler zurückzuführen sein, der eine externe Ressource aufruft.

Um das Plug-In erneut zu versuchen, verwenden Sie den InvalidPluginExecutionException(OperationStatus, Int32, String) -Konstruktor mit dem Memberwert "OperationStatus EnumRetry ".

Wenn Ihr Plug-In diesen Ausnahmetyp auslöst, versucht der asynchrone Dienst, das Plug-In viermal auszuführen. Wenn die Plug-In-Ausführung nicht innerhalb von vier Versuchen erfolgreich ist, schlägt der Aufruf fehl.