Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: Outlook 2013 | Outlook 2016
Como o suporte à notificação de eventos pode ser complicado, o MAPI fornece três métodos de objeto de suporte que implementam as partes mais difíceis do processo. Esses métodos funcionam como uma unidade, e um provedor deve usar todos os três ou nenhum deles.
Os métodos de suporte MAPI usam chaves de notificação para gerenciar as conexões entre os coletores de aviso e os objetos que geram as notificações. Uma chave de notificação é uma estrutura NOTIFKEY que contém dados binários que identifica um objeto entre processos. Uma chave de notificação normalmente é copiada do identificador de entrada de longo prazo do objeto de origem do aviso. Se o cliente tiver fornecido um identificador de entrada na chamada para o Conselho, você poderá usá-lo para a chave de notificação. Se o parâmetro lpEntryID para Advise for NULL, use o identificador de entrada do objeto de contêiner mais externo possível, como o repositório de mensagens.
Para usar os métodos de suporte, chame IMAPISupport::Subscribe sempre que um cliente chamar seu método Advise para se registrar para uma notificação. Aloque uma estrutura NOTIFKEY e crie uma chave de notificação exclusiva para seu objeto de origem de aconselhamento. Por exemplo, um provedor de repositório de mensagens que é solicitado a notificar um cliente quando uma mensagem é recebida em uma pasta específica cria uma chave de notificação para essa pasta. Passe um ponteiro para a estrutura NOTIFKEY na chamada para se inscrever, juntamente com um ponteiro para o coletor de aconselhamento do cliente. Subscribe chama o método IUnknown::AddRef do coletor de aviso para incrementar sua contagem de referência e o MAPI retém o ponteiro até que o registro seja cancelado.
Você pode passar o sinalizador NOTIFY_SYNC para Subscribe para solicitar que Notify se comporte de forma síncrona e não retorne até que tenha feito todas as chamadas para os métodos IMAPIAdviseSink::OnNotify de coletores de aviso registrados. Defina este sinalizador apenas para seu próprio uso interno. Não o defina quando responder a uma chamada de aconselhamento do cliente. A notificação de eventos entre clientes e provedores é sempre assíncrona. Ou seja, o MAPI garante que a chamada durante a qual um evento ocorre retornará ao cliente antes que qualquer uma das chamadas OnNotify seja feita.
Se você definir o sinalizador NOTIFY_SYNC, não faça alterações em nenhum dos objetos de coletor de aviso e não passe um coletor de aviso de wrapper criado por HrThisThreadAdviseSink para Assinar. HrThisThreadAdviseSink cria uma versão thread-safe de um coletor de aviso para ser usado somente com notificação assíncrona.
Se um coletor de aviso registrado para notificação síncrona retornar de OnNotify com o sinalizador de CALLBACK_DISCONTINUE definido, IMAPISupport::Notify definirá o sinalizador de NOTIFY_CANCELED e retornará sem fazer nenhuma chamada para OnNotify.
Depois que a assinatura for retornada, você não precisará mais guardar sua cópia do coletor de aconselhamento do cliente. Chame seu método IUnknown::Release para liberá-lo. Subscribe retorna um número de conexão diferente de zero que você deve retornar ao cliente. O número de conexão representa o link entre a fonte de aviso e o coletor de aviso. Ele permanece válido até que o cliente faça uma chamada bem-sucedida para o Unadvise.
Quando o cliente está pronto para cancelar um registro, ele chama o método Unadvise . Passe o número de conexão da chamada Unadvise para IMAPISupport::Unsubscribe. Cancelar assinatura chama o método IUnknown::Release do coletor de aconselhamento. Assim como no caso de Aconselhar e Cancelar Aconselhamento, as chamadas para Assinar e Cancelar Assinatura devem ser emparelhadas. Você deve fazer uma chamada para Cancelar assinatura para cada chamada feita para se inscrever. No entanto, você não precisa chamar Subscribe sempre que o método Advise for chamado. Por outro lado, você pode chamá-lo para configurar notificações internas.
Quando um evento ocorrer, aloque uma ou mais estruturas NOTIFICATION do tipo apropriado para o evento e chame IMAPISupport::Notify. Notificar gera uma notificação para cada coletor de aviso registrado. Você deve definir todos os membros não utilizados da estrutura NOTIFICATION como zero. Essa técnica para inicializar a estrutura NOTIFICATION pode ajudar os clientes a criar implementações OnNotify menores, mais rápidas e menos propensas a erros.
Observe que uma estrutura NOTIFICATION separada é necessária para cada evento, mesmo para vários eventos do mesmo tipo. Por exemplo, se três clientes estiverem registrados para notificação de tabela em uma determinada tabela e cinco linhas forem adicionadas à tabela, você deverá criar cinco estruturas OBJECT_NOTIFICATION para sua chamada de notificação . Uma notificação em lote como essa resulta em um desempenho melhor do que chamar Notify cinco vezes. Para cada chamada de notificação , o MAPI chama o método IMAPIAdviseSink::OnNotify de cada coletor de aviso registrado. Se não houver coletores de aviso registrados, o MAPI ignorará a chamada.
Os provedores de serviços que enviam notificações em lote devem ordená-las para que possam ser interpretadas da primeira notificação à última. Essa ordenação é especialmente necessária quando um lote de notificação contém uma série de eventos, como TABLE_ROW_ADDED com um evento que se refere a uma linha anterior que foi adicionada em outro evento no mesmo lote.