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


IABLogon::OpenTemplateID

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

Открывает запись получателя с данными, размещенными в поставщике адресной книги узла.

HRESULT OpenTemplateID(
  ULONG cbTemplateID,
  LPENTRYID lpTemplateID,
  ULONG ulTemplateFlags,
  LPMAPIPROP lpMAPIPropData,
  LPCIID lpInterface,
  LPMAPIPROP FAR * lppMAPIPropNew,
  LPMAPIPROP lpMAPIPropSibling
);

Параметры

cbTemplateID

[в] Число байтов в идентификаторе шаблона, на который указывает параметр lpTemplateID .

lpTemplateID

[в] Указатель на идентификатор шаблона или свойство PR_TEMPLATEID (PidTagTemplateid) открываемой записи получателя.

ulTemplateFlags

[в] Битовая маска флагов, используемая для указания способа открытия записи, представленной идентификатором шаблона. Можно задать следующий флаг:

FILL_ENTRY

Поставщик узла создает новую запись в своем контейнере на основе записи, представленной идентификатором шаблона. Метод IABLogon::OpenTemplateID должен выполнять определенную инициализацию записи поставщика узла с помощью реализации IMAPIProp : IUnknown в параметре lpMAPIPropData или возвращать пользовательскую реализацию интерфейса IMAPIProp в параметре lppMAPIPropNew .

lpMAPIPropData

[в] Указатель на объект свойства поставщика узла и реализацию интерфейса, производного от IMAPIProp.

lpInterface

[в] Указатель на идентификатор интерфейса (IID), представляющий тип указателя интерфейса, возвращаемого в параметре lppMAPIPropNew . Передача значения NULL возвращает стандартный пользовательский интерфейс обмена сообщениями IMailUser : IMAPIProp.

lppMAPIPropNew

[out] Указатель на связанный объект свойства и реализацию интерфейса, производного от IMAPIProp.

lpMAPIPropSibling

[out] Защищены; значение должно иметь значение NULL.

Возвращаемое значение

S_OK

Соответствующий код успешно привязан к связанным данным в поставщике узла.

MAPI_E_NO_SUPPORT

Объект не поддерживает идентификаторы шаблонов.

MAPI_E_UNKNOWN_ENTRYID

Идентификатор шаблона, переданный в параметре lpTemplateID , не распознается поставщиком адресной книги.

Замечания

Метод IABLogon::OpenTemplateID реализуется только поставщиками адресных книг, которым необходимо контролировать копии своих записей, расположенные в контейнерах поставщиков узлов. Поставщики, реализующие OpenTemplateID , называются поставщиками внешних адресных книг. Поставщики узлов вызывают IMAPISupport::OpenTemplateID , чтобы создать скопированную запись или открыть скопированную запись, а MAPI передает вызов IABLogon::OpenTemplateID. IABLogon::OpenTemplateID открывает запись и привязывает код, который управляет ею, к данным в поставщике узла.

Вместо идентификатора записи IABLogon::OpenTemplateID использует другое свойство, идентификатор шаблона записи , PR_TEMPLATEID. Идентификаторы шаблонов должны поддерживаться для записей, код которых должен быть привязан к данным в поставщике узла.

Ниже приведены некоторые примеры того, когда поставщик адресной книги должен реализовать IABLogon::OpenTemplateID :

  • Периодическое обновление данных для скопированной записи, чтобы она оставалась синхронизированной с исходной.

  • Для реализации функциональных возможностей, которые поставщик узла не может реализовать, например динамическое заполнение списка, который отображается в таблице сведений записи из данных на сервере.

  • Для управления взаимодействием между свойствами в записи поставщика узла и исходной записью, например вычислением PR_EMAIL_ADDRESS (PidTagEmailAddress) из значений элементов управления изменения в отображении сведений, содержащих различные компоненты адреса.

Примечания для исполнителей

Когда поставщик узла копирует или создает запись из поставщика и вы предоставляете реализацию объекта свойства через IABLogon::OpenTemplateID, вы обрабатываете большинство вызовов для поддержания записи. Тем не менее, так как поставщик узла может перенаправить эти вызовы к вам, поставщик узла может перехватить любой вызов и выполнить пользовательскую обработку перед перенаправлением вызова.

В реализации объектов свойств следует использовать следующие рекомендации:

  • При вызове IMAPIProp::GetProps определите, является ли запрос для вычисляемого свойства, и, если оно имеет значение, обработайте его. Перенесите все запросы на некомпьютерные свойства поставщику узла.

  • При вызове IMAPIProp::OpenProperty для открытия любой таблицы, кроме таблицы отображения сведений, обработайте запрос. Большинство таблиц не могут быть точно скопированы в поставщик узла. Необходимо создать реализацию IMAPITable для этих запрошенных таблиц. Свойство PR_DETAILS_TABLE таблицы сведений (PidTagDetailsTable) необходимо скопировать в поставщик узла. Это позволяет этому поставщику создавать таблицу локально. Может потребоваться завернуть реализацию таблицы отображения для создания уведомлений о таблице отображения.

  • При вызове IMAPIProp::SetProps поставщик узла может проверить данные, прежде чем задавать свойства. Вы можете убедиться, что все необходимые свойства были заданы или вычислены. Если обнаружена ошибка, верните соответствующее значение ошибки и, если возможно, любое дополнительное объяснение с помощью IMAPIProp::GetLastError.

  • При вызове IMAPIProp::SaveChanges поставщику узла может потребоваться выполнить обработку перед сохранением записи. Все данные, на которые влияют измененные свойства, например новый адрес, следует сохранить в записи поставщика узла.

Как правило, сделайте так, чтобы реализация записи, передаваемой поставщику узла, перехватывалась все методы для выполнения контекстного управления соответствующими свойствами. Если флаг FILL_ENTRY передается в параметре ulTemplateFlags , задайте все свойства для записи.

Если вы возвращаете новый объект свойства в параметре lppMAPIPropNew , вызовите метод IUnknown::AddRef объекта свойства поставщика узла, чтобы сохранить ссылку. Все вызовы через привязанный объект, возвращенный реализацией IMAPIProp в lppMAPIPropNew , должны быть перенаправлены в соответствующий метод в объекте свойства узла после того, как они будут обработаны привязанным объектом.

Идентификаторы свойств всех именованных свойств, передаваемых через связанный объект свойства, находятся в пространстве имен идентификаторов поставщика. Реализация метода IMAPIProp::GetNamesFromIDs должна определять имена свойств, чтобы он смог выполнять любые задачи, относящиеся к шаблону. Аналогичным образом, свойства, которые поставщик передает поставщику узла, также должны находиться в вашем пространстве имен. Например, если задать именованное свойство в OpenTemplateID, следует использовать один из идентификаторов для имени, при необходимости создав его путем вызова метода IMAPIProp::GetIDsFromNames .

Если идентификатор записи, переданный в lpTemplateID, не распознается, верните MAPI_E_UNKNOWN_ENTRYID.

Дополнительные сведения о том, как работать с идентификаторами шаблонов адресной книги, см. в статье Использование в качестве поставщика иностранных адресных книг.

См. также

IMAPISupport::OpenTemplateID

IPropData : IMAPIProp

Каноническое свойство PidTagTemplateid

IABLogon : IUnknown