打开通讯簿条目

适用于:Outlook 2013 | Outlook 2016

当客户端或提供程序请求打开其中一个对象时,MAPI 会调用提供程序的 IABLogon::OpenEntry 方法。 MAPI 通过检查条目标识符的 MAPIUID 部分并将其匹配到提供程序在调用 IMAPISupport::SetProviderUID 中注册的 MAPIUID 来确定表示目标对象的条目标识符属于提供程序。 然后,MAPI 调用 OpenEntry 方法。 提供程序必须通过检索相应的对象(容器、通讯组列表或消息用户)来做出响应。

NULL 条目标识符指示打开通讯簿提供程序根容器的请求。 客户端打开根容器以访问其层次结构表及其收件人。 仅提供用于创建一次性收件人模板的通讯簿提供程序不支持根容器的 OpenEntry 调用。

实现 IABLogon::OpenEntry

  1. 检查条目标识符是否是提供程序支持的有效标识符。 如果它不是有效的条目标识符,则返回MAPI_E_INVALID_ENTRYID。

  2. 检查使用 ulFlags 参数传入的标志。 如果 MAPI 已传入MAPI_MODIFY并且提供程序不允许修改其对象,则失败并返回MAPI_E_ACCESS_DENIED错误值。

  3. 检查 lpInterface 参数中请求的接口是否对提供程序被要求打开的对象类型有效。 如果传入了无效参数,则失败并返回MAPI_E_INTERFACE_NOT_SUPPORTED错误值。

  4. 如果 cbEntryID 参数为零,则这是打开提供程序根容器的请求。 创建根容器并返回指向其 IABContainer 接口实现的指针。

  5. 如果提供程序实现多个登录对象,每个登录对象都有自己的已注册 MAPIUID,则将条目标识符中包含的 MAPIUID 与相应的登录对象映射。

  6. 确定条目标识符所表示的对象类型:属于提供程序的消息用户、通讯组列表或容器,或者一次性消息用户或通讯组列表,以便可以为 lpulObjectType 参数设置适当的值。

  7. 创建适当类型的 对象并设置以下基本属性:

  8. 根据条目标识符中 的信息计算PidTagEmailAddress (PR_EMAIL_ADDRESS) 和 PR_DISPLAY_NAME (PidTagDisplayName) 。

  9. 返回指向 对象的接口实现的指针。