如何設(shè)計(jì)一個(gè)流程引擎(如何設(shè)計(jì)一個(gè)流程引擎系統(tǒng))
流程引擎是低代碼平臺(tái)的核心,它可以幫助我們?nèi)?shí)現(xiàn)非常靈活的流程設(shè)計(jì),極大的助力實(shí)現(xiàn)數(shù)據(jù)流轉(zhuǎn)的的規(guī)范化。那么,如何設(shè)計(jì)一個(gè)流程引擎呢?一起來(lái)看一下吧。
流程引擎是低代碼平臺(tái)的核心,它可以幫助我們?nèi)?shí)現(xiàn)非常靈活的流程設(shè)計(jì),極大的助力實(shí)現(xiàn)數(shù)據(jù)流轉(zhuǎn)的的規(guī)范化。流程引擎是什么?國(guó)內(nèi)外流程引擎有什么區(qū)別?如何設(shè)計(jì)一個(gè)流程引擎?
一、流程引擎
1. 什么是流程引擎
流程引擎,用來(lái)驅(qū)動(dòng)業(yè)務(wù)按照設(shè)定的固定流程去流轉(zhuǎn)的東西,在復(fù)雜多變的業(yè)務(wù)情況下,使用既定的流程能夠大大降低我們?cè)O(shè)計(jì)業(yè)務(wù)的成本,并且保證了我們業(yè)務(wù)執(zhí)行的準(zhǔn)確性。
2. 流程引擎的主要標(biāo)準(zhǔn)
BPMN(Business Process Model And Notation), 業(yè)務(wù)流程模型和符號(hào),是由BPMI(BusinessProcess Management Initiative)開發(fā)的一套標(biāo)準(zhǔn)的業(yè)務(wù)流程建模符號(hào),使用 BPMN 提供的符號(hào)可以創(chuàng)建業(yè)務(wù)流程。即BPMN是用來(lái)建模業(yè)務(wù)流程的標(biāo)準(zhǔn)規(guī)則。
WFMC(Workflow Management Coalition),國(guó)際工作流管理聯(lián)盟。于1993年成立,發(fā)布了一系列的工作流定義、軟件接口的草案文本,是目前世界上公認(rèn)的最具權(quán)威性的工作流標(biāo)準(zhǔn)制定機(jī)構(gòu),得到了廣泛的支持和應(yīng)用。
2002 年10月25日,WFMC發(fā)布了基于XML的流程定義語(yǔ)言1.0版的最終文本(Workflow Process Definition Interface——XML Process Definition Language 文檔編號(hào):WFMC-TC-1025),以及此前發(fā)布的工作流應(yīng)用軟件接口規(guī)范WFMC-TC-1009, WFMC-TC-1013等系列文件,構(gòu)成了工作流定義及系統(tǒng)的設(shè)計(jì)標(biāo)準(zhǔn)。
BPEL(Business Process Execution Language),意為業(yè)務(wù)過(guò)程執(zhí)行語(yǔ)言,是一種基于XML的,用來(lái)描寫業(yè)務(wù)過(guò)程的編程語(yǔ)言,被描寫的業(yè)務(wù)過(guò)程的每個(gè)單一步驟則由Web服務(wù)來(lái)實(shí)現(xiàn)。
2002年IBM、BEA和微軟一起開發(fā)和引入了BPEL作為描寫協(xié)調(diào)Web服務(wù)的語(yǔ)言。這個(gè)描寫的本身也由Web服務(wù)提供,并可以當(dāng)作Web服務(wù)來(lái)使用。通過(guò)BPEL可以描寫一個(gè)參加一個(gè)Web服務(wù)過(guò)程的Web服務(wù)的接口,比如信息需要按照怎樣的順序被輸入,但是BPEL無(wú)法用來(lái)描寫一個(gè)業(yè)務(wù)過(guò)程的調(diào)諧。
3. 國(guó)內(nèi)外流程引擎的區(qū)別
市面上國(guó)外的流程引擎主要有osworkflow、jbpm、Activiti、flowable、camunda,底層架構(gòu)設(shè)計(jì)優(yōu)秀。國(guó)內(nèi)流程引擎,Java領(lǐng)域有廣州天翎、炎黃盈動(dòng)等、深圳奧哲、上海易正等,在設(shè)計(jì)理念和功能實(shí)現(xiàn)上各局特色,并且非常成熟,比如天翎主打的就是擅長(zhǎng)中國(guó)式復(fù)雜業(yè)務(wù)流程處理。
國(guó)內(nèi)外流程引擎有什么區(qū)別呢?主要有三個(gè)方面:
4. 功能應(yīng)用需求
國(guó)外流程引擎功能上不能滿足中國(guó)特色的流程應(yīng)用需求,比如:抄送、會(huì)簽、加簽、傳閱、跳轉(zhuǎn)、任意流、退回、取回、撤銷、一人多部門等需求,這些需求可以通過(guò)擴(kuò)展開發(fā)實(shí)現(xiàn),但是開發(fā)周期較長(zhǎng),風(fēng)險(xiǎn)較大。
5. 組織模型需求
流程引擎自帶簡(jiǎn)單的組織用戶表,比如camunda流程引擎自帶了用戶表(act_id_user)、用戶群組表(act_id_group)、用戶群組關(guān)聯(lián)表(act_id_membership)這幾張表,功能十分簡(jiǎn)單,基本上滿足不了國(guó)內(nèi)企業(yè)級(jí)應(yīng)用需求,需要單獨(dú)涉及組織機(jī)構(gòu)表,然后跟流程引擎進(jìn)行集成。比如最常見需求——多組織流程架構(gòu)支持,集團(tuán)總部、子公司多級(jí)組織架構(gòu),國(guó)內(nèi)組織架構(gòu)涉及到有組織、部門、用戶、崗位、職務(wù)多個(gè)要素,這些要素間有復(fù)雜邏輯關(guān)系。
6. 國(guó)外流程引擎具有局限性
國(guó)外流程引擎以嵌入式形式存在,核心考量是簡(jiǎn)化程序開發(fā),所以經(jīng)常是作為開發(fā)工具IDE的插件形式(現(xiàn)在也做了些調(diào)整,提供web方式定義流程,單功能比較弱),比如財(cái)務(wù)軟件中嵌入一個(gè)流程,最著名的是Activiti和flowable(同一個(gè)人開發(fā))。一些國(guó)內(nèi)低代碼平臺(tái)也是基于Activiti去魔改的,有一定局限性,比如宏天、紅迅,所以不可避免受到很多限制。
二、怎樣設(shè)計(jì)流程引擎
流程邏輯執(zhí)行:
1. 狀態(tài)機(jī)原理
狀態(tài)機(jī)(State Machine),定義事物狀態(tài)以及這些狀態(tài)之間轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。一般可以分為有限狀態(tài)機(jī)、并發(fā)狀態(tài)機(jī)、分層狀態(tài)機(jī)等。
沒(méi)有流程引擎前的弱版流程引擎,必須要有狀態(tài),狀態(tài)即節(jié)點(diǎn),狀態(tài)機(jī)= 流程 狀態(tài)。
2. Xml轉(zhuǎn)換Object
Xml ,一種數(shù)據(jù)格式,Object ,對(duì)象。做流程圖的項(xiàng)目時(shí),新的流程定義為Xml的,需要對(duì)Xml與Java Object進(jìn)行互轉(zhuǎn)。
流程描述(XML)
3. 流程運(yùn)行狀態(tài)
流程狀態(tài)是對(duì)于一個(gè)對(duì)象在流程的不同階段進(jìn)行概括性、結(jié)果性、引導(dǎo)性的描述。
(流程運(yùn)行時(shí)類圖)
- WFRunner——工作流處理的對(duì)外接口,需要用到工作流的調(diào)用均通過(guò)此對(duì)象完成;
- StateMachine——工作流狀態(tài)機(jī)的實(shí)現(xiàn),是整個(gè)工作流實(shí)現(xiàn)系統(tǒng)的核心,具體說(shuō)明參見API文檔;
- ActorRT——當(dāng)前處理者運(yùn)行時(shí)狀態(tài);
- ActorHIS——?dú)v史處理者處理歷史紀(jì)錄;
- FlowStateRT——流程當(dāng)前狀態(tài),比如:掛起、運(yùn)行等;
- NodeRT——當(dāng)前節(jié)點(diǎn)運(yùn)行時(shí)狀態(tài);一個(gè)Node可以對(duì)應(yīng)多個(gè)Actor;
- RelationHIS——流程路徑處理歷史紀(jì)錄;
其他幾個(gè)類均為實(shí)現(xiàn)WorkFlow運(yùn)行所需要的輔助功能類。
三、流程引擎的效果和應(yīng)用
流程引擎的應(yīng)用十分廣泛,本文將展示部分常見的流程引擎應(yīng)用場(chǎng)景。
常見效果展示,包括后臺(tái)設(shè)計(jì)、前臺(tái)運(yùn)行、流程干預(yù)、流程報(bào)表統(tǒng)計(jì)等。
(流程后臺(tái)設(shè)計(jì)1—圖形)
(流程后臺(tái)設(shè)計(jì)2-源代碼)
(流程后臺(tái)設(shè)計(jì)3-子流程)
(流程企業(yè)域展示——流程干預(yù))
(流程后臺(tái)設(shè)計(jì)4-報(bào)表設(shè)計(jì))
(流程前臺(tái)運(yùn)行)
流程引擎也可用于去整合多個(gè)應(yīng)用系統(tǒng)。
1)集成第三方系統(tǒng)
通過(guò)RESTFUL API與第三方業(yè)務(wù)系統(tǒng)集成、業(yè)務(wù)數(shù)據(jù)保存在第三方系統(tǒng),流程數(shù)據(jù)保存在流程引擎上。
2)流程數(shù)據(jù)分析
流程引擎可以幫助用戶從多維度、多時(shí)間、多角度分析流程數(shù)據(jù)。
本文由 @周志軍Jarod 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來(lái)自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。