[Develop]Lab15-listenActivity
Lab15、listenActivity |
這個Lab要介紹 listenActivity 的元件,我們先參照這個範例, listenActivity 跟 if 在某些部份很相似,當條件被滿足的時候就會執行該區塊裡的部份。 區塊都可以實作一個 handleExternalEventActivity 元件;當那一個事件被外部應用程式觸發的時候,流程變會從那個區塊往下走。 |
新增一個新的WWF專案。
這個範例中我們要使用的是 [ 循序工作流程程式庫 ] 。檔案名稱我們命名為 [ Lab15_listenActivity ] 。
再專案中我們新增一個 [ 介面 ] 。這是外部應用程式與工作流程的合約。
我們將在介面中首先引用 using System.Workflow.Activities 的參考。,接著我們設計三個委派的事件類型,準備要讓外部應用程式觸發的事件。並且我們將界面
標記為本機的服務介面, 在介面上方標記[ExternalDataExchange]。
在工作流程中我們拉出一個 listenActivity 元件,並且我們多新增一個分支。
接者我們拉出下列的元件,我們在每的分支裡面都放置一個 handleExternalEventActivity 元件 與 CodeActivity
元件。在最下方我們也放一個 CodeActivity 元件,用來驗證
當事件被觸發時。執行完分支裡面的程式後,就會執行最下方的元件。
我們點選第一個 [ handleExternalEventActivity 元件 ],在屬性視窗中的 [ EventName ] 中我們選擇我們剛剛建立的介面
[ Lab15_listenActivity.Interface1 ]。在 [ EventName ]
中我們選擇 剛剛建立的委派事件 [ Handlerevent1 ]。
我們點選第二個 [ handleExternalEventActivity 元件 ],在屬性視窗中的 [ EventName ] 中我們選擇我們剛剛建立的介面
[ Lab15_listenActivity.Interface1 ]。在 [ EventName ]
中我們選擇 剛剛建立的委派事件 [ Handlerevent2 ]。
我們點選第三個 [ handleExternalEventActivity 元件 ],在屬性視窗中的 [ EventName ] 中我們選擇我們剛剛建立的介面
[ Lab15_listenActivity.Interface1 ]。在 [ EventName ]
中我們選擇 剛剛建立的委派事件 [ Handlerevent3 ]。
接著我們在工作流程程式的部份中我們將 using System.Windows.Forms 加入參考。
我們在第一個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("It's
the event1"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示
彈出視窗。
我們在第二個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("It's
the event2"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示
彈出視窗。
我們在第三個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("It's
the event3"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示
彈出視窗。
我們在第四個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("Event
結束"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示
彈出視窗。
撰寫完畢後,我們建置這個專案。運氣好的話,會看到建置成功。
我們加入一個新的專案,用Windows
Form 來測試我們剛剛撰寫的工作流程。
我們加入一個 [ Windows 應用程式 ]專案叫做 [ Lab15_listenActivity_WinForm ]。
我們在 Form 上新增三個 Button ,然後在Form上面點兩下來進入專案。
在這邊我們將下列元件加入參考,包括剛剛撰寫的 [ Lab15_listenActivity ]專案。
接下來我們先讓這個 Form1 的 Class 實作 [ Interface1 ] 介面,然後在類別裡我們實作介面成員,也就那三個介面。然後我們宣告三個型別物件
分別是 工作流程執行期間 [ workflowruntime ]、工作流程實體[ workflowinstance ] 與 外部資料交換服務
[ ExternalDataExchangeService ] 。然後在建構子中我們
建立 工作流程執行期間 [ workflowruntime ] 實體並且啟動 工作流程執行期間。
接者我們設計一個沒有回傳值得方法,但是他接收一個字串型別的參數。進到方法內容中,我們些建立起工作流程實體。然後我們建立 外部資料交換服務
[
ExternalDataExchangeService ]實體,並且把它加入 工作流程執行期間。並且取得工作流程實體的 Guid。
然後我們建立一個 Switch ,他會根據我們傳入的值來決定要去觸發哪一個工作流程事件。
接著我們宣告一個委派給 工作流程值行期間的WorkflowCompleted 事件一個 workflowCompleted 方法。
我們宣告一個 workflowCompleted 方法,他是要委派給當工作流程結束時觸發的事件。在這個方法中我們移除掉 [ ExternalDataExchangeService
] 的服務,
並且呼叫 MessageBox 秀出一個訊息來告知我們流程結束了。
接著在Form 上的三個 Button 按鈕上我們點兩下,編輯 [ Button_Click ] 事件。分別去呼叫 StartFlow 方法,並且傳入一個字串值讓他判斷要啟動哪個流程。
測試專案。
接著我們來執行這次的Lab,運氣好的話,編譯可以看到下面的測試畫面。