Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Outlook 2013 | Outlook 2016
Чтобы зарегистрироваться для уведомлений хранилища сообщений, вызовите метод IMAPISession::Advise или IMsgStore::Advise и укажите в содержимом параметра lpEntryID идентификатор хранилища сообщений, папки или записи сообщений. Поставщики хранилища сообщений поддерживают уведомления об объектах и таблицах. Регистрация с определенными объектами хранилища сообщений, иерархией папок и таблицами содержимого, описывающими эти объекты, или с объектами и таблицами зависит от ожидаемых уведомлений, вызовов, выполняемых для выполнения операций, а также от того, как поставщик хранилища сообщений поддерживает уведомления.
Так как MAPI обеспечивает гибкость в том, как поставщики поддерживают уведомления, имейте в виду, что вы не всегда будете получать уведомления одного типа в ответ на определенное событие от всех поставщиков хранилища сообщений. Некоторые поставщики хранилища сообщений вообще не поддерживают уведомления. Чтобы определить, поддерживает ли используемое хранилище сообщений уведомление, найдите бит STORE_NOTIFY_OK в свойстве PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask).
На одном конце спектра поставщиков хранилища сообщений, поддерживающих уведомления, находятся поставщики, которые создают "расширенные" уведомления; эти поставщики отправляют описательные уведомления для всех зарегистрированных источников рекомендаций. На другом конце находятся поставщики хранилища сообщений, которые поддерживают ограниченные уведомления; эти поставщики отправляют общие уведомления для ограниченного числа источников рекомендаций.
Например, если вы копируете сообщение в папку, в которой зарегистрированы уведомления о копировании объекта и перемещении объекта, вы можете получить или не получить уведомление о копировании объекта. Получение или отсутствие зависит от:
Метод, который вы вызвали для выполнения копирования. Это может быть IMAPIFolder::CopyMessages, IMAPIProp::CopyTo или IMAPIProp::CopyProps.
Как поставщик хранилища сообщений реализует метод копирования.
Указывает, поддерживает ли поставщик хранилища сообщений уведомления о копировании объектов в папках.
Так как нет строгих рекомендаций, описывающих, как реализовать уведомления о событиях для поставщиков хранилища сообщений, клиенты не могут ожидать согласованного поведения. MAPI дает рекомендации о том, как поставщики хранилища сообщений реализуют уведомления о событиях, и в следующей таблице описаны эти рекомендации. Прочтите таблицу следующим образом: после выполнения операции в первом столбце ожидается получение уведомления о типе, указанном во втором столбце, если вы зарегистрировались для этого типа с объектом, указанным в третьем столбце. Например, после создания папки вы получите уведомление fnevObjectCreated только в том случае, если вы зарегистрировались для уведомлений fnevObjectCreated в хранилище сообщений.
| Операция | Тип события | Источник рекомендаций |
|---|---|---|
| Создание папки |
fnevObjectCreated |
Хранилище сообщений |
| Удаление папки |
fnevObjectDeleted |
Удаленная папка хранилища сообщений |
| Перемещение папки из одной папки в другую |
fnevObjectMoved |
Папка хранилища сообщений перемещена |
| Копирование папки из одной папки в другую |
fnevObjectCopied |
Хранилище сообщений и скопированная папка (уведомление fnevObjectCreated для новой копии папки не отправлено) |
| Изменение свойства вычисляемой папки (PR_SUBFOLDERS (PidTagSubfolders), PR_CONTENT_UNREAD (PidTagContentUnreadCount), PR_CONTENT_COUNT (PidTagContentCount) |
fnevObjectModified |
Измененная папка хранилища сообщений (нет уведомления в родительскую папку) |
| Создание сообщения. |
fnevObjectCreated |
Хранилище сообщений |
| Удаление сообщения, вызывающее изменение свойства PR_CONTENT_COUNT родительской папки |
fnevObjectDeleted |
Хранилище сообщений Удалено сообщение |
| Перемещение сообщения из одной папки в другую |
fnevObjectMoved |
Хранилище сообщений Перемещено сообщение |
| Копирование сообщения из одной папки в другую |
fnevObjectCopied |
Скопированное сообщение хранилища сообщений (уведомление no fnevObjectCreated для новой копии сообщения) |
| Сохранение сообщения, вызывающее изменение свойства PR_CONTENT_COUNT родительской папки |
fnevObjectCreated |
Хранилище сообщений только при первом сохранении |
| Сохранение сообщения |
fnevObjectModified |
Хранилище сообщений при сохранении сохраняется после первого сохранения измененного сообщения (нет уведомления в родительскую папку) |
| Завершение операции поиска |
fnevSearchComplete |
Папка поиска в хранилище сообщений |
| Новое сообщение |
fnevNewMail |
Хранилище сообщений |
Примечание.
При получении уведомления об изменении объекта помните, что часть массива тегов свойств OBJECT_NOTIFICATION структуры, на которую указывает параметр lpNotifications в вызове OnNotify , может иметь значение NULL. Поставщики хранилища сообщений не обязаны вставлять сведения о свойствах в этот массив, а большинство — нет. Убедитесь, что метод OnNotify может обрабатывать случай, когда указатель lpPropTagArray имеет значение NULL.
В большинстве случаев, если не все уведомления об объектах, обновите представление затронутых папок или папок.