javascript - 更新 CRM 2011 中的记录时触发的工作流程/流程

标签 javascript process dynamics-crm-2011 workflow dynamics-crm

我遇到了一个奇怪的问题,我在网络上找不到正确的解决方案。尽管 Microsoft Dynamics CRM 论坛上也提出了类似的问题 link ,但是那里没有提到如何处理这种情况。

我在 CRM 2011 中设计了一个工作流程,它应该在应用程序的单个字段更改(应用程序阶段)时触发,因为我已检查开始时间下的应用程序阶段字段:“记录字段改变”

现在的问题是工作流程通过 JavaScript 代码触发两次(也许一次):

Xrm.Page.data.entity.save();  

另一个通过同一实体上的更新插件来响应上面的 JavaScript 代码而执行。

我设计的工作流程/流程是一种主工作流程,它具有根据各自的应用程序阶段启动的其他子流程。现在,在子进程中,我创建了一个与应用程序阶段相关的事件并执行其他操作,但由于工作流启动两次,它会多次创建事件并执行其他任务。

应对这种情况的可行解决方案是什么?

最佳答案

JavaScript 肯定会触发工作流程一次 - 这与用户只需单击“保存”没有什么不同。

执行更新的插件(例如 service.Update(...))也会触发工作流程,这都是预期的行为。

我首先看看你的插件,主要是它必须执行更新调用吗?如果您可以避免双重更新,应该可以解决您的问题。

您知道插件可以通过更新调用来更改数据吗?如果您的插件是在事件前同步注册的,那么您对目标实体对象所做的任何更改都会反射(reflect)在记录上,这不会触发额外的更新 - 它是原始消息的一部分。

例如,如果在事件前注册了以下代码,同步插件'new_field'将填充“我的新值”,并且不需要额外的更新调用。

//get the entity 
Entity entity = (Entity)context.InputParameters["Target"];

//set new field
entity["new_field"] = "My new value";

//end of plugin

如果失败,可能值得考虑其他选择:

  1. 如果插件正在设置应用程序阶段,为什么 JavaScript 也要设置它?
  2. 是否需要插件,是否可以将其全部纳入工作流程中?
  3. 您可以考虑使用不运行工作流程字段,该字段由插件/JavaScript 设置,然后当工作流程运行时,如果设置了该字段,它不会执行任何操作,但会清除该字段(并不是真正推荐的选项)。
  4. 插件能否触发工作流程?也许这可以从配置记录中读取?

关于javascript - 更新 CRM 2011 中的记录时触发的工作流程/流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17512380/

相关文章:

c# - 创建于字段日期时间格式

javascript - 根据另一个数组的对象属性过滤 JavaScript 数组

javascript - ng-model 在 ng-if 和 ng-repeat、AngularJs 中不起作用?

c++ - 使用 C++ 在 Linux 中停止并重新开始运行进程

c - 为什么进程之间没有切换

java - 无法通过java程序在mac os中运行shell脚本

c# - Word文档预览 CRM 2011

dynamics-crm-2011 - 将解决方案从 Dynamic CRM Online Trial 导入到 Dynamic CRM On-Premise,事件源问题

javascript - 类型错误 : Cannot read property 'go' of undefined in AngularJS

javascript - 类型错误 : Property 'locals' of object #<ServerResponse> is not a function