Compartir a través de


Admitir notificaciones

Actualización: noviembre 2007

Implementar interfaces de punto de conexión en el proveedor y en el consumidor

Para implementar notificaciones, una clase de proveedor debe heredar de IRowsetNotifyCP y IConnectionPointContainer.

IRowsetNotifyCP implementa el sitio del proveedor para interfaz de punto de conexión IRowsetNotify. IRowsetNotifyCP implementa funciones de difusión para advertir a los agentes de escucha del punto de conexión IID_IRowsetNotify sobre cambios en el contenido del conjunto de filas.

Tenga en cuenta que también debe implementar y registrar IRowsetNotify en el consumidor (conocido también como el receptor) mediante IRowsetNotifyImpl, de forma que el consumidor pueda controlar las notificaciones. Para obtener información sobre la implementación de la interfaz de punto de conexión en el consumidor, vea Recibir notificaciones.

Además, la clase también debe contener un mapa que defina la entrada del punto de conexión, de la manera siguiente:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Agregar IRowsetNotify

Para agregar IRowsetNotify, debe agregar IConnectionPointContainerImpl<rowset-name> y IRowsetNotifyCP<rowset-name> a la cadena de herencia.

Por ejemplo, a continuación se muestra la cadena de herencia para RUpdateRowset en UpdatePV:

Nota:

El código del ejemplo puede ser diferente del mostrado aquí; debe considerar el código del ejemplo como la versión más actualizada.

///////////////////////////////////////////////////////////////////////////
// class RUpdateRowset (in rowset.h)

class RUpdateRowset : 
public CRowsetImpl< RUpdateRowset, CAgentMan, CUpdateCommand, 
         CAtlArray< CAgentMan, CAtlArray<CAgentMan> >, CSimpleRow, 
         IRowsetScrollImpl< RUpdateRowset, IRowsetScroll > >,
      public IRowsetUpdateImpl< RUpdateRowset, CAgentMan >,
      public IConnectionPointContainerImpl<RUpdateRowset>,
      public IRowsetNotifyCP<RUpdateRowset>

Establecer entradas del mapa COM

También debe agregar las líneas siguientes al mapa COM del conjunto de filas:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Estas macros permiten encontrar en el proveedor la interfaz solicitada llamando a QueryInterface para obtener el contenedor de punto de conexión (la base de IRowsetNotify). Para consultar un ejemplo del uso de los puntos de conexión, vea el ejemplo ATL POLYGON y el tutorial.

Establecer entradas del mapa de puntos de conexión

También debe agregar un mapa de puntos de conexión. Debe ser parecido al siguiente:

BEGIN_CONNECTION_POINT_MAP(rowset-name)
     CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()

Este mapa de puntos de conexión permite a los componentes que busquen la interfaz IRowsetNotify encontrarla en el proveedor.

Establecer propiedades

También deberá agregar las siguientes propiedades al proveedor. Sólo tendrá que agregar propiedades en función de las interfaces que admita.

Propiedad

Debe agregarla si admite

DBPROP_IConnectionPointContainer

Siempre

DBPROP_NOTIFICATIONGRANULARITY

Siempre

DBPROP_NOTIFICATIONPHASES

Siempre

DBPROP_NOTIFYCOLUMNSET

IRowsetChange

DBPROP_NOTIFYROWDELETE

IRowsetChange

DBPROP_NOTIFYROWINSERT

IRowsetChange

DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE

Siempre

DBPROP_NOTIFYROWFIRSTCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWSETRELEASE

Siempre

DBPROP_NOTIFYROWUNDOCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWUNDODELETE

IRowsetUpdate

DBPROP_NOTIFYROWUNDOCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWUPDATE

IRowsetUpdate

La mayor parte de la implementación para las notificaciones ya está incrustada en las Plantillas de proveedor OLE DB. Debido a una característica del compilador de Visual C++ .NET, si no agrega IRowsetNotifyCP a la cadena de herencia, el compilador quita todo el código de la secuencia de compilación, con lo que se reduce el tamaño del código.

Vea también

Conceptos

Técnicas avanzadas para proveedores