Partager via


Notification de données

Les objets qui consomment des données provenant d’une source externe doivent parfois être informés lorsque les données de cette source changent. Par exemple, une visionneuse de bandes de graduations boursières qui s’appuie sur les données de certaines feuilles de calcul doit être avertie quand ces données changent afin de pouvoir mettre à jour leur affichage. De même, un document composé a besoin d’informations sur les modifications de données dans ses objets incorporés afin de pouvoir mettre à jour ses caches de données. Dans de tels cas, où la mise à jour dynamique des données est souhaitable, les sources de données nécessitent un mécanisme pour informer les consommateurs de données des modifications à mesure qu’elles se produisent sans obliger les consommateurs à tout abandonner pour mettre à jour leurs données. Dans l’idéal, après avoir été informé qu’une modification s’est produite dans la source de données, un objet consommateur peut demander une copie mise à jour à tout moment.

Le mécanisme de COM pour gérer les notifications asynchrones de ce type est un objet appelé récepteur de conseil, qui est simplement n’importe quel objet COM qui implémente une interface appelée IAdviseSink. Les consommateurs de données implémentent IAdviseSink. Ils s’inscrivent pour recevoir des notifications en mettant un pointeur vers l’objet de données qui vous intéresse.

Les interfaces IAdviseSink exposent les méthodes suivantes pour recevoir des notifications asynchrones :

Méthode Avertit le récepteur de conseil que
OnDataChange
Les données de l’objet appelant ont changé.
OnViewChange
Les instructions de dessin de l’objet appelant ont changé.
OnRename
Le moniker de l’objet appelant a changé.
OnSave
L’objet appelant a été enregistré dans le stockage persistant.
OnClose
L’objet appelant a été fermé.

Comme l’indique le tableau, l’interface IAdviseSink expose des méthodes pour notifier le récepteur de conseil d’événements autres que les modifications apportées aux données de l’objet appelant. L’objet appelant peut également avertir le récepteur lorsque la façon dont il dessine lui-même change, ou s’il est renommé, enregistré ou fermé. Ces autres notifications sont utilisées principalement ou entièrement dans le contexte de documents composés, bien que le mécanisme de notification soit identique. Pour plus d’informations sur les notifications de documents composés, consultez « Documents composés ».

Pour tirer parti du récepteur de conseil, une source de données doit implémenter IDataObject::D Advise, IDataObject::D Unadvise et IDataObject::EnumDAdvise. Un consommateur de données appelle le Mothod DAdvise pour notifier un objet de données qu’il souhaite être averti lorsque les données de l’objet changent. L’objet consommateur appelle la méthode DUnadvise pour supprimer cette connexion. Toute partie intéressée peut appeler la méthode EnumDAdvise pour connaître le nombre d’objets ayant une connexion consultative avec un objet de données.

Lorsque les données changent au niveau de la source, l’objet de données appelle IAdviseSink::OnDataChange sur tous les consommateurs de données qui se sont inscrits pour recevoir des notifications. Pour effectuer le suivi des connexions de conseil et gérer la distribution des notifications, les sources de données s’appuient sur un objet appelé détenteur de conseils de données. Vous pouvez créer votre propre titulaire de conseils de données en implémentant l’interface IDataAdviseHolder . Vous pouvez également laisser COM le faire pour vous en appelant la fonction d’assistance CreateDataAdviseHolder.

Transfert de données