[Develop]Lab15-listenActivity

[Develop]Lab15-listenActivity

Lab15、listenActivity

這個Lab要介紹 listenActivity 的元件,我們先參照這個範例, listenActivity 跟 if 在某些部份很相似,當條件被滿足的時候就會執行該區塊裡的部份。
listenActivity 在每個

區塊都可以實作一個 handleExternalEventActivity 元件;當那一個事件被外部應用程式觸發的時候,流程變會從那個區塊往下走。

clip_image001


新增一個新的WWF專案。

這個範例中我們要使用的是 [ 循序工作流程程式庫 ] 。檔案名稱我們命名為 [ Lab15_listenActivity ] 。

clip_image002

再專案中我們新增一個 [ 介面 ] 。這是外部應用程式與工作流程的合約。

clip_image003

我們將在介面中首先引用 using System.Workflow.Activities 的參考。,接著我們設計三個委派的事件類型,準備要讓外部應用程式觸發的事件。並且我們將界面

標記為本機的服務介面, 在介面上方標記[ExternalDataExchange]。

clip_image004

在工作流程中我們拉出一個 listenActivity 元件,並且我們多新增一個分支。

clip_image005

接者我們拉出下列的元件,我們在每的分支裡面都放置一個 handleExternalEventActivity 元件 與 CodeActivity
元件。在最下方我們也放一個 CodeActivity 元件,用來驗證

當事件被觸發時。執行完分支裡面的程式後,就會執行最下方的元件。

clip_image006

我們點選第一個 [ handleExternalEventActivity 元件 ],在屬性視窗中的 [ EventName ] 中我們選擇我們剛剛建立的介面
[ Lab15_listenActivity.Interface1 ]。在 [ EventName ]

中我們選擇 剛剛建立的委派事件 [ Handlerevent1 ]。

clip_image007

clip_image008

我們點選第二個 [ handleExternalEventActivity 元件 ],在屬性視窗中的 [ EventName ] 中我們選擇我們剛剛建立的介面
[ Lab15_listenActivity.Interface1 ]。在 [ EventName ]

中我們選擇 剛剛建立的委派事件 [ Handlerevent2 ]。

clip_image009

clip_image010

我們點選第三個 [ handleExternalEventActivity 元件 ],在屬性視窗中的 [ EventName ] 中我們選擇我們剛剛建立的介面
[ Lab15_listenActivity.Interface1 ]。在 [ EventName ]

中我們選擇 剛剛建立的委派事件 [ Handlerevent3 ]。

clip_image011

clip_image012

接著我們在工作流程程式的部份中我們將 using System.Windows.Forms 加入參考。

clip_image013

我們在第一個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("It's
the event1"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示

彈出視窗。

clip_image014

clip_image015

我們在第二個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("It's
the event2"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示

彈出視窗。

clip_image016

clip_image017

我們在第三個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("It's
the event3"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示

彈出視窗。

clip_image018

clip_image019

我們在第四個 [ CodeActivity ]上點兩下,進入程式編輯區。我們撰寫 [ MessageBox.Show("Event
結束"); ] 程式碼,讓程式執行到這的時候呼叫一個 MessafeBox 來顯示

彈出視窗。

clip_image020

clip_image021

撰寫完畢後,我們建置這個專案。運氣好的話,會看到建置成功。


我們加入一個新的專案,用Windows
Form 來測試我們剛剛撰寫的工作流程。

我們加入一個 [ Windows 應用程式 ]專案叫做 [ Lab15_listenActivity_WinForm ]。

clip_image022

我們在 Form 上新增三個 Button ,然後在Form上面點兩下來進入專案。

clip_image023

在這邊我們將下列元件加入參考,包括剛剛撰寫的 [ Lab15_listenActivity ]專案。

clip_image024

接下來我們先讓這個 Form1 的 Class 實作 [ Interface1 ] 介面,然後在類別裡我們實作介面成員,也就那三個介面。然後我們宣告三個型別物件

分別是 工作流程執行期間 [ workflowruntime ]、工作流程實體[ workflowinstance ] 與 外部資料交換服務
[ ExternalDataExchangeService ] 。然後在建構子中我們

建立 工作流程執行期間 [ workflowruntime ] 實體並且啟動 工作流程執行期間。

clip_image025

接者我們設計一個沒有回傳值得方法,但是他接收一個字串型別的參數。進到方法內容中,我們些建立起工作流程實體。然後我們建立 外部資料交換服務
[

ExternalDataExchangeService ]實體,並且把它加入 工作流程執行期間。並且取得工作流程實體的 Guid。

然後我們建立一個 Switch ,他會根據我們傳入的值來決定要去觸發哪一個工作流程事件。

接著我們宣告一個委派給 工作流程值行期間的WorkflowCompleted 事件一個 workflowCompleted 方法。

clip_image026

我們宣告一個 workflowCompleted 方法,他是要委派給當工作流程結束時觸發的事件。在這個方法中我們移除掉 [ ExternalDataExchangeService
] 的服務,

並且呼叫 MessageBox 秀出一個訊息來告知我們流程結束了。

clip_image027

接著在Form 上的三個 Button 按鈕上我們點兩下,編輯 [ Button_Click ] 事件。分別去呼叫 StartFlow 方法,並且傳入一個字串值讓他判斷要啟動哪個流程。

clip_image028


測試專案。

接著我們來執行這次的Lab,運氣好的話,編譯可以看到下面的測試畫面。

clip_image029

clip_image030

clip_image031

clip_image032