2012年1月11日 星期三

BPM11g PS4FP新功能介紹 -- 參數式角色

介紹一個重要BPM11g PS4FP的新功能 - 參數式角色 (Parametric Role)。

話說,在BPM 的世界裡,大家都很習慣使用角色來去定義參與特定工作的人員,因此,假設有一個【IT障礙處理】流程,其中至少會有兩種角色 - 一個是【一般使用者】 (也就是會申告發生障礙的人)、另外一個就是【IT人員】 (處理障礙的人員)。若使用BPMN進行設計時,設計人員會將設計兩個水道(Swing Lane)放置不同的人工作業。

然而,實際情形往往不是那麼美好的,實務上,客戶有可能會告訴你:【沒錯啊,我們是有這兩種角色,但是因為我們的公司有分台北與高雄兩地,IT人員也分在這兩個地方,所以你的指定工作人員的時候,必需要根據申告的人員所在位置來指派這地點裡面的角色人員。】。當沒有參數化角色功能的時候,你可能就需要在設計的時候將【IT人員】這樣的角色切割成為【台北IT人員】與【高雄IT人員】,另外增加水道與判斷條件來實作流程。這種做法會讓流程的設計看起來更加不直覺,同時也更加難以維護。

參數式角色的設計在BPM中就是用以解決這樣的問題。做法就是在使用者除了原本LDAP內的基本資訊之外,根據需求增加【擴充的使用者特性】,然後在流程指定角色的時候,可以另外選定【參數式角色】 - 而此【參數式角色】可根據這些【擴充的使用者特性】增加某些規則來限制角色的人員。舉例來說,剛才的【IT障礙處理】流程,我們就可以增加一個【LOCATION】的【擴充的使用者特性】來記錄每一位員工的所在位置 (例如:TAIPEI或KAOHSIUNG),另外增加一個【Local Person】的【參數式角色】,並指定一個規則是被指定的使用者,其【LOCATION】特性需要符合申告障礙人員所在的位置。

來看看這在BPM 11g中怎麼達成:

首先,使用管理者的角色(如:weblogic)登入BPM Workspace,並選擇右上角的管理功能:


請注意左方功能區有兩個這次會用到的功能:【參數式角色】與【擴充的使用者特性】。請先點選【擴充的使用者特性】:


如上圖所示,我新建了一個叫做【LOCATION】的字串特性,其可能的值只有【TAIPEI】與【KAOHSIUNG】兩種。請注意,目前Oracle BPM只支援字串與數字兩種種類的特性,而字串必須是事前被定義好的幾種可能的值。

畫面下方【對應特性】部分,則是讓管理人員指定系統所有使用者相關特性資料的地方,如上圖所示,我指定了tim、user1與user2三個使用者資料,其LOCATION特性分別為TAIPEI、TAIPEI與KAOHSIUNG。特別注意的是,你不需要為系統中所有的人員指定所有的【擴充的使用者特性】,只需要指定有需要的即可。

這次,點選【參數式角色】功能:


你將會在畫面中間【參數式角色】部分新增、修改或刪除一個你所欲設定的角色,如上圖所示,我已設計了一個【Local Person】的參數角色,此角色的詳細資訊列是出現在上圖所示的右方畫面。

在這裡我設計了兩個字串參數 - 【roleName】與【location】,分別是用來帶入流程中被指派的角色以及流程中所指定的所在位置。而下方的條件部分,我指定了:

  1. 受權者:【應用程式角色】 --> 【OracleBPMProceessRolesApp】 --> 【$roleName】,特別注意$roleName代表的是,被授權的角色是透過roleName這個參數由流程實例之中帶入的。
  2. 【LOCATION】 【等於】 【$location】,代表了另外一個條件是,符合該角色的人員在   【LOCATION】這個擴充的使用者特性,需要與location這個參數傳入的值一致。

至此,我們已經完成了server端的環境準備,接下來進行流程的設計:

首先,假設你已經依照使用者需求完成了上述的流程,如下圖所示:


此流程之中會有一個流程變數 -- location,記錄障礙所發生的地點,此location變數會傳遞進入【IT人員處理】的人工作業。

接下來編輯【IT人員處理】此Human Task,並點選其Assignment:


在Participant List之中,下拉選單有一個新的【Parametric Role】選項,在你選擇後,可以按下右方放大鏡按鍵選擇要執行的參數式角色,此處我們選擇之前所設定好的【Local Person】。選擇完成後下方會自動帶出此參數式角色所需傳遞的參數 -- 【roleName】與【location】。我們分別為其指定:

  • roleName:使用bpm:getPerformer(),抓出此人工作業所位於的水道角色資訊。
  • location:使用/task:task/task:payload/task:location,指定由流程傳入的location變數。

接下來,你就可以將此流程deploy上server試試看囉,你將可以觀察到,流程在執行過程中,被指定的IT角色人員將是特定符合location位置所在的使用者。

Enjoy!