在crm中我有几个实体的解决方案。有三个导致问题。让我们称他们为A,B和C.
A和B具有一对多关系,对删除具有级联效应
B和C有一对多关系没有级联删除。
对于B我已经开发了一个crm插件,当删除它时,它也会删除C.一种级联删除插件。我不能在B和C之间创建级联,因为C已经与另一个实体处于级联关系。
当我删除任何实体B时,它会触发插件代码并删除C的所有子代。当我删除任何实体A时,它级联删除B,但它不会触发插件。
如何在不为实体A创建插件的情况下确保插件触发?我在crm相当新,所以我真的不知道在哪里寻找这种问题。
更新
该插件用于在“预验证”阶段触发。将其更改为“预操作”实际上导致插件触发。不幸的是,在这个阶段,所有已经删除的对象的Child引用。所以现在当A被删除时B被级联删除,并且插件触发,但我找不到它的任何子实体C引用
答案 0 :(得分:0)
创建一个对象,该对象将存储子引用并将其传递给"共享变量"在预验证阶段。然后,您可以在操作前阶段访问共享变量:https://msdn.microsoft.com/en-us/library/gg328579.aspx。您将需要在两个步骤中注册的插件,但这将处理您的两个挑战。
答案 1 :(得分:0)
在实体B的删除消息的预操作阶段注册您的插件。然后注册实体的前映像以将原始查找字段获取到实体C.
答案 2 :(得分:0)
在级联删除期间,只会调用触发实体的 PreValidation
。
对于您的实体 B
,这意味着将跳过此阶段。
正如 Joseph 指出的,在 PreValidation
中设置共享变量通常可用于获取有关 PreOperation
中已删除数据的可用信息,但您必须确保在以下情况下也设置此共享变量删除 A
。
如果您的任何实体都知道解决方案,删除带有这些记录的解决方案也会触发级联删除,从而仅在 PreValidation
实体上调用 solution
。
Henk 的建议是可行的,如果与 C
相关的 B
记录集不需要任何处理,比如排序。