实现名称解析
适用于:Outlook 2013 | Outlook 2016
通讯簿提供商负责支持名称解析- 将条目标识符与显示名称相关联的过程。 客户端在调用 IAddrBook::ResolveName 时启动名称解析,以确保传出邮件收件人列表的每个成员对应于有效的地址。
提供程序可以通过以下方式支持名称解析:
支持 PR_ANR (PidTagAnr) 属性限制,这是所有通讯簿容器的要求。
实现 IABContainer::ResolveNames 方法,这是所有通讯簿容器的选项。
如果选择支持 IABContainer::ResolveNames,请尝试使用 lpAdrList 参数传入的 ADRLIST 结构中查找每个未解析的显示名称的完全匹配项。 可以标识未解析的显示名称,因为它缺少 ADRLIST 结构的 aEntries 成员属性值数组中的 PR_ENTRYID (PidTagEntryId) 属性。 忽略具有零个关联的属性的任何条目。
在 lpFlagList 参数中报告尝试解析的结果,该参数是对应于 lpAdrList 中显示名称数组的标志数组。 标志是位置标志,以便第一个标志对应于 ADRLIST 结构中的第一个 aEntries 成员,第二个标志对应于第二个 aEntries 成员,依此类说。
每个未解析的条目都有三种可能的结果:
找不到匹配项,这意味着容器条目中没有任何条目与 ADRLIST 结构中的条目匹配。 将 lpFlagList 参数中的相应条目设置为MAPI_UNRESOLVED。
可以找到多个匹配项,这意味着有多个容器条目与 ADRLIST 结构中的条目匹配。 将 lpFlagList 参数中的相应条目设置为MAPI_AMBIGUOUS。 请勿更改 ADRLIST 结构中的条目数。
可以找到完全匹配项,这意味着只有一个容器条目与 ADRLIST 结构中的条目匹配。 将 lpFlagList 参数中的相应成员设置为MAPI_RESOLVED并将条目标识符添加到与 ADRLIST 条目关联的属性数组。
如果选择不支持 IABContainer::ResolveNames,请从实现中返回MAPI_E_NO_SUPPORT。
所有通讯簿提供程序都需要对其容器的内容表支持不明确的名称解析( PR_ANR 属性限制)。 若要提供此支持,请在 IMAPITable::Restrict 的实现中处理PR_ANR限制,方法是执行“最佳猜测”类型的搜索,与一个或多个对提供程序有意义的特定属性进行匹配。 可以选择每次使用相同的属性,例如 PR_DISPLAY_NAME (PidTagDisplayName) 或 PR_ACCOUNT (PidTagAccount) ,或者允许管理员从可接受的属性列表中选择。
尽管大多数提供程序提供其自己的内容表实现,但您可以通过 CreateTable 函数自定义 MAPI 提供的实现。 但是,由于 MAPI 实现不支持任何类型的限制,因此必须创建包装器对象,以包含用于拦截调用的 Restrict 的自定义版本。