[Develop]Lab6-Handle Call ExternalActivity

[Develop]Lab6-Handle Call ExternalActivity

Lab6 、 Handle_Call_ExternalActivity

這個範例,我們來介紹 WWF 中的兩個元件的用法。 callExternalMethodActivity
和 handleExternalEventActivity1 兩個元件。

在WWF 中 工作流程與應用程式是獨立的兩個各體,雖然我們現在將工作流程交給了WWF去執行。但是很多時候我們在寫程式的

時候,你的外部應用程式跟流程會有很多地方要互動。這邊我們舉一個例子:

現在我們在很多網站上申請加入會員的時候,當我們填寫下申請帳號,系統會告訴我們這個帳號有沒有被申請過(雖然一般這種

功能是交由Ajax這樣的非同步式程式去處理);假設我們這個後端檢查邏輯就是由WWF來幫我們執行。當後端WWF去查詢完這個

帳號有沒有被申請過的後,這時就要通知前方申請者這個帳號到底可不可以被申請 ? 這時就是你的WWF 流程要跟前端應用程式

溝通的時候。要怎麼做呢 ? 這章節我們來舉一個簡單的範例 。


開啟一個新的WWF專案。

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

clip_image001

在循序工作流程區塊中我們從工具箱拉出三個元件 [ callExternalMethod ] 和 [ handleExternalEvent
] 跟 [Delay]。

clip_image002

clip_image003


新增介面 !

我們要提供方法給外部呼叫或是呼叫外部。要讓雙方知道怎麼樣叫對方。這就是要定義所謂的合約,也就是 [ 介面 ] 。

這邊也有一個我很喜歡舉的例子。當你打電話去訂 Pizza ; Pizza 店就提供你一個電話介面,也就是電話號碼。你經由這個介面

加上 一個傳入值(也就是你要訂的口味),就可以呼叫Pizza店去執行做 Pizza這項工作。而相對的你也會留下你的電話(介面),直到

他做好Pizza 經由你的介面來通知你你的Pizza好了。

clip_image004

在介面中我們要做下列幾個步驟

1. susing System.Workflow.Activities; 因為我們要使用 WWF 所提供的 ExternalDataExchange
來為介面做宣告。

2. 在這邊我們定義一個呼叫外部的方法 跟 一個提供給外部呼叫的事件 。簡單說 你先想像你就是Pizza店,也就是你是這個流程

你需要提供一隻電話讓使用者 Call In 來叫 Pizza 。這就是流程本身提供給人家的 Event 。而打電話來叫Pizza 的人也就是要使用你

製造 Pizza 的這項服務。他必須留下一個可以讓你聯絡他的方法。這樣瞭解嗎?????

clip_image005


設定循序工作流程內容!

在 [ handleExternalEvent ]元件上的設定,這是你這家 Pizza 要接聽電話的地方。所以你要使用的是剛剛建立的事件,在Event
上選擇剛剛建立的

HandlerExternalEvent。

clip_image006

clip_image007

在 [ callExternalMethod ] 元件上設定,因為這是屬於你( Pizza )要去通知客人 Pizza 好了的地方。所以你要使用客人留下來給你的

呼叫方法。在 [ MethodName ] 屬性的部份要使用 客人留下來給你的方法也就是 剛剛設定介面裡面的[ CallExternalMethod
]

clip_image008

clip_image009

在 [ Delay ] 元件的部份我們設定 Delay 五秒的時間。讓整個流程看起來很像 [ 訂購Pizza -->等五秒(製作Pizza)
--> 先生你的Pizza 好囉 ] 。

clip_image010

clip_image011

我們將 System.Windows.Forms 加入參考,因為這邊要用一個彈出視窗來通知我們事件發生了 !

clip_image012

clip_image013

點兩下 [ handleExternalEvent ]元件進到程式編輯視窗中,輸入 " MessageBox.Show("
有電話來了,有人來訂Pizza "); "。當

[ handleExternalEvent ] 事件被觸發時,使用者就會看到一個MessageBox的視窗。這個動作就好比 有人打電話來跟你叫Pizza了。

clip_image014

都輸入完成後,我們按下建置。運氣好的話~~會看到建置成功。 ^^

clip_image015


加入一個專案,呼叫WWF的外部應用程式!

這邊我們使用 Windows Form 的專案。

clip_image016

clip_image017

這邊我們在Form表單上拉出兩個按鈕,一個是用來啟動工作流程。一個是來呼叫WWF的Event。( 也就是打電話去叫Pizza )

clip_image018

將下列 Workflow Foundation 元件加入參考。

clip_image019

再將剛剛做的專案元件加入參考

clip_image020

加入WWF三個元件參考。

clip_image021

實做介面,來訂定雙方呼叫的合約。

clip_image022

接著建立工作流程執行引擎所需要的相關物件。

clip_image023

在來 點兩下Form上面的 [ 啟動工作流程 ] 按鈕,進入程式編輯視窗後。撰寫以下程式用來啟動工作流程引擎。

clip_image024

clip_image025

在來 點兩下Form上面的[ 呼叫Event ] 按鈕點兩下,進入程式編輯視窗後。撰寫以下程式用來呼叫工作流程中的事件,也就是訂Pizza。

clip_image026

clip_image027

在來要實作介面裡面定義的方法,邊寫下面的程式碼。這是讓Pizza店來主動通知你的方法。

clip_image028


完成測試!

完成了這個範例,我門來測試一下結果吧!!

clip_image018[1]

clip_image029

clip_image030