如何在多对多相交表上添加CRM插件步骤?

Anw*_*war 4 dynamics-crm dynamics-crm-2011

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

在Plug-in Registeration Tool中,我想在此特定表上添加Create/Update/Delete消息.但问题是它并不存在 - 甚至那里也不存在多对多的系统关系.

人们可能会建议我手动破坏关系,以便在注册工具中显示.但是有没有解决方案来访问这个内置表?

Pet*_*eed 5

不幸的是,答案是否定的.在CRM涉及多对多表/关系的范例是,他们都可以AssociationDisassociation请求,但Create,UpdateDelete请求.(事实上​​,Update交叉表上没有真实的 - 新关联只能是(Create=> Associate)或解散(Delete=> Disassociate).)

您可以通过查看AttributeMetadata交叉点实体来验证这一点,并且您将看到实体中的所有属性都包含字段ValidForUpdateAPIValidForCreateAPI设置为false.这与常规实体不同,常规实体具有对更新和创建调用有效的混合属性.

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

1)根据Association消息注册您的步骤.遗憾的是,此消息无法过滤到特定实体,因此您必须通过此插件过滤在CRM中进行的所有关联请求.该IPluginExecutionContext有一个叫"关系"属性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
}
Run Code Online (Sandbox Code Playgroud)

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

Gonzalo Ruiz也在MSDN 上有关于此主题博客.他几乎说了同样的话.