[Develop]Lab6-Handle Call ExternalActivity
Lab6 、 Handle_Call_ExternalActivity |
這個範例,我們來介紹 WWF 中的兩個元件的用法。 callExternalMethodActivity 在WWF 中 工作流程與應用程式是獨立的兩個各體,雖然我們現在將工作流程交給了WWF去執行。但是很多時候我們在寫程式的 時候,你的外部應用程式跟流程會有很多地方要互動。這邊我們舉一個例子: 現在我們在很多網站上申請加入會員的時候,當我們填寫下申請帳號,系統會告訴我們這個帳號有沒有被申請過(雖然一般這種 功能是交由Ajax這樣的非同步式程式去處理);假設我們這個後端檢查邏輯就是由WWF來幫我們執行。當後端WWF去查詢完這個 帳號有沒有被申請過的後,這時就要通知前方申請者這個帳號到底可不可以被申請 ? 這時就是你的WWF 流程要跟前端應用程式 溝通的時候。要怎麼做呢 ? 這章節我們來舉一個簡單的範例 。 |
開啟一個新的WWF專案。
這個範例中我們要使用的是 [ 循序工作流程程式庫 ] 。檔案名稱我們命名為 [ Lab6_Handle_Call_ExternalActivity
] 。名稱有點長 ^^|||
。
在循序工作流程區塊中我們從工具箱拉出三個元件 [ callExternalMethod ] 和 [ handleExternalEvent
] 跟 [Delay]。
新增介面 !
我們要提供方法給外部呼叫或是呼叫外部。要讓雙方知道怎麼樣叫對方。這就是要定義所謂的合約,也就是 [ 介面 ] 。
這邊也有一個我很喜歡舉的例子。當你打電話去訂 Pizza ; Pizza 店就提供你一個電話介面,也就是電話號碼。你經由這個介面
加上 一個傳入值(也就是你要訂的口味),就可以呼叫Pizza店去執行做 Pizza這項工作。而相對的你也會留下你的電話(介面),直到
他做好Pizza 經由你的介面來通知你你的Pizza好了。
在介面中我們要做下列幾個步驟
1. susing System.Workflow.Activities; 因為我們要使用 WWF 所提供的 ExternalDataExchange
來為介面做宣告。
2. 在這邊我們定義一個呼叫外部的方法 跟 一個提供給外部呼叫的事件 。簡單說 你先想像你就是Pizza店,也就是你是這個流程
你需要提供一隻電話讓使用者 Call In 來叫 Pizza 。這就是流程本身提供給人家的 Event 。而打電話來叫Pizza 的人也就是要使用你
製造 Pizza 的這項服務。他必須留下一個可以讓你聯絡他的方法。這樣瞭解嗎?????
設定循序工作流程內容!
在 [ handleExternalEvent ]元件上的設定,這是你這家 Pizza 要接聽電話的地方。所以你要使用的是剛剛建立的事件,在Event
上選擇剛剛建立的
HandlerExternalEvent。
在 [ callExternalMethod ] 元件上設定,因為這是屬於你( Pizza )要去通知客人 Pizza 好了的地方。所以你要使用客人留下來給你的
呼叫方法。在 [ MethodName ] 屬性的部份要使用 客人留下來給你的方法也就是 剛剛設定介面裡面的[ CallExternalMethod
]
在 [ Delay ] 元件的部份我們設定 Delay 五秒的時間。讓整個流程看起來很像 [ 訂購Pizza -->等五秒(製作Pizza)
--> 先生你的Pizza 好囉 ] 。
我們將 System.Windows.Forms 加入參考,因為這邊要用一個彈出視窗來通知我們事件發生了 !
點兩下 [ handleExternalEvent ]元件進到程式編輯視窗中,輸入 " MessageBox.Show("
有電話來了,有人來訂Pizza "); "。當
[ handleExternalEvent ] 事件被觸發時,使用者就會看到一個MessageBox的視窗。這個動作就好比 有人打電話來跟你叫Pizza了。
都輸入完成後,我們按下建置。運氣好的話~~會看到建置成功。 ^^
加入一個專案,呼叫WWF的外部應用程式!
這邊我們使用 Windows Form 的專案。
這邊我們在Form表單上拉出兩個按鈕,一個是用來啟動工作流程。一個是來呼叫WWF的Event。( 也就是打電話去叫Pizza )
將下列 Workflow Foundation 元件加入參考。
再將剛剛做的專案元件加入參考
加入WWF三個元件參考。
實做介面,來訂定雙方呼叫的合約。
接著建立工作流程執行引擎所需要的相關物件。
在來 點兩下Form上面的 [ 啟動工作流程 ] 按鈕,進入程式編輯視窗後。撰寫以下程式用來啟動工作流程引擎。
在來 點兩下Form上面的[ 呼叫Event ] 按鈕點兩下,進入程式編輯視窗後。撰寫以下程式用來呼叫工作流程中的事件,也就是訂Pizza。
在來要實作介面裡面定義的方法,邊寫下面的程式碼。這是讓Pizza店來主動通知你的方法。
完成測試!
完成了這個範例,我門來測試一下結果吧!!