2014-03-13 78 views
0

我使用Windows工作流基金爲處理嚮導的許多步驟,並且每步完成後,工作流持久並控制回用戶的新步驟,在某些情況下可能是用戶未完成嚮導的所有步驟,在這種情況下,我想終止未完成的嚮導,爲此我想使用超時時間,但我不知道如何與工作流做到這一點。終止持續工作時間在特定時間後

另一個問題是我想爲每個工作流實例設置userId或當前用戶的用戶名,但我不知道這是怎麼做的,請指導我,tnx;

回答

0

您取消或終止工作流程外部的工作流程。您在創建WorkflowApplication的級別上完成這項工作。

假設你開始你的工作流程是這樣的應用程序:

WorkflowApplication _wfApp = new WorkflowApplication(new YourWorkFlow(), inParams); 
_wfApp.Run(); 

然後,你必須到WorkflowApplication爲wfApp參考。

因此,您可以設置計時器,然後在計時器觸發時使用參考來終止工作流程。

Thread.Sleep(TimeSpan.FromSeconds(1)); 

wfApp.Terminate(new ApplicationException("Terminating the workflow.")); 

您可以通過捕獲工作流完成事件來檢測終止。

wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e) 
{ Do your clean up code here } 

http://msdn.microsoft.com/en-us/library/dd781832(v=vs.110).aspx

0

至於你的第二個問題,你問如何傳遞當前用戶的用戶ID或用戶名到工作流在啓動時?

如果是,則創建一個包含要使用的參數的字典,並在運行工作流之前將其傳遞到WorkflowApplication對象。

IDictionary<string, object> inParams = new Dictionary<string, string> 
      { 
       {"UserID", "12345678" }, 
       {"UserName", "Bob" } 
      }; 
WorkflowApplication _wfApp = new WorkflowApplication(new YourWorkFlow(), inParams); 
_wfApp.Run(); 

您必須設置您的工作流程,使其具有名爲UserID和UserName類型爲字符串的參數。你不需要總是使用字符串。你可以傳入你想要的任何類型。

+0

在我的應用程序中可能是用戶開始流程,並且在persist flow usernot complete flow之後並且這是數據庫中的垃圾,如果可能在一段時間後(超時時間)刪除數據庫中的持久流動行 –

+0

您的第一條評論過於模糊不清。對於你的第二個評論:當你終止一個工作流時,持久性記錄會自動從持久性數據庫 – Richard210363

+0

tnx中刪除,但我想在同一時間後自動刪除工作流持久化記錄,但尚未完成ی,我不知道工作流是否有此可行性 –