Partager via


Gérer les exceptions dans les plug-ins

La façon dont les exceptions sont gérées dans les plug-ins dépend du type d’enregistrement d’étape de plug-in.

  • Les exceptions pour les étapes de plug-in synchrones annulent et restaurent l’opération. Vous avez la possibilité de contrôler le message retourné à l’utilisateur.
  • Les exceptions pour les étapes de plug-in asynchrones sont enregistrées et ajoutées à la Table de Travaux Système, également appelée Table AsyncOperation.

Annulation de l’opération en cours

Dans un plug-in synchrone, l’une des options dont vous disposez consiste à rejeter la demande. Si l’opération ne suit pas les règles appliquées par votre plug-in, vous pouvez lever une InvalidPluginExecutionException exception et fournir les raisons pour lesquelles l’opération a été rejetée dans le message.

Dans l'idéal, vous ne devriez annuler des opérations qu'à l'aide de plug-ins synchrones inscrits dans l'étape PreValidation. Cette étape se produit généralement en dehors de la transaction principale de base de données. L’annulation d’une opération avant d’atteindre la transaction est fortement souhaitable, car l’opération annulée doit être restaurée. La restauration de l’opération nécessite des ressources importantes et a un impact sur les performances du système. Les opérations dans les phases PreOperation et PostOperation se trouvent toujours dans la transaction de base de données.

Parfois, les phases preValidation se trouvent dans une transaction lorsqu’elles sont lancées par la logique dans une autre opération. Par exemple, si vous créez un enregistrement de tâche dans l’étape PostOperation de la création d’un compte, la création de la tâche passe par le pipeline d’exécution d’événements et se produit dans l’étape PreValidation , mais elle fait partie de la transaction qui crée l’enregistrement de table de compte. Vous pouvez indiquer si une opération se trouve dans une transaction par la valeur de la IExecutionContextpropriété .IsInTransaction

Comment les applications basées sur des modèles gèrent les exceptions de plug-in synchrones

Lorsque vous lancez une InvalidPluginExecutionException exception dans un plug-in synchrone, une boîte de dialogue d'erreur contenant votre message s'affiche à l'utilisateur. Si vous ne fournissez pas de message, une boîte de dialogue d’erreur générique s’affiche à l’utilisateur. Si un autre type d’exception est levé, l’utilisateur voit une boîte de dialogue d’erreur avec un message générique et le message d’exception et la trace de la pile sont écrits dans la Table PluginTraceLog.

Note

Dans l’interface unifiée, la boîte de dialogue d’erreur ne prend pas en charge le contenu encodé HTML dans le message. Texte uniquement s’il vous plaît.

Erreurs inattendues

Cependant, lorsqu’une exception se produit dans le code du plug-in pour une étape synchrone, l’opération du pipeline en cours de traitement dans la transaction de la base de données est annulée et restaurée, que vous levez une exception InvalidPluginExecutionException ou non. InvalidPluginExecutionException est la seule exception qui vous permet de contrôler le message d’exception qui s’affiche à l’utilisateur. Cela est vrai pour les applications basées sur des modèles lorsqu'elles sont utilisées par les solutions Dynamics 365.

Examinez les constructeurs InvalidPluginExecutionException disponibles pour voir quel type de données liées aux erreurs votre plug-in peut renvoyer à la plateforme.

Conseil / Astuce

Nous vous recommandons d’intercepter toute erreur et de lever une InvalidPluginExecutionException exception pour contrôler ce qui est affiché à l’utilisateur. Cette erreur peut simplement être «An unexpected error occurred », mais vous pouvez également ajouter des informations qui aideront l’administrateur à résoudre le problème. De cette façon, vous avez un certain contrôle. Si vous autorisez l’apparition d’autres types d’exceptions, l’erreur sera présentée comme une erreur IsvUnExpected avec le message An unexpected error occurred from ISV code., ce qui n’est pas très utile.

Gestion des exceptions de plug-ins asynchrones

Le message d’exception pour les plug-ins inscrits asynchrones est écrit dans une table de travaux système , également appelée table AsyncOperation, qui peut être consultée dans la zone Travaux système de l’application web. Aucune boîte de dialogue n’est affichée à l’utilisateur. Les plug-ins asynchrones ne participent pas à la transaction de base de données qui les a mis en file d’attente. Par conséquent, ils ne peuvent pas annuler la transaction.

Réessayez un plug-in asynchrone

Avec une étape de plug-in asynchrone, vous pouvez réessayer en cas d’échec d’un plug-in. La cause de l’échec peut être due à une erreur réseau ou à une autre erreur retriable appelant une ressource externe.

Pour réessayer votre plug-in, utilisez le constructeur InvalidPluginExecutionException(OperationStatus, Int32, String) à l’aide de la valeur du membre OperationStatus EnumRetry .

Lorsque votre plug-in lève ce type d’exception, le service asynchrone tente d’exécuter votre plug-in quatre fois. Si l’exécution du plug-in ne réussit pas dans quatre tentatives, l’appel échoue.