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.