activiti工作流引擎入门教程
activiti簡(jiǎn)介
Activiti項(xiàng)目是一項(xiàng)新的基于Apache許可的開(kāi)源BPM平臺(tái),從基礎(chǔ)開(kāi)始構(gòu)建,旨在提供支持新的BPMN 2.0標(biāo)準(zhǔn)。
Activiti是一種輕量級(jí),可嵌入的BPM引擎,而且還設(shè)計(jì)適用于可擴(kuò)展的云架構(gòu)。 Activiti將提供寬松的Apache許可2.0,同時(shí)促進(jìn)Activiti BPM引擎和BPMN 2.0的匹配。
activiti的7大馬車
1.RepositoryService:提供一系列管理流程部署和流程定義的API。
2.RuntimeService:在流程運(yùn)行時(shí)對(duì)流程實(shí)例進(jìn)行管理與控制。
3.TaskService:對(duì)流程任務(wù)進(jìn)行管理,例如任務(wù)提醒、任務(wù)完成和創(chuàng)建任務(wù)等。
4.IdentityService:提供對(duì)流程角色數(shù)據(jù)進(jìn)行管理的API,這些角色數(shù)據(jù)包括用戶組、用戶及它們之間的關(guān)系。
5.ManagementService:提供對(duì)流程引擎進(jìn)行管理和維護(hù)的服務(wù)。
6.HistoryService:對(duì)流程的歷史數(shù)據(jù)進(jìn)行操作,包括查詢、刪除這些歷史數(shù)據(jù)。
7.FormService:表單服務(wù)。
activiti應(yīng)用場(chǎng)景
多人協(xié)作的(或者需要?jiǎng)討B(tài)變動(dòng))的業(yè)務(wù)流程場(chǎng)景。
正文
本文將通過(guò)搭建一個(gè)簡(jiǎn)單的請(qǐng)假流程系統(tǒng)來(lái)進(jìn)行講解。
如你所知,activiti工作流引擎多運(yùn)用于流程性很強(qiáng)的業(yè)務(wù)系統(tǒng)。所以運(yùn)用的第一步是創(chuàng)建.bpmn文件(我稱之為activiti認(rèn)識(shí)的流程圖)
?activiti流程圖
?.bpmn文件我們可以通過(guò)編輯軟件打開(kāi)
?,bpmn文件
可以簡(jiǎn)單的認(rèn)為就是一個(gè)xml文件,activiti去解析這個(gè)文件,了解我們到底想干什么事。
畫(huà)完流程圖之后,就是我上面提到的activiti七架馬車。它們就是activiti對(duì)外提供的接口。通過(guò)它們就可以很方便的操作到activiti生產(chǎn)的數(shù)據(jù),以及操作它在適當(dāng)?shù)墓?jié)點(diǎn)做想讓它做的事。
我這邊是通過(guò)springboot搭建。所以需要把那七大馬車注入(也不一定要全部注入),交給spring管理。這樣就可以隨便用了。
以下是注入馬車代碼
當(dāng)然我這邊并沒(méi)有注入所有的馬車,用到的是時(shí)候再加都是可以的。這兒也隨帶對(duì)activiti做了基本的配置。
配置了數(shù)據(jù)源,自動(dòng)建表,是否激活A(yù)syncExecutor。剛剛介紹了其他馬車,忘了activiti 最重要的ProcessEngine(流程引擎對(duì)象),馬車都是由它管理。
配置好這些,運(yùn)行代碼就會(huì)產(chǎn)生activiti的內(nèi)置表。
activiti內(nèi)置表
?上圖已a(bǔ)ct開(kāi)頭的都是,總共28張。每張表含義以及表里的字段含義,我這里就不在累贅,大家網(wǎng)上都能找到資料。我就這點(diǎn)一哈我認(rèn)為比較重要的表
1.act_ru_execution 執(zhí)行對(duì)象表
2.act_ru_task 用戶任務(wù)表
3.act_hi_actinst 活動(dòng)節(jié)點(diǎn)歷史表
4.act_hi_procinst 流程實(shí)例歷史表
5.act_hi_taskinst 歷史任務(wù)表
下面就說(shuō)怎么去啟動(dòng)一個(gè)流程
到此,入門就算結(jié)束了。
搭建的注意點(diǎn)
我搭建時(shí)考慮的問(wèn)題:
1.activiti流程怎么和自己的業(yè)務(wù)表,如請(qǐng)假詳細(xì)信息表,審批信息表關(guān)聯(lián)起來(lái)?
2.activiti如何知道那些任務(wù)該由誰(shuí)處理?
3.駁回,撤銷(目前未搞撤銷功能,文章還會(huì)持續(xù)更新)怎么實(shí)現(xiàn)?
解決方式 :
1.問(wèn)題一,網(wǎng)上說(shuō)的可以把流程與業(yè)務(wù)通過(guò)activiti的businesss_key關(guān)聯(lián)起來(lái)。后來(lái)我發(fā)現(xiàn)好像這個(gè)值一次流程只能設(shè)置一次(也有可能是我操作不對(duì)),最終我選擇了在業(yè)務(wù)表存儲(chǔ)流程實(shí)例的id來(lái)進(jìn)行關(guān)聯(lián)。
問(wèn)題二:指定任務(wù)候選人方式解決。指定候選人的時(shí)候,我一開(kāi)始采用監(jiān)聽(tīng)的方式,因?yàn)槲疫@邊設(shè)計(jì)的是某個(gè)角色下的人都會(huì)有某個(gè)流程節(jié)點(diǎn)的審批權(quán)限,通過(guò)監(jiān)聽(tīng)的方式,我一開(kāi)始又直接選擇監(jiān)聽(tīng)類,具體操作如下:
直接選擇監(jiān)聽(tīng)類
?發(fā)現(xiàn)這種方式不能獲取到spring管理的bean。
后面嘗試使用expression。這種方式可以獲取到bean。由于我要操作數(shù)據(jù)庫(kù)查詢數(shù)據(jù),所以注入了JpaRepository。然后神奇的爆了序列化問(wèn)題。
最后我選擇了傳參的方式指定候選人。
變量指定候選人
3.駁回:使用排他網(wǎng)關(guān)實(shí)現(xiàn),只需要指定通過(guò)條件
流程線指定條件
由于代碼量還是有點(diǎn)多,后面我code review之后(現(xiàn)在寫(xiě)的還是有點(diǎn)糙)會(huì)放到github上。有興趣的朋友可以持續(xù)關(guān)注。
系統(tǒng)展示
系統(tǒng)用戶角色表設(shè)計(jì)
?系統(tǒng)角色劃分
?用戶的信息
?用戶與角色關(guān)系
?當(dāng)然大家從名字也能大致猜出對(duì)應(yīng)角色。
?系統(tǒng)登錄頁(yè)
?普通員工登錄界面
?發(fā)布申請(qǐng)
?填寫(xiě)之后
?查看流程
?通過(guò)上文流程圖,可以知道請(qǐng)假不大于五天都是部門經(jīng)理審批。
上文的黑色,表示已經(jīng)提交到經(jīng)理審核,但是經(jīng)理還未處理。
申請(qǐng)6天
?大于五天,總監(jiān)審批
?部門經(jīng)理yshManager審批
?部門經(jīng)理YshManager2審批
同一個(gè)任務(wù),身為部門經(jīng)理的人都能進(jìn)行審批。說(shuō)明傳參的方式制定審核人事沒(méi)有問(wèn)題的。
部門經(jīng)理yshManager2審批之后的流程
我這邊審核任務(wù)設(shè)置的是一個(gè)人審批過(guò)后,就算審批通過(guò),不需要所有人審批通過(guò)。當(dāng)時(shí)一個(gè)部門經(jīng)理審批過(guò)后,其他部門經(jīng)理就不能審核這個(gè)任務(wù),同時(shí)我這邊也設(shè)計(jì)的是無(wú)法再進(jìn)行查看這個(gè)請(qǐng)假任務(wù)具體情況。
人事審核同理。
人事順利審批
?一次性走完流程的流程進(jìn)度
?審批拒絕
我就不挨著截圖了,直接展示一個(gè)多次遭拒絕的情況截圖。
image.png
?這兒就是多次審批遭拒,然后重新申請(qǐng)的情況。這兒就會(huì)有一個(gè)問(wèn)題,我開(kāi)始申請(qǐng)請(qǐng)假是6天。被總監(jiān)拒絕。我改為5天,被人力資源拒絕。后面改3天,審批通過(guò)。由于我申請(qǐng)審批一直是操作的同一條申請(qǐng)請(qǐng)假數(shù)據(jù)。導(dǎo)致前面的數(shù)據(jù)記錄丟失。(bug后續(xù)更新解決)
結(jié)語(yǔ)
我對(duì)activiti也是剛接觸的小白。如有不正確之處,請(qǐng)不吝賜教。后面還會(huì)持續(xù)更新。有興趣的朋友可以持續(xù)關(guān)注。
作者:帥哥哥寫(xiě)代碼
鏈接:https://www.jianshu.com/p/972613558ba1
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的activiti工作流引擎入门教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Activiti最全入门教程
- 下一篇: Activiti工作流引擎使用详解(一)