2013-07-07 54 views
1

我面临一个奇怪的问题,我无法在网上找到合适的解决方案。虽然在link下的Microsoft Dynamics CRM论坛上提出了类似的问题,但未提及如何处理这种情况。更新CRM 2011中的记录时触发的工作流/流程

我已经设计了2011年CRM工作流,应在申请单场变化(应用级)触发,因为我已经检查下开始应用阶段场时:“记录字段更改”

现在的问题是,工作流通过JavaScript代码触发两次或许一个:在其上以响应以上JavaScript代码执行的相同的实体

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

而另一通过更新插件。

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

什么可能是这种情况下的政变可行的解决方案?

回答

1

JavaScript肯定会触发一次工作流程 - 与点击保存的用户没有区别。

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

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

您是否知道插件可以使用更新调用更改数据?如果您的插件是同步注册的并且在事件前,则对目标实体对象所做的任何更改都会反映在记录中,这不会触发额外的更新 - 它是原始消息的一部分。

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

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

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

//end of plugin 

失败,这可能是值得探讨的其他选项:如果插件设置应用阶段,为什么是JavaScript也设置它

  1. 甚至需要插件,是否可以进入工作流?
  2. 您可以看看使用do not run workflow字段,该字段由插件/ JavaScript设置,然后当工作流程运行时,如果设置了该字段,它什么也不做,但清除字段(不是真正推荐的选项)。
  3. 该插件可以触发工作流程吗?也许这可以从配置记录中读取?
0

关于插件,当它在Update上触发时,上下文将只包含已更改的字段。

对于一个Javascript。我认为所有的领域获取发送到现场,这样是有那么在一切的UDPATE,所以工作流将火。

最简单的解决办法是建立一个标志上的记录,因此它只能触发一次。例如,该字段可以是名为“标志”的布尔值。在工作流程开始时,您可以检查该值,并根据该值继续。

例如:

  • 如果(标志==假)

    • 做我的逻辑...........
  • 设置标志= true

什么是 您认为?

干杯,

马里奥

相关问题