Доступ к объектам с помощью сеанса
Область применения: 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 . Такой подход обеспечивает самую высокую производительность, но обеспечивает доступ только к объектам в определенном контейнере или папке.