IMAPISession::OpenEntry
Область применения: Outlook 2013 | Outlook 2016
Открывает объект и возвращает указатель интерфейса для дополнительного доступа.
HRESULT OpenEntry(
ULONG cbEntryID,
LPENTRYID lpEntryID,
LPCIID lpInterface,
ULONG ulFlags,
ULONG FAR * lpulObjType,
LPUNKNOWN FAR * lppUnk
);
Параметры
cbEntryID
[в] Число байтов в идентификаторе записи, на который указывает параметр lpEntryID .
lpEntryID
[в] Указатель на идентификатор записи открываемого объекта.
lpInterface
[в] Указатель на идентификатор интерфейса (IID), представляющий интерфейс, используемый для доступа к открытому объекту. Передача NULL возвращает стандартный интерфейс объекта. Например, если открываемый объект является сообщением, стандартным интерфейсом является IMessage; для папок это IMAPIFolder. Стандартными интерфейсами для объектов адресной книги являются IDistList для списка рассылки и IMailUser для пользователя обмена сообщениями.
ulFlags
[в] Битовая маска флагов, управляющая способом открытия объекта. Можно использовать следующие флаги:
MAPI_BEST_ACCESS
Запрашивает открытие объекта с использованием максимального сетевого разрешения, разрешенного для пользователя, и максимального доступа к клиентскому приложению. Например, если клиент имеет разрешение на чтение и запись, объект должен быть открыт с разрешением на чтение и запись; Если клиент имеет разрешение только для чтения, объект должен быть открыт с разрешением только для чтения.
MAPI_CACHE_OK
Используйте все средства, включая автономные адресные книги, для разрешения имен.
MAPI_CACHE_ONLY
Используйте только автономную адресную книгу для разрешения имен. Например, этот флаг можно использовать, чтобы разрешить клиентскому приложению открывать глобальный список адресов (GAL) в режиме кэшированного обмена и получать доступ к записи в этой адресной книге из кэша без создания трафика между клиентом и сервером. Этот флаг поддерживается только поставщиком адресной книги Exchange.
MAPI_DEFERRED_ERRORS
Позволяет OpenEntry успешно возвращать объект, возможно, до того, как объект будет полностью доступен вызывающему клиенту. Если объект недоступен, последующий вызов объекта может вызвать ошибку.
MAPI_MODIFY
Запрашивает разрешение на чтение и запись. По умолчанию объекты открываются с разрешением только для чтения, и клиенты не должны работать при условии предоставления разрешения на чтение и запись.
MAPI_NO_CACHE
Не используйте автономную адресную книгу для разрешения имен. Этот флаг поддерживается только поставщиком адресной книги Exchange.
SHOW_SOFT_DELETES
Отображение элементов, которые в настоящее время помечены как обратимо удаленные (то есть находятся на этапе хранения удаленного элемента).
lpulObjType
[out] Указатель на тип открытого объекта.
lppUnk
[out] Указатель на указатель на открытый объект.
Возвращаемое значение
S_OK
Объект был успешно открыт.
MAPI_E_NO_ACCESS
Предпринята попытка изменить объект, доступный только для чтения, или предпринята попытка доступа к объекту, для которого у пользователя недостаточно разрешений.
MAPI_E_NOT_FOUND
Нет объекта, связанного с идентификатором записи, переданным в параметре lpEntryID .
MAPI_E_UNKNOWN_ENTRYID
Идентификатор записи, переданный в параметре lpEntryID , имеет неузнаваемый формат. Обычно это значение возвращается, если поставщик услуг, содержащий объект, не открыт.
Замечания
Метод IMAPISession::OpenEntry открывает хранилище сообщений или объект адресной книги, возвращая указатель на интерфейс, который можно использовать для доступа к объекту .
Примечания для вызывающих методов
Важно!
При открытии записей папок в общедоступном хранилище, таких как папки и сообщения, используйте IMsgStore::OpenEntry вместо IMAPISession::OpenEntry. Это гарантирует правильную работу общедоступных папок при определении нескольких учетных записей Exchange в профиле.
Вызовите IMAPISession::OpenEntry, только если вы не знаете, какой тип открываемого объекта. Если вы знаете, что открываете папку или сообщение, вызовите IMsgStore::OpenEntry. Если вы знаете, что открываете контейнер адресной книги, пользователя сообщений или список рассылки, вызовите IAddrBook::OpenEntry. Эти более конкретные методы работают быстрее , чем IMAPISession::OpenEntry.
MAPI открывает все объекты с разрешением только для чтения, если вы не задали флаг MAPI_MODIFY или MAPI_BEST_ACCESS в параметре ulFlags . Установка одного из этих флагов не гарантирует определенный тип доступа; Предоставленные разрешения зависят от поставщика услуг, уровня доступа и объекта . Чтобы определить уровень доступа открытого объекта, получите его свойство PR_ACCESS_LEVEL (PidTagAccessLevel).
Вызов IMAPISession::OpenEntry и задание lpEntryID для указания идентификатора записи хранилища сообщений аналогично вызову метода IMAPISession::OpenMsgStore с MDB_NO_DIALOG флагом. Параметры флага также эквивалентны, за исключением того, что для запроса разрешения на чтение и запись с помощью OpenMsgStore необходимо задать флаг MDB_WRITE вместо MAPI_MODIFY.
Проверьте значение, возвращаемое в параметре lpulObjType , чтобы определить, является ли возвращаемый тип объекта ожидаемым. Если тип объекта не является ожидаемым, приведите указатель из параметра lppUnk к указателю соответствующего типа. Например, если вы открываете папку, приведите lppUnk к указателю типа LPMAPIFOLDER.
Справочные материалы по MFCMAPI
Пример кода MFCMAPI указан в приведенной ниже таблице.
Файл | Функция | Comment |
---|---|---|
MAPIFunctions.cpp |
CallOpenEntry |
MFCMAPI использует метод IMAPISession::OpenEntry для открытия объекта. |