MAPI 记录和搜索键
适用于:Outlook 2013 | Outlook 2016
记录键和搜索键是分配给许多 MAPI 对象的二进制标识符。 与对象的输入标识符不同,其记录或搜索键是直接可比较的,也是可传输的。
记录键
记录键用于比较两个对象。 消息存储和通讯簿对象必须具有记录键,这些密钥存储在其 PR_RECORD_KEY (PidTagRecordKey) 属性中。 由于记录键标识对象而不是其数据,因此对象的每个实例都有一个唯一的记录键。 文件夹和邮件的记录键的范围是邮件存储区。 通讯簿容器、消息用户和通讯组列表的范围是 MAPI 提供的用于集成通讯簿的顶级容器集。
记录键可以复制到另一个资源中。 例如,两个不同消息存储区中的不同消息可以具有相同的记录键。 这与长期条目标识符不同:因为长期条目标识符包含对服务提供商的引用,所以它们的范围更广。 消息存储的记录密钥的范围类似于长期条目标识符;它应该在所有消息存储提供程序中是唯一的。 为了确保这种唯一性,消息存储提供程序通常将其记录键设置为一个值,该值是其 PR_MDB_PROVIDER (PidTagStoreProvider) 属性和消息存储区唯一标识符的组合。
搜索键
搜索键用于比较两个对象中的数据。 对象的搜索键存储在其 PR_SEARCH_KEY (PidTagSearchKey) 属性中。 由于搜索键表示对象的数据,而不是对象本身,因此具有相同数据的两个不同对象可以具有相同的搜索键。 例如,复制对象时,原始对象及其副本具有相同的数据和相同的搜索键。
消息和消息用户具有搜索键。 邮件的搜索键是邮件数据的唯一标识符。 消息存储提供程序在消息创建时提供消息的 PR_SEARCH_KEY 属性。 通讯簿条目的搜索键根据地址类型 (PR_ADDRTYPE (PidTagAddressType) ) 和地址 (PR_EMAIL_ADDRESS (PidTagEmailAddress) ) 计算。 如果通讯簿条目是可写的,则在使用 IMAPIProp::SetProps 方法设置地址类型和地址并且使用 IMAPIProp::SaveChanges 方法保存该条目之前,其搜索键可能不可用。 当这些地址属性发生更改时,在 通过 SaveChanges 调用提交更改之前,相应的搜索键可能不会与新值同步。
对象的记录键值可以与其搜索键的值相同或不同,具体取决于服务提供商。 某些服务提供商对对象的搜索键、记录键和条目标识符使用相同的值。 其他服务提供程序为其每个对象的标识符分配唯一值。