2009-01-08 65 views
2

我想使用Windows工作流,並有一個模型,類似於在下面的鏈接的圖像:
Workflow screen shot
Windows工作流 - IfElse分支

每個發送活動(GetSomthingGetSomthingElseGetSomeMoreStuff後)正在調用相同的自定義活動(LogSomthingBadHappened)。

儘管在我的真實模型中這張圖片看起來並不那麼糟糕,但自定義活動是一個SequenceActivty,有很多節點,並且當它重複3次時,工作流看起來非常難看。

我願做這樣的事情:
Edited Workflow screen shot

能否IfElse分支這樣的合併?
我應該使用狀態機的工作流程(還沒有弄清楚)?

回答

1

在工作流上使用FaultHandler並拋出處理程序將捕獲的特定異常類型。不是最優美的,但我認爲它應該工作。

1

在順序工作流程中,所有步驟必須以特定順序出現,並且執行路徑僅由控制結構(IF,WHILE)調節。
以您描述的方式更改執行路徑就像在命令式代碼中使用GOTO語句,我們知道這會導致不必要的複雜性。

如果您需要在工作流程的不同階段執行的SequenceActivity中包含的活動完全相同,則可以將它們嵌入到定製活動中。這樣,管理它們就更容易,因爲它們包含在一個邏輯單元中。
在命令式代碼中,這將像將重複代碼的一部分重構爲一個方法,然後在多個地方調用該代碼。

1

另一種可能的替代方法是將您的LogSomthingBad發生的活動放入自定義工作流程中幷包括幾次。需要注意的幾件事情:如果LogSomthingBadHappened活動需要來自主工作流的狀態信息,則將執行子工作流asynchronously,將其複製到子工作流可能很困難。

我還沒有試過這個,所以它可能不工作。

0

我認爲gbanfill的答案指向了正確的方向。

一概而論,我定義問題爲:

有沒有一種方法來定義一組,將在工作流程的幾個地方執行的活動?
更進一步的要求是:

  1. 的活動組應XAML定義僅即沒有代碼。
  2. 該組的輸入類型當然是固定的,但實際值應該取決於調用(如調用函數)。

也許做到這一點的方法是定義子工作流程並構建一個自定義活動,以實例化子工作流程並等待它完成後再繼續。

此自定義活動應該至少有兩個參數:子工作流ID和輸入參數。