IMAPIAdviseSink::OnNotify
Область применения: Outlook 2013 | Outlook 2016
Отвечает на уведомление, выполняя одну или несколько задач. Выполняемые задачи зависят от типа события и объекта, который создает уведомление.
ULONG OnNotify(
ULONG cNotif,
LPNOTIFICATION lpNotifications
);
Параметры
cNotif
[в] Количество структур NOTIFICATION , на которые указывает параметр lpNotifications .
lpNotifications
[в] Указатель на одну или несколько структур NOTIFICATION , которые предоставляют сведения о произошедших событиях.
Возвращаемое значение
S_OK
Уведомление успешно обработано.
Замечания
Процесс уведомления начинается, когда клиент или MAPI выполняет вызов метода консультирование поставщика услуг для регистрации для получения уведомления определенного типа для определенного объекта. Одним из параметров метода Advise является указатель на объект приемника рекомендаций, который реализует интерфейс IMAPIAdviseSink . При возникновении события для целевого объекта, соответствующего зарегистрированным уведомлениям, поставщик услуг напрямую или косвенно через MAPI вызывает метод OnNotify приемника рекомендаций .
Вызов OnNotify может происходить во время вызова MAPI, вызывающего событие, или в некоторое время позже. В системах, поддерживающих несколько потоков выполнения, OnNotify можно вызывать либо в одном потоке, который использовался для регистрации, либо в другом потоке. Клиенты могут убедиться, что вызов OnNotify выполняется в том же потоке, который используется для вызова рекомендаций, создав приемник рекомендаций, который они передают в Совет с помощью функции HrThisThreadAdviseSink .
Параметр lpNotifications указывает на одну или несколько структур NOTIFICATION , описывающих изменения во время события. Для каждого типа события существует разный тип структуры NOTIFICATION .
В следующей таблице перечислены значения, которые используются для представления возможных типов событий и структур, связанных с каждым значением:
Тип события уведомления | Соответствующая структура |
---|---|
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 |
Дополнительные сведения о настройке и остановке уведомлений см. в справочных записях по методам Advise и Unadvise для любого из следующих интерфейсов: IABLogon, IAddrBook, IMAPIForm, IMAPISession, IMAPITable, IMsgStore и IMSLogon.
Общие сведения о процессе уведомления см. в разделе Уведомление о событиях в MAPI.
Примечания для исполнителей
Реализация OnNotify обычно состоит из одного или нескольких блоков кода для каждого типа уведомления, который вы ожидаете получать. В этих блоках кода выполняйте все задачи, которые считаются необходимыми в качестве ответа на уведомление. Например, предположим, что вы регистрируетесь для получения уведомлений fnevObjectModified в папке, которая включена в диалоговое окно. В блоке кода, который вы включаете в метод OnNotify для обработки уведомлений fnevObjectModified , вы можете отправить сообщение Windows в диалоговое окно для запроса обновленного отображения.
Не изменяйте и не освобождайте структуру NOTIFICATION , переданную OnNotify. Данные в структуре допустимы только до тех пор , пока OnNotify не вернет .
Примечания для вызывающих методов
При изменении нескольких объектов можно уведомить зарегистрированный приемник рекомендаций в одном вызове OnNotify или в нескольких вызовах в зависимости от ограничений памяти. Это верно независимо от того, являются ли изменения результатом одного или нескольких вызовов метода. Например, вызов IMAPIFolder::CopyMessages может повлиять на несколько сообщений и папок. Поставщик хранилища сообщений может выполнить один вызов OnNotify с типом события fnevObjectModified для целевой папки или нескольких вызовов, по одному для каждого сообщения о влиянии. Аналогичным образом, если клиент выполняет повторные вызовы IMAPIFolder::CreateMessage, эти вызовы можно объединить в одно событие fnevObjectModified для папки или разделить на отдельные события fnevObjectCreated для каждого нового сообщения.
Дополнительные сведения о том, как и когда создавать уведомления, см. в разделах Уведомление о событиях в MAPI и Вспомогательное уведомление о событиях.
Справочные материалы по MFCMAPI
Пример кода MFCMAPI указан в приведенной ниже таблице.
Файл | Функция | Comment |
---|---|---|
AdviseSink.h и AdviseSink.cpp |
CAdviseSink::OnNotifyDesc |
Класс CAdviseSink реализован для обработки всех уведомлений в MFCMAPI. |