2014-11-06 77 views
1

我們有一個作爲Windows工作流實現的狀態機。這個想法應該是直截了當:工作流基礎 - 多個書籤

  1. 負荷工作流程
  2. 預製棒活動
  3. 停止(等待用戶來啓動下一步)

我們的團隊正在學習世界自然基金會,因爲我們去。我們發現可以創建一個書籤來暫停和卸載工作流程。然後可以通過按ID加載工作流並恢復書籤來恢復工作流程。

//start 
var workflow = new WorkflowApplication(new MyWorkflow(), identity); 
workflow.Run(); 
//run step 1, create bookmark in transition 1 

//..... 
//resume 
var workflow = new WorkflowApplication(new MyWorkflow(), identity); 
workflow.Load(id); 
workflow.ResumeBookmark("step 2", obj); 
//run step 2. finish 

這部分工作。但是現在我們要介紹第三步。轉換2應該創建一個新的書籤,然後恢復工作流以運行步驟3.

//run step 3 
var workflow = new WorkflowApplication(new MyWorkflow(), identity); 
workflow.Load(id); 
workflow.ResumeBookmark("step 3", obj); 
//run step 3. finish 

但是,這並不像預期的那樣工作。工作流程已加載,但恢復step 3書籤不會執行步驟3的活動。似乎任一工作流程只能處理1個書籤,或者轉換1中的第一個書籤在用step 2恢復後不會被清除/刪除。

我搜索了互聯網,但我還沒有找到關於此主題的足夠信息。有很多在工作流中使用單個書籤的示例。但是在工作流中的多個書籤上沒有任何內容。

+0

您是否找到解決方案?我也面臨完全相同的問題 – 2016-04-11 20:22:55

回答

2

我在WWF 4.5中使用了StateMachine類型和很多書籤,沒有任何問題。我們的團隊實施了幫助臺類型的應用程序,因此書籤被放置在Transitions的Action活動中。當工作流程進入狀態時,觸發所有來自狀態的轉換的所有操作活動並創建書籤。恢復其中一個書籤將清除所有其他書籤並將StateMachine移動到另一個州,因此可以創建新的Transitions和書籤。

0

好吧,我找到了這個併爲我工作。 MSDN

假設你要重寫CanInduceIdle在你的所有書籤的作品,你只需要堅持在空閒的工作流。在您的恢復代碼中添加以下內容。

 application.PersistableIdle = e => PersistableIdleAction.Persist; 
    application.PersistableIdle = e => PersistableIdleAction.Unload;