2011年3月29日 星期二

[Oracle BPM/SOA 實務] 隨意路由(Ad-hoc Routing) 的使用

最近剛好被問到這個問題,挖掘了一下發現BPM 11g的Human Workflow還有一些新功能能夠動態地讓使用者在人工關卡中邀請其他使用者審核,這樣的功能將讓Oracle BPM Suite在台灣這種強調【彈性】人工作業的環境能夠更加實用。

先來簡單看一下需求:
使用者需要在每一個人工作業關卡之中,根據需求與判斷決定是不是要在此關卡中拉進其他的人員來參與次關卡之簽核,拉進來可為一至多位,需支援多人的會簽與串簽的情境。
我們先簡單設計一個流程,其中只包含一個簡單的人工作業關卡與Exclusive Gateway。另外,也請為此關卡設計一個簡單的UI,如果感到陌生的話,請參考這裡的做法。


這裡的重點只有在其中Human Task的設定,接著在你的composite中點選你所開發的Human Task,請將你的Task Outcome給訂兩種結果:APPROVE與REJECT。

接下來重點在Task Assignment的設定,點選了Assignment Tab,你會看到類似下面的畫面:


Double-click 中間有"人像"的那個區域,這裡指定了此人工作業參與的人員設定,你可以看到這裡我直接指定此做頁是由 "tim" 使用者處理。


接下來是主要的部分了,我們要給予 "tim" 使用者在接到工作時,能夠將此工作分給其他的人員的權利。做法很簡單,你只要在同個視窗之中,將 Advanced 區域展開,並且點選 "Allow this participant to invite other participants" 就可以了。


按下 "OK" 回到上個畫面,接下來我們需要指定另一個規則:當有許多使用者被動態指定審核後,若有其中一個人REJECT了,其他平行被指定但尚未處理的工作將被自動取消。要做到這樣的需求,也是透過一個簡單的設定達成。

中央畫面右上角的 "Task will go from starting to final participant" 旁邊有支筆的圖案,請點選他,打開另一個設定視窗。


注意我們勾選了 "Complete task when a participant chooses: REJECT" 與 "Enable early completion in parallel subtasks",畫面中間那一支筆的圖案則是讓你選擇這種自動提前完成的作業是針對哪一種Outcome,這裡我們是針對有人REJECT的時候才處理,因此選擇REJECT。

接下來你就可以部署並測試你的流程了!

當你啟動一個流程instance後,使用 "tim" 使用者登入BPM Workspace,你會看到已經有個人工單指派給你。


當 "tim" 需要指定一個隨意路由時,他只需要選擇 "動作" --> "隨意路由",並可以看到一個對話框出現。



這對話框可以讓使用者決定他是要指定單一使用者審核還是多使用者,串簽方式還是會簽:

  • 單一核准者:就指定一個人啦!
  • 群組表決:會簽
  • 單一核准者鏈結:串簽
所有的使用者資訊可以透過下方的區域進行搜尋與指定,下圖示一個簡單的範例指定 "david" 與 "leon" 兩個使用者串簽。


至於會簽,Oracle BPM Suite其實是透過了功能更強的群組投票的方式來達成,在指定群組表決時,可以設定預設結果的百分比,例如,我們需要全部被指定人都ACCEPT才代表ACCEPT時,請將預設結果設定為 "核准"、共識百分比設定為 "100";若你需要的是五個人其中四個ACCEPT即可,你就需要設定共識百分比為 "80"。


請注意,這類的隨意路由在所有被指定使用者完成之後,系統就會根據結果直接完成此人工作業,並不會回到啟動隨意路由的人身上。如果你需要該啟動作做最後的同意,請他記得將自己加入路由的最後吧!

至於怎麼看到我送出的隨意路由的執行狀況,我們以一個會簽的流程為例,"tim" 在送出會簽邀請給 "david" 和 "leon" 之後,你會發現, "tim"本身已經沒有被指派的工作了,要查詢他所送出的工作你需要將畫面中央的 "指派對象" 從 "我和群組" 改選為 "上一個",你會發現,原來的工作現在另外產生了兩個子工作,分別被指派給 "david" 與 "leon" 兩人,你可以點選任意一個工作,並將工作內容中的 "歷史紀錄" 部分展開,你可以看到如下圖畫面所示的工作歷史。



另一種情境,使用者可能需要其他人給針對這件事情給一些意見,但是還是由自己本人做決定,在這樣的需求下,你可以使用 "動作" --> "要求資訊"。 這樣,被你所選定的使用者就只能提供一些註解或附件資訊,完成後工作還是回到原先使用者身上做決定。

自己試試看吧! Enjoy it!

沒有留言: