2

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

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

4

3 回答 3

5

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

在我看来,通过插件处理这个问题的最好方法是

  1. 检查你的条件。
  2. 更改(而不是删除)现有的保存服务活动以匹配您要创建的其他服务活动之一的标准。这样就不会不必要地删除任何内容。
  3. 创建其他服务活动。
  4. 使用现在更改的服务活动刷新表单后,您可以在 javascript 中做任何您想做的事情(打开另一条记录,关闭当前记录等)。

如果您可以控制 GUI,则可以做一些不同的事情(例如,删除记录发布操作,尽管这仍会导致额外的不必要的数据库操作),并且您始终可以使用 javascript 进行客户端验证.

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

于 2012-11-13T18:27:57.920 回答
4

不直接 -TargetInputParametersexample 中删除 会导致引发错误。

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

我发现的最佳解决方案是有一个同步的操作前插件来创建您想要的记录(大概基于原始记录中提供的数据)和一个异步的操作后插件来删除不需要的记录。它必须是异步的,例如,如果没有引发异常,对话流程或工作流假定记录已成功创建,并在创建后立即尝试访问记录(即使不需要进一步处理)。

于 2012-11-13T17:43:04.327 回答
0

如果抛出异常,您可以停止,如下所示:

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

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

于 2012-11-13T17:41:19.997 回答