3

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

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

我怎么能做到这一点?当然,没有显示错误消息。

4

2 回答 2

6

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

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

如果插件被注册为异步异常被写入AsyncOperation实体

了解更多信息:

MSDN - 处理插件中的异常

于 2013-06-11T10:29:02.820 回答
1

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

这会给您带来额外的好处,即不会向用户显示任何错误,因为插件在技术上成功完成,即使没有完成任何工作。

编辑

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

于 2013-06-11T12:02:31.323 回答