2013-07-07 57 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

什麼是 您認爲?

乾杯,

馬里奧

相關問題