4

我知道为预验证注册的插件在数据库事务之外执行,但我不确定我是否能想到一个比预操作更可取的场景。有人可以给我一个例子,说明预验证注册可能有用的地方吗?

4

2 回答 2

14

我们在“PreValidation”事件中注册了一些插件,尽管这是在预置的,而不是在线的。

我自己没有编写这些特定的插件,但我可以描述一个并给出使用“PreValidation”而不是“PreOperation”的理由。

实体:账户

事件:删除

逻辑:插件运行预验证。检查没有引用任何帐户地址的联系人。如果找到,停止执行。如果没有,请删除帐户。

例如

帐户“Stackoverflow”的地址为“Jeff Attwood's House”并联系“glosrob”。'glosrob' 通过自定义引用'Jeff Attwood's House'。如果用户选择删除“StackOverflow”,我们应该检测“glosrob”正在引用一个地址并阻止删除。

这背后的原因是开发人员发现在 PreOperation 阶段,删除的某些方面已经发生,即级联删除。该插件的逻辑要求我们检查所有联系人 - 通过在 PreOperation 注册,该帐户下的联系人已被删除,从而使检查过时。

在我们之前的场景中,当用户选择删除“StackOverflow”帐户时,联系人“glosrob”将在插件运行之前被删除。因此,当插件之后确实运行时,它将允许删除。

与 CRM 中的大多数事情一样,这一切都归结为需求和解决方案,但我认为这让您了解为什么/何时可以使用 PreValidation 阶段。我们还有一些其他类似的推理在“删除”事件上运行。

于 2011-12-01T07:39:37.523 回答
2

我知道它很老的帖子,在为同一个问题寻找答案时来到这里......后来我从 MSDN 中找到了关于同一主题的一个关键点,我认为如果我在这里为所有人发布信息会很有帮助。 .

Prevalidation 插件将在安全检查之前发生。例如:如果一个帐户是“VIP”帐户并且您不希望删除此帐户记录(即使他是超级用户/管理员),那么这最好在预验证中发生。因为那时你并不真正关心用户是谁以及他有什么样的权限(甚至他可能没有任何权限删除系统中的任何记录),CRM 会去数据库中检查用户的安全角色在预操作期间,这就是第一个数据库命中发生的地方。在此之前,我们可以根据我们的验证规则停止插件的执行。

我希望这是有道理的...

谢谢

问候斯里坎特

于 2015-04-06T10:25:43.893 回答