gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:07:54 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我在网络上找不到正确的解决方案。尽管 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com