层次结构表
适用于:Outlook 2013 | Outlook 2016
层次结构表包含有关邮件存储中的文件夹或通讯簿容器中容器的信息。 层次结构表的每一行都包含一组列,其中包含有关一个文件夹或通讯簿容器的信息。 层次结构表主要由客户端使用,由消息存储提供程序实现,以显示文件夹和子文件夹树,由通讯簿提供程序实现以显示通讯簿中的容器树。 不能保存子容器的容器(如其 PR_CONTAINER_FLAGS (PidTagContainerFlags) 属性中缺少 AB_SUBCONTAINERS 标志所示)不会实现层次结构表。
可以通过调用以下方法访问层次结构表:
IMAPIContainer::GetHierarchyTable。
- 或-
IMAPIProp::OpenProperty 传递 PR_CONTAINER_HIERARCHY (PidTagContainerHierarchy) 作为属性标记,IID_IMAPITable作为接口标识符。
容器和文件夹必须支持这两种检索表属性的技术。 服务提供商只支持一种访问这些表的方式是不可接受的,因为客户端希望有选择。
重要
不保证存储提供程序遵循为层次结构表指定的排序顺序集。
对 IMAPIProp::OpenProperty 的调用涉及通过打开其相应的属性来访问层次结构表 ,PR_CONTAINER_HIERARCHY。 尽管无法通过文件夹或容器的 IMAPIProp::GetProps 方法检索PR_CONTAINER_HIERARCHY,但它包含在 IMAPIProp::GetPropList 方法返回的属性标记数组中。
PR_CONTAINER_HIERARCHY 还可用于在复制操作中包含或排除层次结构表。 如果客户端在复制操作中的 lpExcludeProps 参数中为 IMAPIProp::CopyTo 指定了PR_CONTAINER_HIERARCHY,则新文件夹或容器将不支持原始文件夹或容器的层次结构表。
以下属性构成层次结构表中所需的列集:
值 | |
---|---|
PR_COMMENT (PidTagComment) |
PR_DEPTH (PidTagDepth) |
PR_DISPLAY_NAME (PidTagDisplayName) |
PR_DISPLAY_TYPE (PidTagDisplayType) |
PR_ENTRYID (PidTagEntryId) |
PR_INSTANCE_KEY (PidTagInstanceKey) |
PR_OBJECT_TYPE (PidTagObjectType) |
PR_STATUS (PidTagStatus) |
PR_DISPLAY_NAME 包含应在层次结构显示中显示的容器或文件夹的名称。
PR_ENTRYID 是与此容器或文件夹关联的条目标识符。 它应是一个长期条目标识符。 客户端和 MAPI 可以通过调用 IMAPIContainer::GetContentsTable 将此条目标识符传递给 OpenEntry 以打开容器或文件夹并查看其内容。
PR_DEPTH 是一个数值,指示此容器或文件夹的缩进级别,其中零是顶级。 容器或文件夹所在的层次结构越深,其 PR_DEPTH 属性的值就越高。 客户端使用 PR_DEPTH 属性适当地显示层次结构表,以便用户可以清楚地看到父关系和子关系。 容器或文件夹深度始终相对于实现层次结构表的容器或文件夹。
PR_OBJECT_TYPE 始终设置为通讯簿层次结构表的MAPI_ABCONT,将文件夹层次结构表设置为MAPI_FOLDER。
PR_DISPLAY_TYPE 是一个数值,与容器或文件夹在层次结构表中的显示方式相关。 它主要用于显示目的,以直观方式区分容器或文件夹的类型。 许多消息存储和通讯簿提供程序使用不同的显示类型的图标。 由提供商提供这些图标;MAPI 不提供默认值。
MAPI 为 PR_DISPLAY_TYPE定义许多值,其中一些值对文件夹有效,另一些值与通讯簿容器的层次结构表一起使用。 通常,文件夹的 PR_DISPLAY_TYPE 设置为DT_FOLDER以指示默认文件夹图标,DT_FOLDER_LINK表示指向另一个文件夹的链接的图标,或DT_FOLDER_SPECIAL指示特定于应用程序的图标。 DT_FOLDER_LINK用于搜索结果文件夹。
除了这些必需的列,通讯簿层次结构表还必须包含 PR_CONTAINER_FLAGS 属性。 PR_CONTAINER_FLAGS 指示有关层次结构中容器的各种属性,并用于区分一个容器和另一个容器。
通讯簿层次结构表的可选属性是 pidTagAbProviderId) 属性 (PR_AB_PROVIDER_ID。
消息存储层次结构表在其所需的列集中包含以下属性:
PR_FOLDER_TYPE (PidTagFolderType)
PR_SUBFOLDERS (PidTagSubfolders)
PR_CONTENT_COUNT (PidTagContentCount)
PR_CONTENT_UNREAD (PidTagContentUnreadCount)
通讯簿提供程序在其层次结构表实现中必须支持以下 IMAPITable 方法,因为 MAPI 集成通讯簿需要这些方法: