再談流程引擎參與人(10.6)
對於工作流引擎,多年前就已經談過很多文章,包括PaaS平臺裡面的流程引擎。今天只談下對於流程引擎中的模板配置,角色和參與人,使用者組,崗位等之間的核心關係。
角色和使用者組
對於國內的流程引擎設定比較靈活,一般既可以配置角色,也可以配置部門和崗位,但是對於標準的工作流配置一般都是設定角色,並在角色中配置參與人。那麼首先就要搞清楚角色和使用者組之間的關係。對於角色往往是一個泛指的概念,而對於使用者組則是一個關聯到具體組織或工作組後的特指概念,即角色*組織或工作組,最終才會生成相對應的使用者組。
1.專案經理,就是一個角色的概念
平臺產品線+SOA專案這是一個層級結構,我們有時候會用到工作組這個概念,工作組可以是一個分級的多層結構,但是往往最多一般分三層,即產品大類,產品線,專案。某個產品線下具體哪個專案的專案經理,就是一個使用者組。為何要這樣設定?即我們在進行流程模板設定的時候,參與人只會配置到具體的角色,而實際流程啟動後才會動態去計算出具體對應到哪個使用者組計算出具體的人。
當前一個文件申請提交流程,裡面涉及到專案經理審批,QA審批,產品經理審批等。但是對於不同的文件可能涉及到不同的流程,這個時候有兩種方法,一個是仍然沿用工作組的設定,即將工作組和流程模板進行對映,在選擇了工作組資訊後來確定具體呼叫兩個流程模板。即我們常說的,即使是同一個型別的表單或申請單,由於型別或工作組不同,在啟動的時候也可以呼叫不同的流程模板。
在表單申請的時候,申請單必須選擇工作組資訊,比如上面我們選擇 平臺產品線/SOA專案
選擇完成後提交專案,啟動流程例項後流轉到專案經理審批。我們在設定流程模板的時候,參與人設定的是專案經理,這個時候就需要基於工作組選擇來交叉計算對應的使用者組 = 平臺產品線SOA專案專案經理,當計算到具體的使用者組後,這個使用者組裡面往往就只有特定的人,而不是一堆的符合專案經理角色的都能夠收到待辦和處理。
這個是流程引擎在啟動和計算人的時候最常見的方式,可以看到,在這種方式下必須要實現定義清楚角色,同時對使用者組進行動態計算和生成,並將收集到的使用者組成員資訊匯入到系統中。
從角色到組織結構
在流程審批的時候,最常見的業務場景就是,當前部門的領導審批,當前部門的管理經理審批,當前部門的主管副總審批,上一級部門的領導審批,同級部門的領導會籤等。這個場景是什麼意思?即在流程審批的時候,我們往往會涉及到部門和組織的層級機構去找人,而不是單純的通過角色和使用者組去找人。
比如我們有一個角色叫部門經理,按傳統的做法可能是每一個部門的部門經理都需要單獨建立一個使用者組,並把參與人放進去。但是如果當前有完整的組織結構樹,這個工作則不需要,即張三這個人,基於組織結構樹一定是能夠找到對應的部門經理,對應的測試經理,對應的部門主管副總的,只要組織結構和崗位設定正確,這個資訊就能夠完全查詢和精確定位到。
這就回到了我們前面的問題,在流程模板設定的時候,我們可以設定崗位做為流程活動節點的參與人,比如崗位就是部門經理。然後在參與人計算規則那個地方來設定,具體是找同級部門經理,還是找上級部門經理。對於找同級容易理解,對於找上級本身又有規則,比如我們前面說的有上級部門經理的概念,也有主管副總的概念。
那麼如果一個企業有二級,三級多級部門的情況下,如何去找上級主管副總。你從三級查詢到二級的時候可能找不到主管副總,但是從二級查詢到一級的時候就能夠查到主管副總的。因此找上級的過程往往是一個逐層朝上面查詢的過程,直到找到為止。
在這種時候你就有兩種做法,在流程參與人那設定部門經理,但是裡面不放人,根據組織結構和崗位樹去找部門經理。還有一種做法就是將所有的部門經理都配置進來,但是根據當前部門部門經理,上一部門部門經理等規則去精確計算出對應的人。這兩種方法本身都沒有問題。但是第2種折中方法更好些,不用完全依賴於組織機構和崗位設定。即只會用到組織結構和層級關係,而不會用到崗位人員資訊。
動態規則計算參與人
如果上面的方式都無法處理自動計算出對應的參與人,那麼就需要自己寫規則和程式來動態計算參與人,即流程引擎簡化為僅僅是一個狀態流轉機,但是狀態流轉後具體對應的處理人流程引擎不計算,而是需要呼叫你寫好的計算規則或介面去動態計算。
在流程模板設定中經常會遇到這種複雜情況,比如需要由某個單據分類對應的專案經理進行審批,需要有申請人對應的系統主管專案經理審批等,這些我們都可以自己寫規則去計算對應的參與人。而要實現這種計算,重要的就是需要在業務系統裡面自己去維護大量的這種對應關係和對映表,這些對應表往往是在組織機構,崗位角色中無法拿到的對映資訊。
動態計算參與人,雖然靈活,但是由於進行了硬編碼,會導致後續本身參與人的維護更加麻煩,也會導致由於審批規則出現變化的時候都不能簡單的通過配置修改,而需要修改程式碼,那麼這種程式碼仍然是很大的。
基於上面說的,可以看到當前國內的各種工作流引擎往往就具備了滿足上面各種場景的將需求。即流程活動節點,既可以選擇角色,也可以選擇崗位,還可以選擇具體的人。同時參與人節點配置還可以配置同級關係,還是上級關係等,這些都極大的方便了流程模板的配置。
注意在當前系統實現過程中,往往將系統功能角色和流程角色這兩個概念分開,即專門配置流程角色供流程引擎使用。在流程角色中直接配置人,也可以是在流程角色中不配置人,而是在使用者組中配置具體的人。這兩種方式都可以。但是對於第一種方式,一定存在一種動態精確計算規則,否則就會導致待辦資訊分發到多個人的情況。