我在Opportunity和自定义实体之间创建了一个(多对多)关系。 CRM会自动破坏与内置表格的关系,称为“相交表”。
在Plug-in Registeration Tool中,我想在此特定表上添加Create / Update / Delete消息。但问题是它并不存在 - 即使那里不存在多对多的系统关系。
人们可能会建议我手动断开关系,以便在注册工具中显示。但是有没有解决方案来访问这个内置表?
答案 0 :(得分:5)
遗憾的是答案是否定的。 CRM中涉及多对多表格/关系的范例是,Association
和Disassociation
请求可用,Create
,Update
不 }或Delete
请求。 (事实上,交叉表上没有真正的Update
- 新关联只能是(Create
=> Associate
)或解散(Delete
=> Disassociate
))
您可以通过查看交叉点实体的AttributeMetadata
来验证这一点,并且您会看到实体中的所有属性都包含字段ValidForUpdateAPI
和ValidForCreateAPI
设为false。这与常规实体不同,常规实体具有对更新和创建调用有效的混合属性。
为了解决您的问题,您的选择有限:
1)根据Association
消息注册您的步骤。遗憾的是,此邮件无法过滤到特定实体,因此您必须通过此插件过滤在CRM中生成的所有关联请求。 IPluginExecutionContext
在InputParameters
属性包中有一个名为“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。他几乎也说了同样的话。