2011年2月22日 星期二

[BPMN 2.0] 例外狀況處理

這一篇我們來看看在BPMN中怎麼處理例外狀況。

有一個假定的場景:我們設計一個自動處理的流程,在一般情形時都透過系統自動將資料處理並轉發至Message Queue之中,但是在某些情況之下,當自動發送訊息無法正常處理時,系統會發一筆人工作業單給特定例外狀況處理人員,此人員必須在30分鐘之內手動處理,不然系統會通知其管理人員。

這算是一個簡單整合系統自動流程與人工作業流程的範例,我們先看一下BPMN怎麼畫出這樣的流程:


圖中有三個水道,第一個水道代表了系統自動執行的流程,第二與第三水道分別代表了例外狀況處理人員以及管理人員的角色。我們可以在 "Send Msg" Service Activity 與 "Handle Exception" User Task上面看到了兩個我們用來處理特定事件(Event)的圖示,產生的方式是你可以從Component Palette --> Events --> Catch Events中分別拖拉出 "Error" 與 "Timer" 兩個Event放到Activity之上。

長相像是閃電的 "Catch Error" Event 顧名思義就是用來抓取該 Activity 錯誤發生之時的執行路徑,Double-Click該Event你可以看到如下圖所示的對話框:


在此對話框之中,你可以選擇其處理哪些種類的例外,概念和一般程式語言的catch很像,可選擇抓取特定的某種Exception,或是所有的Business與System的Exception。在我們設計的例子中,由於此Activity是屬於系統自動處理步驟,我們設計抓取其所發生的所有系統例外。

接下來Double-click長相像是時鐘的Timer Event,其對話框如下所示:



當Timer Event被放置在某一Activity之上時,代表了此Activity每當特定時間或每隔特定時間會驅動一個事件執行,我們選擇了 "Time Cycle" 並指定 Cycle Time 為 30分鐘,因此,當流程在此Activity上停留超過30分鐘之後,此事件會被驅動。

特別注意的是,你可以根據需求決定需不需勾選 "Interrupting Event",勾選此選項代表當事件被驅動之後,此Activity會被打斷,直接將流程進入Event驅動執行的流程;但若是不勾選的話,事件仍然會被驅動,只是該流程可由該Activity繼續向下執行。

當然,搭配上subprocess之後,你可以用此處理一連串的 Activity :


如圖,你可以針對Step1至Step3處理超過時間之時,執行StepN。

2011年2月18日 星期五

[Oracle BPM/SOA 實務] 客製化BPM前端應用程式

實務上就台灣客戶的使用習慣而言,幾乎都會要求不管使用任何的BPM軟體作為流程運作平台,前端的應用程式都需要量身打造,以整合進客戶所慣用的應用程式。個人認為,這樣的要求算是合情合理,企業內部的BPM規劃本身就應該走向共用單一平台的設計模式,也就是,理想狀態下可以讓多種的應用系統(無論是.NET或Java或C++所開發的),有需要內部流程管理,或跨系統流程應用串接時,都可以將流程部署至此平台,前端應用系統可以維持原先介面的操作性,只是在適當時機透過API或特定介面與BPM進行起案、取件...等等的動作即可。

BPM平台與外界系統架構簡單來看是這個樣子:

注意,Front-end有時也是back-end,反之亦然...

2011年2月17日 星期四

[BPMN 2.0] Process平行執行的應用

BPMN 本身支援Parallel Gateway讓開發人員能夠平行處理多個Activity,你可以拉出如下圖所示的Process同步處理MyTask1與MyTask2:


這樣的表示方式很簡單,但是我們有時候會遇到另外一個需求,要怎麼在run-time動態產生多條平行執行的流程?照上圖的作法,必須在design time就設計好執行路徑的數量。

和Loop的情形一樣,我們還是可以使用subprocess的方式來處理。

使用subprocess activity,我們可以簡單拉出下示流程:


Double-click subprocess activity,編輯對話框中的Loop Characteristics Tab


平行執行的時候,記得在Loop Characteristics中選擇 "MultiInstance",並且不要勾選最下方的 "Is Sequential" 選項。

此時的 Loop Cardinality 代表你需要動態幾個平行的instance處理,我在此放入了一個變數parallelCount,你可以自行設計如何取得此數值。

2011年2月11日 星期五

[Oracle BPM/SOA 實務] Muli-Tier 審核流程的設計

來看看在人工簽核作業中常常遇到的情境吧,我們該怎麼設計一個需要兩階層簽核的流程:


假設有上圖所示的組織架構,Tim與Leon的直屬長官是Kenneth;而Kenneth的直屬長官是Gary,由Tim所完成的工作在流程中需要由上面兩層的長官審核才能繼續往下走。首先,你的BPM使用者要有這樣的組織架構在內,你可以參考這篇【如何增加使用者至BPM Server中】先把你所需要的使用者建立起來。

但是,明眼的你應該會發現,在這裡LDAP tree中的使用者是看不出階層關係的,我們該怎麼指定上圖那樣的關係哩?

2011年2月7日 星期一

隨筆

寫了幾篇技術文章才知道寫這些東西多花時間...  (汗..)

有幾個想法和大家分享:

  • 這是個不負責任的部落格:我所發表的所有技術文章只代表我個人的經驗與產品使用方式,一切的一切都請以原廠技術文件為主 (即使可能會有錯...)
  • 這是個文筆不好的部落格:自論文以後,我應該沒有寫過那麼多字的文章了吧... 請見諒所有的文字不通暢與用語粗俗。
  • 這是個沒啥組織的部落格:各文章與相關產品的發表順序並不一定,基本上都是小弟想到甚麼就寫甚麼,也有可能是剛好測試或專案用到的功能記錄,若是從頭開始學習的人,建議你可以先參考小弟的"第一個"系列,並配合其他的文件或書籍服用。
  • 這是個期待溝通的部落格:有任何的疑問與幹譙或是希望能看到的文章,請歡迎留言或透過我的email:yenting.wu@gmail.com反應。
感恩!

[Oracle SOA 應用] 呼叫外部Java類別

開春第一砲,來看看我們在流程中怎麼呼叫一個已經寫好的Java Class。

我就不step-by-step的描述每一個步驟,請你自己新增一個新的SOA專案,並且產生一個Empty Composite。

由於呼叫Java元件屬於系統流程整合的部分,因此,我們使用BPEL流程做為整合的範例。請在Component Palette中托放一個BPEL Process進入Composite中央。再彈出的對話視窗中指定此流程的採用BPEL 1.1或2.0、名稱、同步與非同步、Service名以及是否對外提供SOAP服務:


當回到你的composite editor,你可以看到現在你有個BPEL的Process,並且有個對外的service介面: