Partager via


Comment les modifications sont-elles propagées au système externe ?

Dernière modification : lundi 2 novembre 2009

S’applique à : SharePoint Server 2010

Dans cet article
Opération de création
Opération de mise à jour
Opération de suppression

Lorsque des données externes sont modifiées localement, les opérations d’écriture ne sont pas immédiatement routées vers le système externe, mais sont routées vers le cache. Celui-ci place ces opérations dans la file d’attente d’opérations et les exécute une par une. Le moment auquel une opération dans la file d’attente sera exécutée n’est pas prévisible et dépend de l’intervalle d’actualisation du cache, de la disponibilité de l’application externe et de divers autres facteurs. La section suivante explique comment le cache exécute les différentes opérations d’écriture.

Opération de création

Lorsque vous créez une instance d’entité dans votre application en mode mise en cache, une opération de création est ajoutée à la file d’attente d’opérations. Business Connectivity Services crée une instance d’entité localement et attribue un ID temporaire à l’instance d’entité nouvellement créée dans le cache jusqu’à ce que l’instance d’entité puisse être créée dans l’application externe et que son ID réel puisse être obtenu. L’ID temporaire (un GUID) est retourné à l’application appelante dans le cadre de la référence EntityInstance.

Notes

Vous pouvez utiliser l’indicateur IsTemporary du champ Identité de l’instance d’entité hors connexion pour déterminer si l’identité est temporaire.

Lorsque l’opération est exécutée dans l’application externe et qu’elle est couronnée de succès, l’ID de l’instance d’entité nouvellement créée est mis à jour avec l’ID réel obtenu du système externe et l’instance d’entité est marquée pour actualisation, si bien que les valeurs de tous les champs calculés peuvent être actualisées. Si l’appel échoue, l’instance d’entité est marquée comme InError et toutes les exceptions sont enregistrées dans le cache.

Opération de mise à jour

Lorsque vous mettez à jour une instance d’entité dans votre application en mode mise en cache, les modifications sont enregistrées dans le cache. Une opération de mise à jour est ajoutée à la file d’attente et les données d’origine de l’instance d’entité avant la mise à jour locale sont enregistrées dans le cache. Lorsque le runtime exécute cette opération, il appelle la recherche spécifique pour obtenir les informations les plus récentes auprès de l’application externe et les compare à l’état d’origine pour vérifier que les données n’ont pas été modifiées dans l’application externe par un autre utilisateur ou par une autre application. Si aucun conflit n’est détecté, un appel d’instance de méthode Update est émis en direction de l’application externe. Si l’opération est couronnée de succès, l’instance d’entité est marquée pour actualisation, si bien que les valeurs de tous les champs calculés peuvent être actualisées. Si l’appel échoue, l’instance d’entité est marquée comme InError et toutes les exceptions sont enregistrées dans le cache. Si un conflit est détecté, l’instance d’entité est de nouveau marquée comme InError et une ConflictDetectedException est enregistrée dans le cache sur l’instance d’entité.

Par contre, si la recherche spécifique déclenche une ObjectNotFoundException ou ObjectDeletedException, cela signifie qu’un autre utilisateur ou qu’une autre application a déjà supprimé cette instance d’entité dans l’application externe, auquel cas l’opération de mise à jour est marquée comme ayant échoué.

Opération de suppression

Lorsque vous supprimez une instance d’entité dans votre application en mode mise en cache, la suppression est enregistrée dans le cache. Une opération de suppression est ajoutée à la file d’attente et les données d’origine de l’instance d’entité avant la suppression locale sont enregistrées dans le cache. Lorsque le runtime exécute cette opération, il appelle la recherche spécifique pour obtenir les informations les plus récentes auprès de l’application externe et les compare à l’état d’origine pour vérifier que les données n’ont pas été modifiées dans l’application externe par un autre utilisateur ou par une autre application. Si aucun conflit n’est détecté, un appel d’instance de méthode Delete est émis en direction de l’application externe. Si l’opération est couronnée de succès, l’instance d’entité dans le cache est marquée comme ayant été supprimée. Si l’appel échoue, l’instance d’entité est marquée comme InError et toutes les exceptions sont enregistrées dans le cache.

Par contre, si la recherche spécifique déclenche une ObjectNotFoundException ou ObjectDeletedException, cela signifie qu’un autre utilisateur ou qu’une autre application a déjà supprimé cette instance d’entité dans l’application externe, auquel cas aucune erreur n’est retournée, l’instance d’entité est supprimée du cache et l’opération de suppression est simplement marquée comme ayant réussi.