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

时间:2012-08-29 08:33:51

标签: dynamics-crm-2011 dynamics-crm

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

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

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

1 个答案:

答案 0 :(得分:5)

遗憾的是答案是否定的。 CRM中涉及多对多表格/关系的范例是,AssociationDisassociation请求可用,CreateUpdate }或Delete请求。 (事实上​​,交叉表上没有真正的Update - 新关联只能是(Create => Associate)或解散(Delete => Disassociate))

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

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

1)根据Association消息注册您的步骤。遗憾的是,此邮件无法过滤到特定实体,因此您必须通过此插件过滤在CRM中生成的所有关联请求。 IPluginExecutionContextInputParameters属性包中有一个名为“Relationship”的属性,可用于过滤掉您要为其开发代码的关系。

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上也有blog on this topic。他几乎也说了同样的话。