Compartilhar via


Dando suporte a notificações

Implementar interfaces de ponto de conexão no provedor e no consumidor

Para implementar notificações, uma classe de provedor deve herdar do IRowsetNotifyCP e do IConnectionPointContainer.

IRowsetNotifyCP implementa o site do provedor para a interface do ponto de conexão IRowsetNotify. IRowsetNotifyCP implementa funções de difusão para aconselhar os ouvintes no ponto de conexão de alterações IID_IRowsetNotify sobre o conteúdo do conjunto de linhas.

Você também deve implementar e registrar IRowsetNotify no consumidor (também conhecido como coletor) usando IRowsetNotifyImpl para que o consumidor possa lidar com as notificações. Para obter informações sobre a implementação da interface do ponto de conexão no consumidor, confira Notificações de Recebimento.

Além disso, a classe deve ter um mapa que defina a entrada do ponto de conexão, da seguinte maneira:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Adicionar IRowsetNotify

Para adicionar IRowsetNotify, você precisa adicionar IConnectionPointContainerImpl<rowset-name> e IRowsetNotifyCP<rowset-name> à cadeia de herança.

Por exemplo, aqui está a cadeia de herança de RUpdateRowset no UpdatePV:

Observação

O código de exemplo pode ser diferente do que está listado aqui. Você deve considerar o código de exemplo como a versão mais recente.

///////////////////////////////////////////////////////////////////////////
// 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>

Configurar entradas de mapa COM

Você também precisa adicionar o seguinte ao mapa COM em seu conjunto de linhas:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Essas macros permitem que qualquer pessoa que chame QueryInterface para o seu contêiner de ponto de conexão (a base de IRowsetNotify) encontre a interface solicitada em seu provedor. Para obter um exemplo de como usar pontos de conexão, consulte o exemplo e o tutorial da ATL POLYGON.

Configurar entradas de mapa de ponto de conexão

Você também precisa adicionar um mapa de ponto de conexão. Ele deve ser semelhante a:

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

Esse mapa de ponto de conexão permite que um componente que procura a interface IRowsetNotify a encontre em seu provedor.

Definindo propriedades

Você também precisa adicionar as propriedades a seguir ao seu provedor. Você só precisa adicionar propriedades com base nas interfaces compatíveis.

Propriedade Adicionar se você der suporte
DBPROP_IConnectionPointContainer Sempre
DBPROP_NOTIFICATIONGRANULARITY Sempre
DBPROP_NOTIFICATIONPHASES Sempre
DBPROP_NOTIFYCOLUMNSET IRowsetChange
DBPROP_NOTIFYROWDELETE IRowsetChange
DBPROP_NOTIFYROWINSERT IRowsetChange
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE Sempre
DBPROP_NOTIFYROWFIRSTCHANGE IRowsetUpdate
DBPROP_NOTIFYROWSETRELEASE Sempre
DBPROP_NOTIFYROWUNDOCHANGE IRowsetUpdate
DBPROP_NOTIFYROWUNDODELETE IRowsetUpdate
DBPROP_NOTIFYROWUNDOINSERT IRowsetUpdate
DBPROP_NOTIFYROWUPDATE IRowsetUpdate

A maior parte da implementação das notificações já está inserida nos Modelos de Provedor do OLE DB. Se você não adicionar IRowsetNotifyCP à sua cadeia de herança, o compilador removerá todo esse código do fluxo de compilação, tornando o tamanho do código menor.

Confira também

Técnicas de provedor avançadas