是否可以在不触发异常的情况下停止执行MS CRM插件?
我想禁止用户操作,从而创建了插件列表Pre
事件步骤。我计划在Pre
步之后取消所有进一步的操作。
我怎么能实现这个目标?当然,没有显示错误消息。
答案 0 :(得分:5)
不幸的是,停止执行并回滚插件中的更改的唯一方法是抛出异常(InvalidPluginExecutionException
)
如果插件注册为同步,则异常将始终显示错误消息,并且无法隐藏它。
如果插件注册为异步,则会将异常写入AsyncOperation
实体
了解更多信息:
答案 1 :(得分:1)
如果您的目标是停止执行您拥有的所有插件,则可以创建一个包含单个属性RequestId的HaltPlugin
实体。然后(可能在您的基础插件类中)执行任何插件执行之前,检查以查看Context.RequestId是否在HaltPluginEntity表中,如果是,则返回而不做任何事情,否则,继续正常。
这将为您提供不向用户显示任何错误的额外好处,因为即使没有完成任务,插件在技术上也能成功完成。
正如MarioZG在评论中提到的,如果你只关心插件(我不确定它们是否适用于异步插件),使用shared variables会更有意义。如果你担心插件和工作流程,这种方法不起作用,你需要创建某种HaltPlugin
实体。