是否可以静默停止MS CRM 2011中的插件执行?

时间:2013-06-11 10:18:54

标签: .net dynamics-crm-2011

是否可以在不触发异常的情况下停止执行MS CRM插件?

我想禁止用户操作,从而创建了插件列表Pre事件步骤。我计划在Pre步之后取消所有进一步的操作。

我怎么能实现这个目标?当然,没有显示错误消息。

2 个答案:

答案 0 :(得分:5)

不幸的是,停止执行并回滚插件中的更改的唯一方法是抛出异常(InvalidPluginExecutionException

如果插件注册为同步,则异常将始终显示错误消息,并且无法隐藏它。

如果插件注册为异步,则会将异常写入AsyncOperation实体

了解更多信息:

MSDN - Handle Exceptions in Plug-Ins

答案 1 :(得分:1)

如果您的目标是停止执行您拥有的所有插件,则可以创建一个包含单个属性RequestId的HaltPlugin实体。然后(可能在您的基础插件类中)执行任何插件执行之前,检查以查看Context.RequestId是否在HaltPluginEntity表中,如果是,则返回而不做任何事情,否则,继续正常。

这将为您提供不向用户显示任何错误的额外好处,因为即使没有完成任务,插件在技术上也能成功完成。

修改

正如MarioZG在评论中提到的,如果你只关心插件(我不确定它们是否适用于异步插件),使用shared variables会更有意义。如果你担心插件和工作流程,这种方法不起作用,你需要创建某种HaltPlugin实体。