Поделиться через


Доступ к объектам с помощью сеанса

Область применения: Outlook 2013 | Outlook 2016

Указатель сеанса, полученный от вызова MAPILogonEx , можно использовать для доступа к широкому спектру объектов. В следующей таблице перечислены методы, используемые для доступа к различным объектам:

Object Метод Session
Раздел профиля
IMAPISession::OpenProfileSection
Хранилище сообщений
IMAPISession::OpenMsgStore
Адресная книга
IMAPISession::OpenAddressBook
Объект администрирования службы сообщений
IMAPISession::AdminServices
Папка, сообщение, контейнер адресной книги, список рассылки или пользователь обмена сообщениями
IMAPISession::OpenEntry

С помощью метода OpenEntry и допустимого идентификатора записи можно открыть любой объект поставщика адресной книги или хранилища сообщений. В MAPI есть и другие методы OpenEntry , в дополнение к методу IMAPISession . OpenEntry реализуется в следующих объектах:

Object Метод
Объект входа поставщика адресной книги
IABLogon::OpenEntry
Адресная книга
IAddrBook::OpenEntry
Контейнер адресной книги
IMAPIContainer::OpenEntry
Сеанс
IMAPISession::OpenEntry
Хранилище сообщений
IMsgStore::OpenEntry
Объект входа поставщика хранилища сообщений
IMSLogon::OpenEntry
Folder
IMAPIContainer::OpenEntry
Объект поддержки
IMAPISupport::OpenEntry

Некоторые методы OpenEntry требуют открытия идентификатора записи объекта, а также IMAPISession::OpenEntry; другие методы позволяют указывать значение NULL. Идентификатор записи NULL интерпретируется по-разному в зависимости от объекта . Например, при вызове IAddrBook::OpenEntry с идентификатором записи NULL MAPI открывает корневой контейнер адресной книги. Метод OpenEntry хранилища сообщений ведет себя аналогично; откроется корневая папка хранилища сообщений. IMAPIContainer::OpenEntry, реализованный как папками, так и контейнерами адресной книги, может возвращать MAPI_E_INVALID_PARAMETER или корневой контейнер в зависимости от реализации.

Помимо запрета значения NULL для идентификатора записи, метод OpenEntry сеанса отличается от других методов OpenEntry , так как его задача не заключается в открытии объектов. Вместо этого он проверяет идентификатор записи и перенаправит вызов в другой метод OpenEntry , реализованный соответствующим поставщиком услуг. Например, при вызове IMAPISession::OpenEntry с идентификатором записи сообщения MAPI вызывает метод IMSLogon::OpenEntry хранилища сообщений, ответственного за сообщение.

Помимо использования сеанса для открытия объектов, клиенты используют его для их сравнения. Метод IMAPISession::CompareEntryIDs сравнивает объекты путем сравнения их идентификаторов записей. Если структуры MAPIUID , содержащиеся в идентификаторах записей, принадлежат одному и тому же поставщику услуг, MAPI перенаправит вызов к тому же поставщику. CompareEntryIDs возвращает значение ошибки, если два идентификатора записи не совпадают. Хотя этот метод позволяет сравнивать идентификаторы записей, принадлежащие любому типу объекта, compareEntryIDs лучше всего подходит для объектов более высокого уровня, таких как хранилища сообщений и контейнеры адресных книг. Чтобы сравнить объекты более низкого уровня, напрямую сравните ключи поиска объектов (PR_SEARCH_KEY (PidTagSearchKey)) или ключи записи (PR_RECORD_KEY (PidTagRecordKey)).

Как и OpenEntry, CompareEntryIDs реализуется несколькими объектами. Выберите, какой метод OpenEntry и CompareEntryID следует использовать в соответствии с объемом сведений о открываемых или сравниваемых объектах. При выборе метода интерфейса для вызова используйте следующие рекомендации.

  • Если у вас нет сведений о целевых объектах, вызовите IMAPISession::OpenEntry или IMAPISession::CompareEntryIDs. Такой подход обеспечивает доступ к любому объекту, но является самым медленным из трех.

  • Если вы знаете, что целевые объекты являются записями адресной книги, а не, например, папками, вызовите метод IAddrBook::OpenEntry или IAddrBook::CompareEntryIDs . IAddrBook::OpenEntry открывает корневой контейнер адресной книги, если в качестве целевого объекта задано значение NULL. Такой подход обеспечивает доступ к любому объекту адресной книги и выполняется быстрее, чем использование IMAPISession, но медленнее, чем использование IMAPIContainer.

  • Если используемый идентификатор записи является краткосрочным идентификатором записи или вы знаете, что целевые объекты принадлежат конкретному контейнеру или папке адресной книги, вызовите метод IMAPIContainer::OpenEntry . Такой подход обеспечивает самую высокую производительность, но обеспечивает доступ только к объектам в определенном контейнере или папке.