Share via


Réduire une éventuelle perte de données en utilisant l'accès concurrentiel optimiste

 

Date de publication : novembre 2016

S’applique à : Dynamics CRM 2015

Dans un système multithread et multiutilisateur comme Microsoft Dynamics 365, les opérations et les modifications apportées aux données se produisent souvent en parallèle. Un problème surgit lorsque deux ou plusieurs opérations de mise à jour ou de suppression sont effectuées simultanément sur le même élément de données. Cette situation peut avoir pour résultat une perte de données. Cette version du SDK comporte la possibilité pour vos applications de détecter si un enregistrement d'entité a été modifié sur le serveur entre le moment où l'application l'a récupéré et le moment ou elle a essayé de l'actualiser ou de le supprimer.

Notes

Pour les organisations Microsoft Dynamics CRM Online, cette fonctionnalité n'est disponible que si votre organisation a effectué la mise à jour vers la mise à jour 1 de Dynamics CRM Online 2015. Cette fonctionnalité n'est pas disponible pour Dynamics CRM (local).

L'accès concurrentiel optimiste est pris en charge sur toutes les entités prédéfinies activées pour la synchronisation hors connexion et pour toutes les entités personnalisées. Vous pouvez déterminer si une entité prend en charge l'accès concurrentiel optimiste en récupérant les métadonnées de l'entité via un appel SDK, ou en affichant les métadonnées à l'aide du navigateur de métadonnées. Vous pouvez également vérifier si l'attribut IsOptimisticConcurrencyEnabled est défini sur true. Pour les entités personnalisées, cette propriété est définie sur true par défaut.Pour afficher les métadonnées d'entité pour votre organisation, installez la solution Navigateur de métadonnées décrite dans l'article Parcourir les métadonnées de votre organisation. Vous pouvez également afficher les métadonnées d'une organisation non personnalisée dans un fichier Excel appelé EntityMetadata.xlsx dans le dossier de niveau supérieur du téléchargement du Kit de développement logiciel (SDK).

Contenu de la rubrique

Activer l'accès concurrentiel optimiste

Mettre à jour ou supprimer un enregistrement

Gérer les exceptions

Activer l'accès concurrentiel optimiste

Vous pouvez activer le comportement de vérification de l'accès concurrentiel optimiste lors de l'exécution de UpdateRequest en définissant la propriété ConcurrencyBehavior de la demande sur IfRowVersionMatches. De même, pour DeleteRequest, définissez la propriété ConcurrencyBehavior.

Lors de l'utilisation du contexte de service d'organisation pour effectuer des modifications de données, définissez ConcurrencyBehavior sur l'objet OrganizationServiceContext. Cette valeur sera passée à tous les messages UpdateRequest et DeleteRequest utilisés par OrganizationServiceContext lorsque SaveChanges est appelé.

Le comportement d'accès concurrentiel optimiste ne peut être défini que via un appel SDK. Il n'existe actuellement aucun paramètre pour lui dans les formulaires de l'application Web.

Mettre à jour ou supprimer un enregistrement

Après la récupération d'un enregistrement d'entité, accédez à l'attribut RowVersion pour obtenir la version actuelle de cet enregistrement. Dans l'objet entité que vous utilisez en tant que Target dans UpdateRequest, définissez la propriété RowVersion sur la même valeur de l'enregistrement récupéré et exécutez la demande. De même, dans l'objet référence d'entité que vous utilisez en tant que Target dans DeleteRequest, définissez la propriété RowVersion sur la même valeur de version de ligne de l'enregistrement récupéré et exécutez la demande.

Si l'entité passée à UpdateRequest contient des entités associées, le même comportement est appliqué à toutes les opérations de mise à jour à l'aide des versions de ligne fournies avec chaque entité individuelle.

Lorsque la demande est reçue par la plateforme, une comparaison de la version de la ligne d'enregistrement d'entité actuelle et de la version de la ligne de demande est effectuée. Si les versions de ligne correspondent et que ConcurrencyBehavior est défini sur IfRowVersionMatches, l'opération aboutira. Sinon, une exception de faute est renvoyée.

Gérer les exceptions

Plusieurs conditions d'erreur peuvent être retournées dans FaultException<OrganizationServiceFault> à partir de l'appel de service Web lors de l'utilisation de l'accès concurrentiel optimiste.

  • ConcurrencyVersionMismatch (code=-2147088254)

    Lorsqu'une version de ligne est fournie et que le comportement IfVersionMatches est indiqué, si la version de l'enregistrement existant ne correspond pas à la version de ligne fournie dans la demande, une erreur est renvoyée.

  • ConcurrencyVersionNotProvided (code= -2147088253

    Lorsque le comportement IfVersionMatches est indiqué et qu'aucune valeur pour la version de ligne n'est fournie, une erreur est renvoyée.

  • OptimisticConcurrencyNotEnabled (code=-2147088243)

    Lorsque le comportement IfVersionMatches est indiqué lors de la mise à jour d'une entité, et que l'accès concurrentiel optimiste n'est pas activé, une erreur est renvoyée.

Vous pouvez activer la propriété Code du défaut renvoyé pour déterminer si le défaut est lié à l'accès concurrentiel optimiste. Les codes des conditions d'erreur indiqués ci-dessus ont été obtenus auprès du code d'assistance ErrorCodes.cs.

Voir aussi

Écrire des applications et des extensions de serveur
Exemple : Utiliser l'accès concurrentiel optimiste avec les opérations de mise à jour et de suppression

© 2017 Microsoft. Tous droits réservés. Copyright