实现高级搜索

适用于:Outlook 2013 | Outlook 2016

某些通讯簿容器支持高级搜索功能,允许客户端搜索 除 PR_DISPLAY_NAME (PidTagDisplayName) 以外的属性。 若要支持高级搜索,提供程序必须实现可通过其他容器 的 PR_SEARCH (PidTagSearch) 属性访问的特殊容器。 PR_SEARCH 包含一个容器对象,该对象提供对显示表的访问权限,该表描述用于输入和编辑高级搜索条件的对话框。

支持高级搜索

  1. 为每个搜索条件定义一个属性。

  2. 在容器的 IMAPIProp::OpenProperty 方法(用于处理 PR_SEARCH 属性) 的代码部分中:

  3. 检查客户端是否正在请求 IMAPIContainer 接口。 如果请求了不适当的接口,则失败并返回MAPI_E_INTERFACE_NOT_SUPPORTED。

  4. 创建支持 IMAPIContainer 接口的新搜索对象。

  5. 此时,将对搜索容器的 IMAPIProp::OpenProperty 方法进行调用,以检索其 PR_DETAILS_TABLE (PidTagDetailsTable) 属性。 提供程序必须提供一个显示表,通常是通过调用 BuildDisplayTable 来描述容器的高级搜索对话框。

  6. MAPI 显示搜索对话框,允许用户输入相应的条件。 用户完成后,MAPI 会调用容器的 IMAPIProp::SetProps 方法来存储搜索条件。

  7. 将调用 以请求搜索容器的内容表。 使用容器中与条件匹配的所有条目填充内容表。