IMAPIAdviseSink::OnNotify
Hace referencia a: Outlook 2013 | Outlook 2016
Responde a una notificación realizando una o varias tareas. Las tareas realizadas dependen del tipo de evento y del objeto que genera la notificación.
ULONG OnNotify(
ULONG cNotif,
LPNOTIFICATION lpNotifications
);
Parameters
cNotif
[in] Recuento de estructuras NOTIFICATION a las que apunta el parámetro lpNotifications .
lpNotifications
[in] Puntero a una o varias estructuras NOTIFICATION que proporcionan información sobre los eventos que se han producido.
Valor devuelto
S_OK
La notificación se procesó correctamente.
Comentarios
El proceso de notificación se inicia cuando un cliente o MAPI realiza una llamada al método Advise de un proveedor de servicios para registrarse para recibir una notificación de un tipo determinado para un objeto determinado. Uno de los parámetros del método Advise es un puntero a un objeto receptor advise que implementa la interfaz IMAPIAdviseSink . Cuando se produce un evento en el objeto de destino que corresponde a la notificación registrada, el proveedor de servicios, ya sea directa o indirectamente a través de MAPI, llama al método OnNotify del receptor de aviso.
La llamada a OnNotify puede producirse durante la llamada MAPI que está causando el evento o en algún momento posterior. En sistemas que admiten varios subprocesos de ejecución, se puede llamar a OnNotify en el mismo subproceso que se usó para el registro o en otro subproceso. Los clientes pueden asegurarse de que la llamada a OnNotify se realiza en el mismo subproceso usado para llamar a Advise mediante la creación del receptor de aviso que pasan a Advise con la función HrThisThreadAdviseSink .
El parámetro lpNotifications apunta a una o varias estructuras NOTIFICATION que describen lo que ha cambiado durante el evento. Hay un tipo diferente de estructura NOTIFICATION para cada tipo de evento.
En la tabla siguiente se enumeran los valores que se usan para representar los posibles tipos de eventos y las estructuras asociadas a cada valor:
Tipo de evento de notificación | Estructura correspondiente |
---|---|
fnevCriticalError |
ERROR_NOTIFICATION |
fnevNewMail |
NEWMAIL_NOTIFICATION |
fnevObjectCreated |
OBJECT_NOTIFICATION |
fnevObjectDeleted |
OBJECT_NOTIFICATION |
fnevObjectModified |
OBJECT_NOTIFICATION |
fnevObjectCopied |
OBJECT_NOTIFICATION |
fnevSearchComplete |
OBJECT_NOTIFICATION |
fnevTableModified |
TABLE_NOTIFICATION |
fnevStatusObjectModified |
STATUS_OBJECT_NOTIFICATION |
fnevExtended |
EXTENDED_NOTIFICATION |
Para obtener más información sobre cómo configurar y detener notificaciones, vea las entradas de referencia de los métodos Advise y Unadvise para cualquiera de las siguientes interfaces: IABLogon, IAddrBook, IMAPIForm, IMAPISession, IMAPITable, IMsgStore e IMSLogon.
Para obtener información general sobre el proceso de notificación, vea Notificación de eventos en MAPI.
Notas a los implementadores
La implementación de OnNotify normalmente constará de uno o más bloques de código para cada tipo de notificación que espera recibir. Dentro de estos bloques de código, realice las tareas que considere necesarias como respuesta a la notificación. Por ejemplo, supongamos que se registra para recibir notificaciones fnevObjectModified en una carpeta que se incluye en una pantalla de cuadro de diálogo. En el bloque de código que se incluye en el método OnNotify para controlar las notificaciones fnevObjectModified , es posible que envíe un mensaje de Windows al cuadro de diálogo para solicitar una presentación actualizada.
No modifique ni libere la estructura NOTIFICATION que se pasa a OnNotify. Los datos de la estructura solo son válidos hasta que OnNotify devuelve.
Notas para los llamadores
Cuando se producen cambios en varios objetos, puede notificar a un receptor de aviso registrado en una sola llamada a OnNotify o en varias llamadas en función de las restricciones de memoria. Esto es cierto independientemente de si los cambios son el resultado de una llamada al método o de varios. Por ejemplo, una llamada a IMAPIFolder::CopyMessages puede afectar a varios mensajes y carpetas. Como proveedor de almacén de mensajes, puede realizar una llamada a OnNotify con un tipo de evento fnevObjectModified para la carpeta de destino o muchas llamadas, una para cada mensaje afectado. De forma similar, si un cliente realiza llamadas repetidas a IMAPIFolder::CreateMessage, estas llamadas se pueden combinar en un evento fnevObjectModified para la carpeta o separarse en eventos fnevObjectCreated individuales para cada mensaje nuevo.
Para obtener más información sobre cómo y cuándo generar notificaciones, vea Notificación de eventos en MAPI y Compatibilidad con la notificación de eventos.
Referencia de MFCMAPI
Para obtener un ejemplo de código de MFCMAPI, vea la siguiente tabla.
Archivo | Función | Comment |
---|---|---|
AdviseSink.h y AdviseSink.cpp |
CAdviseSink::OnNotifyDesc |
La clase CAdviseSink se implementa para controlar todas las notificaciones de MFCMAPI. |