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


Работа в качестве поставщика адресной книги узла

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

Поставщик узлов — это поставщик адресной книги, который включает получателей из других поставщиков в свои контейнеры и полагается на реализацию получателей другими поставщиками для частичного контроля их обслуживания. Поставщик узла использует идентификаторы шаблонов этих внешних получателей для привязки данных этих получателей к коду в внешнем поставщике. Этот процесс привязки инициируется, когда поставщик получает свойство PR_TEMPLATEID (PidTagTemplateid) получателя и передает его в вызове IMAPISupport::OpenTemplateID.

Когда поставщик вызывает IMAPISupport::OpenTemplateID, MAPI сопоставляет MAPIUID в идентификаторе шаблона с MAPIUID , зарегистрированным поставщиком, и вызывает метод IABLogon::OpenTemplateID поставщика. Внешний поставщик может вернуть указатель на объект свойства поставщика, на собственную реализацию объекта свойства или на реализацию, которая заключает объект поставщика в оболочку. Возвращаемый указатель помещается в содержимое параметра lppMAPIPropNew .

Поставщик может выбрать, следует ли вызывать IMAPISupport::OpenTemplateID с установленным флагом FILL_ENTRY. Установите этот флаг при создании получателя или в течение длительного времени с момента обновления свойств получателя поставщиком. Флаг FILL_ENTRY часто используется для синхронизации получателя в поставщике с исходным. Реализация этого типа расписания синхронизации повышает производительность.

Синхронизация внешнего получателя

  1. Определите подходящий интервал для периодических обновлений.

  2. Метка времени для каждого вызова IMAPISupport::OpenTemplateID.

  3. Оцените необходимость выполнения полного обновления на основе времени, истекшем с момента последнего вызова. Если необходимо полное обновление, вызовите IMAPISupport::OpenTemplateID с флагом FILL_ENTRY. Если это не нужно, не устанавливайте флаг для вызова.

Когда клиент запрашивает одно из свойств скопированного получателя, поставщик может выбрать, следует ли обрабатывать запрос сам или использовать код, предоставленный иностранным поставщиком. Ваш поставщик может ожидать, что внешний поставщик перехватит большинство, если не все, вызовы IMAPIProp , кроме IMAPIProp::OpenProperty. Вызов OpenProperty , запрашивающий свойство PR_DETAILS_TABLE (PidTagDetailsTable), всегда перенаправляется поставщику.

Доступ к коду идентификатора шаблона

  1. Откройте получателя и вызовите его метод IMAPIProp::GetProps , чтобы получить свойство PR_TEMPLATEID (PidTagTemplateid). Если сбой GetProps из-за недоступности PR_TEMPLATEID , внешний поставщик не поддерживает идентификатор шаблона и связанный код для этого получателя. Поставщику потребуется использовать свою реализацию получателя для всего обслуживания.

  2. Если идентификатор шаблона возвращается из GetProps, передайте его и указатель на реализацию IMAPIProp получателя в вызове метода IMAPISupport::OpenTemplateID . Установите флаг FILL_ENTRY, если необходимо обновить большинство или все свойства получателя, например во время создания или если они не обновлялись в течение некоторого времени.

  3. Если OpenTemplateID возвращает реализацию IMAPIProp внешнего поставщика, верните клиенту указатель на эту реализацию.

  4. Если OpenTemplateID не возвращает реализацию, как правило, из-за того, что внешний поставщик не находится в профиле, верните клиенту указатель на реализацию IMAPIProp поставщика. Клиент должен иметь возможность работать со свойствами объекта с помощью любого интерфейса.