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


Таблицы состояния

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

Таблица состояния содержит сведения о состоянии текущего сеанса. Существует одна таблица состояния для каждого сеанса MAPI, которая содержит сведения, предоставляемые MAPI и поставщиками услуг. MAPI предоставляет данные для трех строк: строки для подсистемы MAPI, строки для диспетчера очереди MAPI и строки для интегрированной адресной книги. Так как поставщики транспорта должны предоставлять сведения о состоянии в таблицу состояния, для каждого активного поставщика транспорта существует одна строка. Поставщики адресной книги и хранилища сообщений могут выбрать, следует ли поддерживать таблицу состояния.

Так как каждая строка предоставляется другим ресурсом, набор столбцов может отличаться от строки к строке. Существует набор столбцов, которые требуется предоставить каждому объекту состояния, и набор столбцов, которые предоставляет MAPI. Поставщик услуг может добавить в эти наборы, чтобы предоставить свойства, относящиеся к поставщику. Например, поставщики хранилища сообщений могут добавлять PR_STORE_RECORD_KEY (PidTagStoreRecordKey) для предоставления клиентам идентификатора хранилища сообщений. Клиенты должны заранее знать о существовании этой дополнительной информации, чтобы иметь возможность использовать ее.

В следующей таблице перечислены свойства, которые должны находиться в каждой строке таблицы состояния. Реализующий объект состояния предоставляет некоторые свойства; другие вычисляются с помощью MAPI.

Свойства, предоставляемые объектом состояния Свойства, предоставляемые MAPI
PR_DISPLAY_NAME (PidTagDisplayName)
PR_PROVIDER_DLL_NAME (PidTagProviderDllName)
PR_STATUS_CODE (PidTagStatusCode)
PR_RESOURCE_FLAGS (PidTagResourceFlags)
PR_RESOURCE_METHODS (PidTagResourceMethods)
PR_RESOURCE_TYPE (PidTagResourceType)

Если объект состояния предоставляет удостоверение, он должен задать PR_IDENTITY_DISPLAY (PidTagIdentityDisplay), PR_IDENTITY_ENTRYID (PidTagIdentityEntryId) и PR_IDENTITY_SEARCH_KEY (PidTagIdentitySearchKey) и включить эти свойства в таблицу.

MapI вычисляет четыре свойства для каждой строки таблицы состояния:

Property ...
PR_ENTRYID (PidTagEntryId)
PR_INSTANCE_KEY (PidTagInstanceKey)
PR_OBJECT_TYPE (PidTagObjectType)
PR_ROWID (PidTagRowid)

MAPI назначает идентификатор записи строке состояния, чтобы клиенты могли открывать соответствующий объект состояния. Идентификатор строки также назначается для идентификации строки в таблице, так как является ключом экземпляра для идентификации данных в объекте состояния. Свойство PR_OBJECT_TYPE имеет значение MAPI_STATUS.

Для доступа к таблице состояния клиенты вызывают метод IMAPISession::GetStatusTable . Этот вызов не следует выполнять сразу после запуска. Это связано с тем, что GetStatusTable должен ждать, пока диспетчер очереди MAPI инициализирует поставщиков транспорта, что откладывается до завершения входа клиента. GetStatusTable — это относительно быстрый вызов после завершения обработки очереди MAPI.

Сведения о таблице состояния можно использовать различными способами, например для доступа к объекту состояния, определения того, работает ли клиент в подключенном или автономном режиме, а также для мониторинга состояния поставщика. Например, клиенты могут открыть объект состояния определенного поставщика услуг, передав значение свойства PR_ENTRYID методу IMAPISession::OpenEntry . Объект status поддерживает интерфейс IMAPIStatus , который содержит методы изменения пароля поставщика услуг, очистки очереди сообщений, отображения страницы свойств конфигурации или подтверждения состояния напрямую у поставщика. Сведения о таблице состояния также можно использовать для создания диалогового окна для информирования клиентов о ходе длительной операции.

Поставщики услуг, поддерживающие таблицу состояния, используют метод IMAPISupport::ModifyStatusRow для создания и обновления строк. Каждый раз, когда происходит изменение в их строке, все объекты приемников, зарегистрированные для получения уведомлений таблицы состояния, должны быть уведомлены. Поставщики услуг могут вызвать метод IMAPISupport::Notify , если они используют программу уведомлений MAPI или вызвать метод IMAPIAdviseSink::OnNotify каждого приемника рекомендаций напрямую.

См. также

Таблицы MAPI