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