什么是BPMN、Workflow?
? BPM(Business Process Management)——“通過建模、自動化、管理和優化流程,打破跨部門跨系統業務過程依賴,提高業務效率和效果”。
? Workflow——“全部或者部分由計算機支持或自動處理的業務過程”(工作流管理聯盟WfMC組織對工作流概念的經典定義)
BPM基本內容是管理既定工作的流程,通過服務編排,統一調控各個業務流程,以確保工作在正確的時間被正確的人執行,達到優化整體業務過程的目的。 BPM概念的貫徹執行,需要有標準化的流程定義語言來支撐,使用統一的語言遵循一致的標準描述具體業務過程,這些流程定義描述由專有引擎去驅動執行。這個 引擎就是工作流引擎,它作為BPM的核心發動機,為各個業務流程定義提供解釋、執行和編排,驅動流程“動“起來,讓大家的工作“流”起來,為BPM的應用 提供基本、核心的動力來源。
現實工作中,不可避免的存在跨系統跨業務的情況,而大部分企業在信息化建設過程中是分階段或分部門(子系統)按步實施的,后期實施的基礎可能是前期 實施成果的輸出,在耦合業務實施階段,相同的業務過程可能會在不同的實施階段重用,在進行流程梳理過程中,不同的實施階段所使用的流程描述語言或遵循的標 準會有所不同(服務廠商不同),有的使用WfMC的XPDL,還有些使用BPML、BPEL、WSCI等,這就造成流程管理、業務集成上存在很大的一致 性、局限性,提高了企業應用集成的成本。
BPMN2.0規范的引入
遵循BPMN2.0新規范的工作流產品能很大程度上解決此類問題。BPMN2.0相對于舊的1.0規范以及XPDL、BPML及BPEL等最大的區 別是定義了規范的執行語義和格式,利用標準的圖元去描述真實的業務發生過程,保證相同的流程在不同的流程引擎得到的執行結果一致。BPMN2.0對流程執 行語義定義了三類基本要素,它們是日常業務流程的“三板斧”:
? Activities(活動)——在工作流中所有具備生命周期狀態的都可以稱之為“活動”,如原子級的任務(Task)、流向(Sequence Flow),以及子流程(Sub-Process)等
? Gateways(網關)——顧名思義,所謂“網關”就是用來決定流程流轉指向的,可能會被用作條件分支或聚合,也可以被用作并行執行或基于事件的排它性條件判斷
? Events(事件)——在BPMN2.0執行語義中也是一個非常重要的概念,像啟動、結束、邊界條件以及每個活動的創建、開始、流轉等都是流程事件,利用事件機制,可以通過事件控制器為系統增加輔助功能,如其它業務系統集成、活動預警等
這三類執行語義的定義涵蓋了業務流程常用的Sequence Flow(流程轉向)、Task(任務)、Sub-Process(子流程)、Parallel Gateway(并行執行網關)、ExclusiveGateway(排它型網關)、InclusiveGateway(包容型網關)等常用圖元,如圖 1:
圖1:BPMN2.0三類基本執行語義要素
現實業務所有的業務環節都離不開Activities、Gateways和Events,無論是簡單的條件審批還是復雜的父子流程循環處理,在一個 流程定義描述中,所有的業務環節都離不開Task、Sequence Flow、Exclusive Gateway、Inclusive Gateway(如圖1中右側綠色標記所示元素),其中Task是一個極具威力的元素,它能描述業務過程中所有能發生工時的行為,它包括User Task、Manual Task、Service Task、Script Task等,可以被用來描述人機交互任務、線下操作任務、服務調用、腳本計算任務等常規功能。
User Task:生成人機交互任務,主要被用來描述需要人為在軟件系統中進行諸如任務明細查閱、填寫審批意見等業務行為的操作,流程引擎流轉到此類節點時,系統會自動生成被動觸發任務,須人工響應后才能繼續向下流轉。常用于審批任務的定義。
Manual Task:線下人為操作任務,常用于為了滿足流程圖對實際業務定義的完整性而進行的與流程驅動無關的線下任務,即此類任務不參與實際工作流流轉。常用于諸如物流系統中的裝貨、運輸等任務的描述。
Service Task:服務任務,通常工作流流轉過程中會涉及到與自身系統服務API調用或與外部服務相互調用的情況,此類任務往往由一個具有特定業務服務功能的Java類承擔,與User Task不同,流程引擎流經此節點會自動調用Java類中定義的方法,方法執行完畢自動向下一流程節點流轉。另外,此類任務還可充當“條件路由”的功能對流程流轉可選分支進行自動判斷。常用于業務邏輯API的調用。
Script Task:腳本任務,在流程流轉期間以“腳本”的聲明或語法參與流程變量的計算,目前支持的腳本類型有三種:juel(即JSP EL)、groovy和JavaScript。在Activiti5.9中新增了Shell Task,可以處理系統外部定義的Shell腳本文件,也與Script Task有類似的功能。常用于流程變量的處理。
BPMN2.0流程示例
BPMN2.0為所有業務元素定義了標準的符號,不同的符號代表不同的含義,以OA應用中請假流程為例,使用標準的BPMN2.0圖元定義示意如圖2:
圖2:BPMN2.0請假流程定義
在上述的流程示意圖中,所涉及到的執行語義圖元主要有表1中的8類:
表1:請假流程所用圖元
除了上述Start Event、User Task、Exclusive Gateway、Parallel Gateway、Service Task、End Event標準的BPMN2.0圖元外,上述流程圖還使用了Lane Set(業務部門、人力資源部、考勤系統),分別表示流程活動所涉及到的部門或角色,Lane的概念和jBPM4中“泳道”的概念一樣,都用來表示同一類相似任務的歸屬者。
應用BPMN2.0標準的一個最顯著的特色是,不同階段的人員,無論是需求分析、概要設計、詳細設計或是具體的業務實現,都可在一個流程圖上開展工作,避免業務理解存在偏差。一個系統的實現,需求分析人員可以利用BPMN2.0標準圖元草繪一下搜集到的需求;然后可以拿給設計人員,討論出具體的業務需求進行功能設計,由設計人員在草圖的基礎上逐步細化,并得到需求人員的認同;設計人員又將細化后的流程圖交給開發人員,羅列要實現的功能點,指出流程圖上各活動節點所具備的行為,設計人員與開發人員依據此圖達成共識,進入具體的開發階段;如果后期請假流程發生更改,仍然是在現有流程圖上更改,隨著項目的推進,流程圖也在不斷的演進,但至始至終,項目受眾都使用同一個流程圖交流,保障需求理解的一致性,一定程度上推動了項目的敏捷性。