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


Реализация объекта состояния

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

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

Реализация объекта состояния

  1. Реализуйте метод OpenStatusEntry объекта входа. Когда клиенты хотят открыть объект состояния, они вызывают IMAPISession::OpenEntry. MAPI выполняет открытый запрос, вызывая метод OpenStatusEntry поставщика, в результате чего поставщик открывает свой объект состояния и возвращает клиенту указатель на его реализацию IMAPIStatus . В реализации OpenStatusEntry выполните следующие действия.

    1. Если объект входа еще не создал объект состояния, выполните следующие задачи:

      1. Вызовите метод IMAPISupport::OpenProfileSection объекта поддержки, чтобы получить доступ к разделу профиля поставщика.

      2. Создайте новый объект состояния.

      3. Сохраните ссылку на раздел профиля в объекте состояния поставщика и вызовите метод IUnknown::AddRef раздела профиля, чтобы увеличить его количество ссылок.

      4. Сохраните ссылку на объект входа в объект состояния поставщика и вызовите метод IUnknown::AddRef объекта входа, чтобы увеличить его количество ссылок.

      5. Сохраните ссылку на объект состояния в объекте входа поставщика.

    2. Вызовите метод IUnknown::AddRef объекта состояния, чтобы увеличить его количество ссылок в объекте входа.

    3. Задайте для свойства PR_OBJECT_TYPE объекта состояния (PidTagObjectType) значение MAPI_STATUS.

    4. Задайте выходной параметр lppMAPIStatus , чтобы он указывал на объект состояния и возвращал.

    5. Проверьте входной параметр ulFlags . Если для него задано значение MAPI_MODIFY и поставщик поддерживает доступ на чтение и запись к объекту состояния, верните объект, доступный для записи. Однако если поставщик не поддерживает доступ на чтение и запись к объекту состояния, не сбой. Возвращает объект состояния, доступный только для чтения. Клиенты, которые ожидают получать объекты состояния чтения и записи, должны убедиться, что разрешение на чтение и запись предоставлено, прежде чем пытаться внести какие-либо изменения.

  2. Задайте все необходимые свойства объекта состояния и таблицы состояний. Свойства, которые вы включаете в строку таблицы состояния, должны быть доступны через объект состояния, за исключением свойств, вычисляемых с помощью MAPI. Ниже перечислены обязательные свойства.

  3. Реализуйте методы IMAPIStatus: IMAPIProp , подходящие для вашего поставщика. В зависимости от поставщика вам не нужно реализовывать все четыре метода в IMAPIStatus. Каждый поставщик должен реализовать доступную только для чтения версию методов интерфейса IMAPIProp : IUnknown и метода IMAPIStatus::ValidateState .

    Поставщики транспорта также должны реализовать IMAPIStatus::FlushQueues, а все поставщики должны поддерживать IMAPIStatus::SettingsDialog. Однако поддержка IMAPIStatus::ChangePassword необязательна. Реализовать этот метод необходимо только поставщикам служб, которым требуются пароли и которые хотят разрешить пользователям изменять их программным способом. Для каждого поддерживаемого метода задайте соответствующий бит в свойстве PR_RESOURCE_METHODS . Например, если вы поддерживаете только ValidateState и SettingsDialog , задайте для PR_RESOURCE_METHODS следующее:

    STATUS_VALIDATE_STATE | STATUS_SETTINGS_DIALOG

    Клиенты должны проверка значение PR_RESOURCE_METHODS, прежде чем пытаться вызвать объект состояния. Обработайте вызовы любого из неподдерживаемых методов, возвращая MAPI_E_NO_SUPPORT.

  4. Вызовите IMAPISupport::ModifyStatusRow во время входа, чтобы добавить строку или строки в таблицу состояния. Передайте массив значений свойства, содержащий сведения о столбце для строки и 0 для параметра ulFlags . Если в какой-то момент позже в сеансе состояние поставщика изменится и потребуется обновить сведения о столбце, вызовите ModifyStatusRow еще раз с установленным флагом STATUSROW_UPDATE.

Дополнительные сведения об объектах состояния см. в разделе Объекты состояния MAPI.

См. также