Workflow Foundation 4 第七課 - If/Else 判斷邏輯

原文出處: http://michaelchpeng.spaces.live.com/blog/cns!37633C3B61B57B57!1209.entry


到目前為止,我們的流程都還沒有什麼新奇之處,就一個活動,一個作業。現在我們要往前走一步,多增加一個 If/Else 的判斷邏輯,熟悉一下在 WF 流程中條件的安排。原本我們的例子是很簡單的問候,現在我們要再增加一個需求,就是當輸入的名字長度是單數時我們開頭的問候語是:「Greetings」,如果是偶數,那問候語就成了:「Hello」。

同樣的,在我們開始修改原本的流程之前,我們先建立一個對應的測試方法 IsReturnGreetingWithOddEvenName。所以我們開啟 HelloWF4.Tests 專案中的 SayHelloFixture.vb 檔案,加入以下的測試方法:

在這個測試方法中,我們同時測試了單數和偶數字數的狀況。接著我們試著執行這個測試,想當然爾測試結果是失敗的,因為目前我們的 WF 流程中並沒有單雙數的邏輯:

好,我們回到 WF 流程中開始進行修改。首先我們打開 SayHello.xaml 流程,我們要加入一個變數 FirstWord 來儲存要使用的問候開頭,它的值可能是 Greeting 或 Hello。前面我們看過如何在流程中加入要使用的參數,同樣的方式我們可以從流程設計器中點選下方的 Variables 按鈕,出現一個變數指定工具。目前在流程中還沒有指定變數,所以方格中會出現一個指定變數適用範圍的訊息。就如同一般的程式設計一樣,每一個變數都有適用的範圍。如果我們要建立的變數是適用整個流程的,就直接點選最外層的容器活動控制項。如果它只適用於某一個內層的作業,我們就點選對應的容器活動控制項。變數工具會依著選定的活動控制項顯示這個控制項範圍中適用的變數。注意到,變數的範圍是以容器活動控制項 (例如Sequence、DoWhile…) 為單位,而像 Assign、WriteLine 這類單一邏輯的控制項,就不能成為變數適用的範圍 (就好像程序、函式中可以成為變數的範圍,但是單一的指令、呼叫就不會是變數的範圍)。設計工具會依據活動控制項本身所宣告的屬性判斷其是否支援範圍,如果所選定的活動不適用範圍的安排,該變數會自動以所選擇控制項往外層看第一個支援範圍的活動控制項做為指定的適用範圍。


變數指定工具

由於 FirstWord 變數是適用整個流程的,所以我們點選最外層 Sequence 活動控制項的標題。然後在變數指定工具中指定 FirstWord 這個變數,型別為字串:


加入一個 Sequence 活動控制項範圍的變數

緊接著我們就會安排判斷的邏輯了,我們從工具箱中拖放一個If活動控制項到原本的 Assign the Greeting 控制項上方 (如下圖),其中 Condition 方塊是用來填入判斷條件式的,而 Then/Else 則分別用來指定條件成立或不成立時要執行的作業流程。


If 活動控制項

首先我們指定條件,我們可以直接在條件方塊中輸入以下的判斷式,判斷使用者名稱的字數是否為偶數:

UserName.Length Mod 2 = 0

一旦輸入了判斷運算式,原本出現在活動控制項標題列右上方的驚嘆號標記就會消失,代表該活動控制項最基本的必要資訊已經指定。根據條件,如果使用者名稱的字數是偶數時,問候語的開頭就是 Hello,而不成立時就是 Greeting。所以我們可以分別在 Then/Else 方塊中安排 Assign 活動控制項,指定 FirstWord 變數的值分別為「Hello 」和「Greetings 」(注意後面要加一個空格,才能和後面的問候內容隔開,要不就是在後面建立問候語的運算式中再加入空格),如下:

而之後的 Assign the Greeting 活動控制項中的指定運算式就要改為:

FirstWord & UserName & " From Workflow Foundation 4"

好了,這樣就完成我們的修改。我們可以重新建置這個解決方案,然後執行剛剛建立的測試方法,看看是否能順利通過。

在今天的課程中,我們除了介紹If活動控制項的使用,也看到變數建立的方式。下一堂課我們就要看看 WF 流程的錯誤處理了。