防止在插件中创建

时间:2012-11-13 16:58:51

标签: dynamics-crm-2011

我在预创建服务活动时注册了一个插件。在插件中,我检查了一些条件,如果满足,我想停止创建服务活动。而不是那个服务活动,我想创建另外两个将是替代品。但我不希望用户收到所有这些通知。

有没有办法停止在CRM 2011上的插件中创建SA记录?

3 个答案:

答案 0 :(得分:5)

因此,如果用户通过Dynamics CRM GUI触发创建服务活动,则通常会保存表单(通过发送内部UpdateRequest),然后通过另一次访问数据库进行刷新。如果您通过插件删除了两个事件之间的记录,则用户将当然通知标准“无法找到记录”错误消息。在这种情况下,在插件中抛出一个阻止创建记录的异常是相同的,因为将通知用户,但至少他会看到一个可自定义的消息,或许告诉他为什么保存不起作用。

在我看来,通过插件处理此问题的最佳方法是

  1. 检查您的条件。
  2. 更改(不删除)现有的保存服务活动,以匹配您要创建的其他服务活动之一的条件。这样就不会有任何不必要的删除。
  3. 创建其他服务活动。
  4. 使用现在更改的服务活动刷新表单后,您可以在javascript中执行任何操作(打开其他记录,关闭当前记录等)。
  5. 如果你可以控制GUI,你可以做一些不同的事情(例如,删除记录后操作,虽然这仍然会导致一个额外的和不必要的数据库操作),并且你总是可以使用javascript为客户端 - 验证。

    还有一点:我还必须从用户的角度添加它,保存记录然后不立即看到它将构成意外的CRM行为。如果发生类似这样的事情,我至少会期望接受关于CRM部分如何运作的一些培训或者事实上发生了根本不同的事情的通知。

答案 1 :(得分:4)

不直接 - 例如从Target删除InputParameters会导致抛出错误。

终止插件的常用方法是抛出一个Exception,但当然你的用户会看到这个(加上它可能会回滚你之前实现的任何其他逻辑)。

我找到的最佳解决方案是使用同步预操作插件创建所需的记录(可能基于原始记录中提供的数据)和异步后操作插件,删除不需要的记录它必须是异步的,因为,例如,对话框进程或工作流假定如果没有抛出异常就成功创建了记录,并尝试在创建记录后立即访问该记录(即使不需要进一步处理)。

答案 2 :(得分:0)

如果你抛出异常就可以停止:

throw new InvalidPluginExecutionException("Something is wrong!");

希望这会有所帮助。 如果我回答了您的问题,请将回复标记为答案,并投票表示有帮助。