充当主机通讯簿提供程序
适用于:Outlook 2013 | Outlook 2016
主机提供程序是一种通讯簿提供程序,它在其容器中包含来自其他提供程序的收件人,并依赖于其他提供程序实现收件人来部分控制其维护。 主机提供程序使用这些外部收件人的模板标识符将这些收件人的数据绑定到外部提供程序中的代码。 当提供程序检索 PR_TEMPLATEID (PidTagTemplateid) 收件人属性并在调用 IMAPISupport::OpenTemplateID 时,将启动此绑定过程。
当提供程序调用 IMAPISupport::OpenTemplateID 时,MAPI 会将模板标识符中的 MAPIUID 与提供程序注册的 MAPIUID 匹配,并调用提供程序的 IABLogon::OpenTemplateID 方法。 外部提供程序可能会返回指向提供程序的属性对象的指针、指向其自己的属性对象实现或包装提供程序对象的实现的指针。 返回的指针放置在 lppMAPIPropNew 参数的内容中。
提供程序可以选择是否使用设置FILL_ENTRY标志调用 IMAPISupport::OpenTemplateID 。 在创建收件人时,或者在提供商刷新收件人属性后经过很长时间时设置此标志。 FILL_ENTRY标志的常见用途是使提供商中的收件人与原始收件人保持同步。 实现这种类型的同步计划可增强性能。
使外部收件人保持同步
确定定期更新的适当间隔。
每次调用 IMAPISupport::OpenTemplateID 的时间戳。
根据自上次调用以来已过期的时间量评估是否需要执行完整更新。 如果需要完整更新,请使用 FILL_ENTRY 标志调用 IMAPISupport::OpenTemplateID 。 如果没有必要,请不要在调用上设置 标志。
当客户端对复制的收件人属性之一发出请求时,提供程序可以选择是处理请求本身还是使用外部提供程序提供的代码。 你的提供程序可以期望外部提供程序截获对 IMAPIProp 的大多数(如果不是全部)调用,但 IMAPIProp::OpenProperty 除外。 调用 OpenProperty 请求 PR_DETAILS_TABLE (PidTagDetailsTable) 属性始终转发到提供程序。
访问模板标识符代码
打开收件人并调用其 IMAPIProp::GetProps 方法以检索 PR_TEMPLATEID (PidTagTemplateid) 属性。 如果 GetProps 因 PR_TEMPLATEID 不可用而失败,则外部提供程序不支持此收件人的模板标识符和相关代码。 提供商需要使用其接收方实现进行所有维护。
如果模板标识符是从 GetProps 返回的,请在调用 IMAPISupport::OpenTemplateID 方法时传递它和指向收件人的 IMAPIProp 实现的指针。 如果需要更新收件人的大多数或所有属性(例如在创建时或一段时间未更新这些属性),请设置FILL_ENTRY标志。
如果 OpenTemplateID 返回外部提供程序的 IMAPIProp 实现,则向客户端返回指向此实现的指针。
如果 OpenTemplateID 不返回实现(通常是因为外部提供程序不在配置文件中),则向客户端返回指向提供程序 IMAPIProp 实现的指针。 客户端应能够使用任一接口处理对象的属性。