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 renvoyé à l’utilisateur.
  • Les exceptions pour les étapes de plug-in asynchrones sont enregistrées et ajoutées à la table Tâche système, également appelée Table AsyncOperation.

Annuler l’opération en cours

Dans un plug-in synchrone, l’une des options disponibles est de rejeter la demande. Si l’opération ne suit pas les règles imposées par votre plug-in, vous pouvez simplement lancer une exception InvalidPluginExecutionException et indiquer les raisons pour lesquelles l’opération a été rejetée dans le message.

Dans l’idéal, vous devez annuler uniquement les opérations qui utilisent des plug-ins synchrones enregistrés dans la phase PreValidation. Cette phase se produit généralement en dehors de la transaction de base de données principale. L’annulation d’une opération avant qu’elle atteigne la transaction est fortement recommandée, 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 figurent toujours dans la transaction de base de données.

Parfois, les phases PreValidation figurent dans une transaction lorsqu’elles sont activées par la logique d’une autre opération. Par exemple, si vous créez un enregistrement de tâche pendant la phase 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 pendant la phase PreValidation, mais elle fait partie de la transaction qui crée l’enregistrement de la table de compte. Vou pouvez indiquer si une opération s’inscrit dans une transaction à l’aide de la valeur de la propriété IExecutionContext.IsInTransaction .

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

Lorsque vous levez une exception InvalidPluginExecutionException dans un plug-in synchrone, une boîte de dialogue d’erreur avec 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.

Notes

Dans l’interface unifiée, la boîte de dialogue d’erreur ne prend pas en charge le contenu codé en HTML dans le message. Texte uniquement svp.

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 quel message d’exception est affiché à l’utilisateur. Cela est vrai pour les applications pilotées par modèle 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

Nous vous recommandons de détecter toute erreur et de lancer une exception InvalidPluginExecutionException afin que vous puissiez contrôler ce qui est affiché pour 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 de manière asynchrone est écrit dans une table Tâche système, également appelée AsyncOperation, pouvant être consultée dans la zone Tâches 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éessayer un plug-in asynchrone

Avec une étape de plug-in asynchrone, vous pouvez réessayer lorsqu’un plug-in échoue. La cause de l’échec peut être due à une erreur de réseau ou à une autre erreur qui peut être retentée lors de l’appel d’une ressource externe.

Pour réessayer votre plug-in, utilisez le constructeur InvalidPluginExecutionException (OperationStatus, Int32, String) en utilisant la valeur de membre OperationStatus Enum Retry.

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 n’aboutit pas au bout de quatre tentatives, l’appel échoue.

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).