在我看來,實際上你在當前想要使用的一項活動中有兩項活動。 您要求的內容在流程圖(即Visio)中是不可能的,要麼是因爲一個活動只有一個可以鏈接到下一個活動(即結束狀態)的退出,您需要一個決策塊才能夠一條不同的路線。
這是你嘗試轉換成流程圖什麼的例子:從方法的體內
public int CalculatePrice(string parameters)
{
// Calculate result.
var price = 5;
// Are we done?
if (!IsVATNeeded(price))
{
return price;
}
// Do more calculations.
price = price * vat;
return price;
}
返回是一個代碼氣味指出,有必要重新思考的工作流程。一個健康的方法只有一個回報。 也就是說
public int CalculatePrice(string parameters)
{
var price = CalculatePriceWithoutVAT(parameters);
if (IsVATNeeded(parameters))
{
price = ApplyVAT(price);
}
return price;
}
現在,第二種方法可以直接轉換爲流程圖/工作流程。 ![enter image description here](https://i.stack.imgur.com/siOXu.png)
如果您有其他情況,請提供樣本流程圖或其他圖表。 經驗法則是,如果您無法繪製流程圖,狀態機或序列圖,則無法使用Microsoft Workflow實施。
請注意,可以創建由其他活動組成的創建活動,以便將上圖中的活動嵌入到單個活動中並隱藏詳細信息。這與代碼示例中的CalculatePrice方法相同。來電者實際上不必知道價格是如何計算的。
感謝您的回覆,也許我的回答是愚蠢的,我試過了,它給了我對象引用未設置爲對象的實例。我應該從Activity外部傳遞WorkflowApplication變量作爲參數嗎? –
@HassanMokdad你需要將應用程序添加到它的擴展 - 有點不正常,但我找到了最簡單的方法。答案已更新。 – Slugart
這不完全是最正確的方式。您將約束附加到工作流,以使其始終具有* WorkflowApplication *擴展名。使用[TerminateWorkflow](http://msdn.microsoft.com/zh-cn/library/system.activities.statements.terminateworkflow.aspx)。 – Joao