IABContainer::CreateEntry
适用于:Outlook 2013 | Outlook 2016
创建一个新条目,可以是消息用户、通讯组列表或其他容器。
HRESULT CreateEntry(
ULONG cbEntryID,
LPENTRYID lpEntryID,
ULONG ulCreateFlags,
LPMAPIPROP FAR * lppMAPIPropEntry
);
参数
cbEntryID
[in] lpEntryID 参数指向的条目标识符中的字节计数。
lpEntryID
[in]指向模板的条目标识符的指针,用于创建新特定类型的条目。
ulCreateFlags
[in]控制如何执行条目创建操作的标志的位掩码。 可以设置以下标志:
CREATE_CHECK_DUP_LOOSE
应执行松散级别的重复条目检查。 松散重复项检查的实现特定于提供程序。 例如,提供程序可以将松散匹配定义为具有相同显示名称的任何两个条目。
CREATE_CHECK_DUP_STRICT
应执行严格级别的重复条目检查。 严格重复项检查的实现特定于提供程序。 例如,提供程序可以将严格匹配定义为具有相同显示名称和消息地址的任何两个条目。
CREATE_REPLACE
如果确定这两个条目是重复项,则新条目应替换现有条目。
lppMAPIPropEntry
[out]指向指向新创建的条目的指针的指针。
返回值
S_OK
已成功创建新条目。
备注
IABContainer::CreateEntry 方法在指定容器中创建特定类型的新条目,并返回指向接口实现的指针,以便进一步访问该条目。 使用从容器的一次性表中发布的可用模板列表中选择的模板创建新条目。 调用方通过调用容器的 IMAPIProp::OpenProperty 方法并请求 PR_CREATE_TEMPLATES (PidTagCreateTemplates) 属性来访问容器的一次性表。
针对实现者的说明
支持 IABContainer::CreateEntry 方法的所有容器都必须可修改。 在其 PR_CONTAINER_FLAGS (PidTagContainerFlags) 属性中设置容器AB_MODIFIABLE标志,以指示该容器可修改。
应支持所有 ulCreateFlags 标志。 但是,这些标志的解释和使用特定于实现,也就是说,你可以确定CREATE_CHECK_DUP_LOOSE和CREATE_CHECK_DUP_STRICT的语义在实现的上下文中的含义。 如果无法或无法确定某个条目是否为重复项,请始终允许创建该条目。
某些提供商通过匹配条目中的显示名称、消息地址和搜索键来实现严格的条目检查;其他提供程序将匹配限制为显示名称和地址。 松散条目检查通常仅通过检查显示名称来实现。
主机通讯簿提供程序实现者说明
如果容器可以从其他提供程序的模板创建条目,则 CreateEntry 的实现应为与创建的条目关联的部分或所有属性提供存储。 例如,如果为条目的 PR_DETAILS_TABLE (PidTagDetailsTable) 属性提供存储,则可以生成其详细信息对话框,而无需依赖于外部提供程序。
如果容器可以创建支持 PR_TEMPLATEID (PidTagTemplateid) 属性的条目,则 CreateEntry 的实现必须执行以下操作:
调用 IMAPISupport::OpenTemplateID 方法。 OpenTemplateID 允许外部提供程序的条目代码绑定到要创建的新条目。 外部提供商支持此绑定过程,以保持对从其模板创建到主机通讯簿提供程序容器中的条目的控制。
执行任何必要的初始化,并使用对象在 OpenTemplateID 的 lppMAPIPropNew 参数中返回的外提供程序条目中的所有属性填充新对象。
如果 OpenTemplateID 成功,请将属性复制到 lppMAPIPropNew 参数指向的实现,而不是直接复制到 lpMAPIPropData 参数指向的实现。 初始化新条目以供脱机使用,就像对来自外部提供程序的任何其他条目一样。
如果 OpenTemplateID 返回错误, CreateEntry 应会失败。 不允许创建条目。 由于外部提供程序可以假设提供程序中的数据,因此不要创建模板标识符尚未成功绑定到外部提供程序的条目。
给调用方的说明
当 CreateEntry 返回时,你可能或可能无法立即访问新条目的条目标识符。 在调用新条目的 IMAPIProp::SaveChanges 方法之前,某些通讯簿提供程序才使其可用。
尽管重复检查标志作为参数传递给 CreateEntry,但在调用 SaveChanges 之前不会执行重复检查操作。 因此, SaveChanges 而不是 CreateEntry 会返回相关错误(例如,指示尝试创建已存在的条目)MAPI_E_COLLISION。