Compartir a través de


Notificación de datos

Los objetos que consumen datos de un origen externo a veces deben informarse cuando cambian los datos de ese origen. Por ejemplo, un visor de cintas de cotizaciones que se basa en los datos de alguna hoja de cálculo debe recibir una notificación cuando esos datos cambian para que pueda actualizar su presentación. Del mismo modo, un documento compuesto necesita información sobre los cambios de datos en sus objetos incrustados para que pueda actualizar sus memorias caché de datos. En casos como este, en los que es deseable la actualización dinámica de datos, los orígenes de datos requieren algún mecanismo para notificar a los consumidores de datos los cambios a medida que se producen sin obligar a los consumidores a quitar todo con el fin de actualizar sus datos. Idealmente, después de recibir una notificación de que se ha producido un cambio en el origen de datos, un objeto de consumo puede pedir una copia actualizada en su tiempo libre.

El mecanismo de COM para controlar las notificaciones asincrónicas de este tipo es un objeto denominado receptor de aviso, que es simplemente cualquier objeto COM que implementa una interfaz denominada IAdviseSink. Los consumidores de datos implementan IAdviseSink. Se registran para recibir notificaciones mediante la entrega de un puntero al objeto de datos de interés.

Las interfaces IAdviseSink exponen los métodos siguientes para recibir notificaciones asincrónicas:

Método Notifica al receptor de aviso que
OnDataChange
Los datos del objeto de llamada han cambiado.
OnViewChange
Las instrucciones para dibujar el objeto que llama han cambiado.
OnRename
El moniker del objeto que llama ha cambiado.
onSave
El objeto que llama se ha guardado en el almacenamiento persistente.
onClose
Se ha cerrado el objeto que llama.

Como indica la tabla, la interfaz IAdviseSink expone métodos para notificar al receptor de avisos eventos distintos de los cambios en los datos del objeto que llama. El objeto que realiza la llamada también puede notificar al receptor cuando cambia la forma en que se dibuja o se cambia el nombre, se guarda o se cierra. Estas otras notificaciones se usan principalmente o completamente en el contexto de documentos compuestos, aunque el mecanismo de notificación es idéntico. Para obtener más información sobre las notificaciones de documentos compuestos, vea "Documentos compuestos".

Para aprovechar el receptor de asesoramiento, un origen de datos debe implementar IDataObject::D Advise, IDataObject::D Unadvise e IDataObject::EnumDAdvise. Un consumidor de datos llama al método DAdvise para notificar a un objeto de datos que desea recibir una notificación cuando cambian los datos del objeto. El objeto de consumo llama al método DUnadvise para anular esta conexión. Cualquier parte interesada puede llamar al método EnumDAdvise para aprender el número de objetos que tienen una conexión de asesoramiento con un objeto de datos.

Cuando los datos cambian en el origen, el objeto de datos llama a IAdviseSink::OnDataChange en todos los consumidores de datos que se han registrado para recibir notificaciones. Para realizar un seguimiento de las conexiones de asesoramiento y administrar el envío de notificaciones, los orígenes de datos dependen de un objeto denominado titular del aviso de datos. Puede crear su propio titular de asesoramiento de datos mediante la implementación de la interfaz IDataAdviseHolder . O bien, puede permitir que COM lo haga automáticamente llamando a la función auxiliar CreateDataAdviseHolder.

Transferencia de datos