Infrastructure d’événement
Microsoft Dataverse expose les événements pour indiquer où le processus s’exécute actuellement dans le pipeline. Nous pouvons gérer ces événements pour effectuer des tâches comme valider les données, empêcher les transactions de se terminer ou automatiser toute logique métier que vous ne pouvez pas accomplir par des moyens déclaratifs.
Nous pouvons nous abonner à ces événements en enregistrant des assemblys .NET (appelés plug-ins) pour exécuter la logique personnalisée chaque fois que l’événement donné se produit. Nous effectuons l’enregistrement à l’aide d’un outil appelé Plug-in Registration Tool. Pour en savoir plus sur Plug-in Registration Tool, consultez le didacticiel Enregistrer un plug-in.
À un niveau général, la gestion des événements implique trois éléments. Tout d’abord, vous devez vous abonner à un message spécifique représentant le type d’opération (ou d’événement) qui se produit actuellement (ou sur le point de se produire), comme Créer, Récupérer, Mettre à jour, etc. Vous devez également indiquer à quel moment dans ce pipeline d’événements vous souhaitez que votre logique s’exécute (c’est-à-dire avant ou après l’opération). Vous pouvez également gérer les événements avant la validation, ce qui constitue une méthode pratique vous permettant d’appliquer une logique de validation avancée que vous ne pouvez pas effectuer au moyen de règles métier ou de flux de travail. Enfin, vous devez indiquer le mode d’exécution avec lequel vous souhaitez que la logique s’exécute (de manière synchrone ou asynchrone).
Examinons maintenant ces trois domaines plus en détail.
Messages d’événements
Dataverse expose de nombreux messages qui sont publiés lorsque diverses opérations de données se produisent. Pour plus d’informations sur ces messages, consultez Utiliser des messages avec le service d’organisation.
Les opérations de données de base exposées par Dataverse sont :
Create
Retrieve
RetrieveMultiple
Update
Delete
Associate
Disassociate
En outre, divers messages sont exposés contextuellement, selon le type de table que vous gérez. Par exemple, si ma table dispose d’une colonne cumulative, je peux implémenter un gestionnaire d’événements sur le message d’événement CalculateRollupField.
En général, un inventaire de ces messages personnalisés est mis à notre disposition au moyen de Dataverse en effectuant une recherche dans l’espace de noms Microsoft.Sdk.Messages pour toutes les classes dont le nom se termine par \Request. Pour afficher les messages disponibles pour un type de table donné, vous pouvez également parcourir les combinaisons table-message au moyen de Plugin Registration Tool.
De plus, nous pouvons créer et exposer nos propres messages en créant des Actions personnalisées. Pour en savoir plus sur les actions, consultez Créer vos propres actions.
Pipeline d’événements
En sus de vous abonner à des messages ou types d’événements spécifiques, Dataverse expose également un moyen d’indiquer à quel moment dans le pipeline cet événement exécute votre logique personnalisée. Pour les développeurs ASP.NET, cela s’apparente à la façon dont vous utilisez les cycles de vie des pages dans une application web. Cette approche est un modèle de développement courant pour les architectures de publication-abonnement qui doit sembler familier aux développeurs ayant l’expérience d’autres infrastructures d’événements.
Validation préalable
L’événement de validation préalable se produit d’abord dans le pipeline, avant que les vérifications de sécurité ne soient effectuées. Son but est de garantir que l’utilisateur exécutant la transaction en cours dispose des autorisations appropriées nécessaires pour effectuer l’opération prévue.
En tant que développeur, vous pouvez utiliser cet événement pour exécuter la logique de validation et annuler l’opération avant que la transaction ne se produise. Par exemple, s’il est configuré pour s’exécuter chaque fois qu’une table est mise à jour, vous pouvez annuler l’opération avant la mise à jour en levant une méthode InvalidPluginExecutionException dans la logique d’exécution de votre plug-in. Pour en savoir plus sur le contexte d’exécution, consultez Comprendre le contexte d’exécution.
Opération préalable
Utilisez cet événement si vous souhaitez modifier les valeurs de la table avant son enregistrement.
Opération postérieure
Utilisez cet événement pour modifier les propriétés du message avant que le demandeur de la requête n’obtienne la réponse. Veillez à ne pas appliquer de mises à jour à la table correspondante à ce stade, car cela déclenchera un autre événement de mise à jour.
Modes d’exécution (synchrone et asynchrone)
Vous pouvez configurer les plug-ins afin qu’ils s’exécutent de manière synchrone ou asynchrone, selon le type d’opération de pipeline traité.
Synchrone
Les plug-ins enregistrés dans ce mode s’exécuteront dès que le traitement de l’événement atteint leur phase de pipeline d’exécution, et l’opération entière ne se poursuivra pas tant que la logique n’aura pas terminé de s’exécuter. Si plusieurs plug-ins sont enregistrés pour s’exécuter à la même phase du pipeline, l’attribut d’ordre d’exécution (spécifié au moyen de Plug-in Registration Tool) déterminera lequel s’exécute en premier.
Asynchrone
Les plug-ins enregistrés dans ce mode sont envoyés en tant que tâche système au service asynchrone, qui exécute leur logique une fois l’opération donnée terminée. Pour en savoir plus sur le fonctionnement des tâches système, consultez Service asynchrone.
Remarque
Vous ne pouvez enregistrer les plug-ins asynchrones que pour la phase PostOperation du pipeline d’événements.