首先是因為自己目前的項目中需要用到工作流,因為來公司之前就已經選好了:Flowable。這一次也是對自己這兩天學習flowable的記錄。希望也能幫助到有需要的朋友們。
因為之前自己學習的時候在網上找的資料都比較雜,要么這篇文章缺這個,要么那篇文章卻那個,導致自己很多東西不理解,只看到別人貼出的結果圖,卻不知道怎么做出來的。
1. 我用的IDEA創建SpringBoot項目,我的項目版本是:2.2.0.RELEASE,這一步我就不貼出來了,
2. 然后在pom文件中引入jar包:
3. 添加一個數據源,我這里添加的mysql,Flowable需要持久化數據。這個是我的配置文件 application.yml:
4. 啟動項目,可以看到數據庫中創建了很多flowable默認的表,其中有flowable歷史流程相關的(eg: ACT_HI開頭的...),運行中相關的(eg: ACT_RU開頭的....),用戶用戶組信息相關(eg: ACT_ID開頭的...):?
5. 將springboot與flowable整合完成之后,就可以進行工作流的開發了,
flowable建議采用業界標準BPMN2.0的XML來描述需要定義的工作流。所以我們需要在項目中創建一個流程定義,下面這個是我創建的一個xml定義, 截圖不全,源碼中有:
看到這里是不是覺得這個文件很復雜,至少對于之前沒有用過工作流的我來說看著很復雜的,看不懂。然后在晚上一系列搜索,有的說可以用eclipse的自帶插件生成,我用的又是IDEA,
所以找到一篇文章:flowable+tomcat部署flowable項目,在線畫流程圖。原文鏈接:https://www.wandouip.com/t5i212543/
在我們下載安裝好tomcat之后,可以通過:https://github.com/flowable/flowable-engine/releases/download/flowable-6.4.0/flowable-6.4.0.zip? 下載flowable的zip文件
下載下來解壓之后,我們把flowable-6.4.0/wars 下的所有war包復制到tomcat/webapps下面:
復制過去之后,啟動tomcat,上面紅線圈起來的文件夾是tomcat啟動之后自動解壓生成的:
啟動過程可能有點慢,要全部啟動flowable的這幾個服務,看到下面這個就啟動完成了:
啟動成功之后,可以登陸創建流程:http://localhost:8080/flowable-modeler?:
可以開始創建:
這個就是我創建的一個流程:
審批流程:1.創建流程->ApproveRequest->通過審批->執行SuccessService業務->流程到firstApproveTask節點........結束。??ApproveRequest->審批不通過->執行失敗業務->結束
創建完成之后:可以導出BPMN2:
可以打開下載的文件,自動轉成xml格式,是不是很方便,不用自己全部寫:
然后再把這個下載文件拷貝項目中: resources/processes/? 目錄下:
然后可以在Controller文件中創建接口測試這個工作流:
這些是我引入的flowable相關的,接下來創建流程:
userId: 創建人id, days:請假天數 , reason:請假原因。
方法里邊把這些參數傳入map中的key就是流程變量,后面的方法可以取出來使用。holidayRequest: 就是xml文件中<process>標簽的id,就是之前創建的流程定義。
接下來可以在postman中測試一下:
可以看到postman測試成功,數據庫表中有了相應數據。
然后可以創建顯示流程圖的接口:
在postman中傳入流程id測試一下:
大家可以看到查詢出了之前在flowable中創建的流程定義,并且可以看到當前流程在Approverequest這個節點(紅線圈起來的),因為之前只是用戶提交了審批流程。所以現在到了第二個節點。
接著創建審批通過接口:
可以看到接口中的approved,就是流程定義中${approved}變量,畫流程圖的時候可以定義。如果傳入的為true則執行上面的流程邏輯,false則執行下面的。
接著我們再測試一下,可以看到審批通過:
再看一下流程圖:
可以看到同一個流程實例,流程又到了下一個節點。
我們可以查詢一個指定用戶/用戶組的任務列表:
xml中的flowable:candidateGroups = "first" 說明這個任務只有用戶組為first的用戶才可以執行、查詢。
上面可以看到流程已經到了firstApprovedTask節點,說明只有first用戶組才可以查詢或執行。我們再測試一下:
大家可以看到當傳入 managers的時候,是查不出來任務數據的,傳入first的時候就可以查詢出來了。說明是正確的。
Controller中還有一些其他方法,我就沒有全部貼出來:
包括:1. 查詢歷史流程記錄,2.?駁回流程實例 , 3.??終止流程實例 ,4.??掛起流程實例
? ? ? ? ? ?5. 恢復(喚醒)被掛起的流程實例, 6.?判斷傳入流程實例在運行中是否存在
? ? ?7.?判斷流程實例在歷史記錄中是否存在?
其他的功能還在探索,以上就是我學習flowable這兩天的一些收獲。如果某些地方不對的,還請大家指出來,謝謝。