4

我在 Opportunity 和自定义实体之间创建了(多对多)关系。CRM 自动打破与称为“相交表”的内置表的关系。

在插件注册工具中,我想在这个特定的表上添加创建/更新/删除消息。但问题是它在那里不存在——甚至多对多的系统关系也不存在在那里。

人们可能会建议我手动断开关系以便在注册工具中显示。但是有什么解决方案可以访问这个内置表吗?

4

1 回答 1

6

不幸的是,答案是否定的。CRM 中关于多对多表/关系的范例是它们可用于AssociationDisassociation请求,但不能用于CreateUpdateDelete请求。(事实上​​,Update在交集表上没有实数 - 新的关联只会产生(Create=> Associate)或解散(Delete=> Disassociate)。)

您可以通过查看交集实体以某种方式验证这一点AttributeMetadata,您会看到实体中的所有属性都具有字段ValidForUpdateAPIValidForCreateAPI设置为 false。这与常规实体不同,常规实体具有对 update 和 create 调用有效的混合属性。

为了解决您的问题,您的选择是有限的:

Association1) 根据消息注册您的步骤。不幸的是,此消息无法过滤到特定实体,因此您必须过滤通过此插件在 CRM 中发出的所有关联请求。在属性包IPluginExecutionContext中有一个名为“Relationship”的InputParameters属性,您可以使用它来过滤出要为其开发代码的关系。

Relationship entityRelationship = 
    (Relationship)context.InputParameters["Relationship"];
if (entityRelationship.SchemaName = customIntersectTable.EntityLogicalName)
{
    EntityReference targetEntity =
        (EntityReference)context.InputParameters["Target"];
     EntityReferenceCollection relatedEntities = 
        (EntityReferenceCollection)context.InputParameters["RelatedEntities"];
    //do stuff
}

2) 制作一个与您的自定义实体具有一对多关系的自定义相交实体Opportunity(类似于OpporunityProduct将机会与产品联系起来的东西)。这里的缺点是这种东西的 GUI 并不像简单的交叉实体那样好。

Gonzalo Ruiz在 MSDN上也有关于这个主题的博客。他几乎说同样的话。

于 2012-08-29T15:43:54.267 回答