2012-12-11 43 views
0

我有一個帶In/Out參數的工作流,但我沒有將它返回到WorkflowApplicationCompletedEventArgs.Outputs中。無法從WorkflowApplication中獲取參數

我有2個參數:

DataParams which is In/Out 
    ClassParams which is In 

我打電話這樣的工作流程:

IDictionary<string, object> inParams = new Dictionary<string, object> 
    { 
    {"DataParams", _dataParameters }, 
    {"ClassParams", _classParameters }, 
    }; 


    workflowApp = new WorkflowApplication(new actSendToClient(), inParams); 
    workflowApp.Completed = e => SendToClientWorkflowCompleted(e); 
    workflowApp.Run(); 

後,如果用戶取消在主機調用此方法有些時間:

workflowApp.Cancel(); 

哪個路由到委託方法:

public void SendToClientWorkflowCompleted(WorkflowApplicationCompletedEventArgs e) 
{ 
    var output = e.Outputs; 
} 

我在e.Outputs中沒有任何東西。我究竟做錯了什麼?

+0

誰知道?你是否在根Activity上定義了OutArgument?取消可能會在更新之前調用,所以這是有道理的。或者你是否期望你的'inParams'在'e.Outputs'中?那不會發生。如果您以後需要這些參考資料,您必須堅持參考。 – Will

+0

Doh!請繼續參考。有時候我很愚蠢。 – Richard210363

回答

0

如果工作流程運行良好,您只能獲得輸出參數。當你取消工作流程時,你告訴它不這樣做。如果您需要一種方法來在工作流程的一半中停止工作流程,並且仍然認爲它是正常工作的結束,則需要以某種方式在您的工作流程中對此進行建模。要麼通過顯式添加邏輯來規避部分活動,要麼通過拋出異常並向拋出的異常添加額外的數據。在後一種情況下,運行時可以檢查異常並查看從那裏獲取的數據。

通常我更喜歡第一種方法,如果這真的是業務流程的一部分。

0

請注意,如果您希望輸出參數在取消路徑中有效,您可以將根活動包裝在CancellationScope中,該取消範圍設置CancellationHandler中的OutArguments。

另外需要注意的是,OutArgument的值反映了工作流中該參數的狀態。也就是說,如果您在活動中途填充OutArgument,則這些值將反映在OutArgument中。這與分配給C#out的參數一致,然後該方法隨後引發異常。