工作流是現在信息化建設過程中經常用於解決業務流程管理問題的工具,因此工作流是一個比較專業化的話題。當前流行的工作流主要有JBPM和activiti。本系列學習實踐的目的就是掌握activiti的部署、開發和應用。
---重要說明:本系列學習實踐都是基於慕課視頻學習的自己記錄
目錄
1、工作流
什麼是工作流呢?採集百度百科的說法:工作流(Workflow),指“業務過程的部分或整體在計算機應用環境下的自動化”。是對工作流程及其各操作步驟之間業務規則的抽象、概括描述。在計算機中,工作流屬於計算機支持的協同工作(CSCW)的一部分。後者是普遍地研究一個羣體如何在計算機的幫助下實現協同工作的。工作流主要解決的主要問題是:爲了實現某個業務目標,利用計算機在多個參與者之間按某種預定規則自動傳遞文檔、信息或者任務。
從上面我們關注幾個重點:
- 業務規則的抽象
- 協同工作
- 自動傳遞文檔、信息或者任務
上面幾個方面的重點內容我想已經很清晰的描述工作流的本質了
2、工作流引擎選型
當前工作流主要有 jbpm和 activiti。
下圖是二者之間的主要區別:
再用搜索引擎的搜索指數看一下,發現activiti明細比jbpm高:
這也是對工作流進行學習首選activiti的原因。
3、工作流引擎部署
下面我們正式進入到activiti工作流學習的環節。
3.1 準備工作
我們可以通過工作流引擎activiti的部署來初步瞭解一下activiti。這個軟件的下載地址爲:https://www.activiti.org/。要將這個工作流引擎用起來,我們需要準備如下環境:
- 服務器:
- Java環境: jdk1.8
- Servlet容器:tomcat 8.0
- 軟件:Activiti6.0 壓縮包
上面的內容也比較常見,這裏說一下最後一個activiti壓縮包如何獲取。在官網點擊“try now”後,找到如下頁面
最新的是Activiti7.0, 因此我們需要從Older Versions找到Activiti6.0。點擊淡綠色的 6.x Download,進行下載,下載鏈接https://github.com/Activiti/Activiti/releases/download/activiti-6.0.0/activiti-6.0.0.zip,你也可以直接下載,下載完成後是一個壓縮文件。
解壓這個文件後,可以看到如下的文件目錄
進入wars目錄,這裏就是我們需要部署的內容了
admin包是管理相關,app是應用, rest是接口。
如果你的系統是linux的,可以將這些war部署到linux下的tomcat,本文檔以windwos爲環境,所以後續沒有特別說明,都是在window環境下配置和操作。
此外,activiti-app也有漢化版,可以通過下面鏈接獲取:
鏈接:https://pan.baidu.com/s/1Wj6U4xVJ5vrmQVI2o-Z5_Q
提取碼:7779
主要是提供給網絡不方便的小夥伴自取。
3.2 部署
將上面的三個war包,拷貝到tomcat下的webapps目錄下
拷貝三個war包到上面的目錄中這樣就完成了部署工作。
-
-
- 數據庫修改
-
由於activiti默認集成了嵌入式數據庫h2,這個內存庫,重啓後會丟失內容,所有我採用的是mysql數據庫,因此需要將數據庫修改爲mysql配置。
將上面紅框中內容,按自己的mysql配置進行修改,保存。啓動後,工程會檢查activiti對應的庫表是否存在,如果不存在會創建相應的數據庫表對象。
3.4 啓動
下面我們要進行activiti應用的啓動,進入到apache-tomcat-8.5.34 -activiti\bin目錄,雙擊腳本startup.bat
這樣就表示應用啓動好了。我們通過下面的url來檢驗一下:http://localhost:8080/activiti-app
在瀏覽器中輸入上面url,呈現如下的界面
輸入賬號和密碼: admin/test 點擊signin,能看到下面頁面,就說明部署成功了。
這個頁面是activiti的面板,看到這個說明activiti部署成功。
由於都是英文界面,所以可以去下載一個漢化包(前面提供過百度盤),替換app包的內容。下面是替換漢化包後的activiti-app啓動後內容界面:
4、建立一個簡單的工作流示例
4.1目標
設計一個簡單的二級審批流程:
開始-》員工填寫請假單-》部門領導審批-》人力審批-》結束
這個簡單的流程裏面,體現了二級審批,即部門領導審批,人力審批
4.2設計流程參與者
上面這個流程有幾個參與者:員工,就是流程的發起人 user_dev; 部門領導: user_tl;人力審批: hr_tl;
我們打開activiti的操作界面:
選擇用戶面板:
然後,點擊創建用戶,創建下面幾個用戶:
user_dev, user_tl,hr_tl
創建好後如下所示:
說明:電子郵件項目是必填項,如果不設置,會導致無法用新創建的用戶登錄系統。
點擊頁面上的 可以返回到主界面。
4.3 設計流程
在完成了上面參與者的創建後,我們開始進行二級審批流程的設計。設計之前,我們需要明白這裏的流程設計其實是流程模板設計。比如說,我們要建立一個二級審批流程模板,這個模板適用於多個二級審批應用,比如請假申請、出差申請、調休申請等等,這些日常公司中常用的流程都是二級審批,所以都可以在一個通用的二級審批模板上來建立各種應用。當然有人會說不同的申請,填寫的內容(我們一般稱爲表單)不同,這個後面再說。
然後,我們選擇創建流程
在創建流程的界面上,我們先爲流程起一個名字:二級審批流程。
點擊創建新模型後,在展開的頁面就可以進行流程的設計。尤其關注下圖中標註紅色的部分是經常要創建的活動/任務。
通過拖拉左邊的組件,我們創建開始、兩個用戶活動、結束這些組件,並把他們連接起來(點擊某個組件,可以在彈出的操作內容中選擇箭頭連接這些組件)。然後我們選擇用戶活動,將用戶活動的指派人進行設置。
然後,我們進行任務派遣,這個活動是部門領導對員工的請假單進行審批,所以我們可以這樣選:
下面對第二個用戶活動進行任務派遣,通過這派遣將流程和用戶關聯起來。
上面的任務分配給單個用戶,或者候選用戶都只是選擇的方式,完成後我們可以在流程面板看到發佈的這個流程。
4.4 創建流程應用
流程創建好了後,可以進行流程應用的開發。上面的流程可以理解爲流程模板,而應用是流程模板一個具體的應用。比如上面的二級審批流程,可以用於請假流程應用,也可以用於出差流程應用等等。
創建後,我們還需要爲這個應用選擇流程模型,從應用面板上,看到我們創建的請假模塊應用,點擊紅框進行應用和流程的設定。
點擊上圖中的按鈕後,對應用的基本內容進行操作:
在編輯模型部分,選中適合的流程模型後,出現下圖中的+號
關閉後,看到流程應用和流程模型關聯起來了。
注意,這個時候要點擊保存,把下面圖中的小勾打上,進行流程應用的發佈,這樣就可以進行實際的應用了。
4.5 流程應用的實操
我們進入到系統主界面,可以看到流程應用-請假模塊已經發布了:
下面我們進行流程的實際操作驗證,通過以下幾個步驟來熟悉activiti的流程執行過程:
- 用user_dev登陸,進行請假
- 用user_tl登陸,審批流程
- 用hr_tl登陸,二級審批
- 用戶查看到自己流程的狀態
第一步:用user_dev用戶登錄
我們看到這裏已經有一個請假模塊,如果看不到請檢查上一步應用創建並保存時是否勾選了發佈。下面我們要發起一個活動(具體的一個流程實例)
注意:不是選中第一個,第一個是創建一個臨時協作任務。第二個新的進程並跟蹤進程纔是根據流程進行工作流協作。
點擊開始一個新進程後,在界面上選中二級審批流程,本例中只有一個流程,所以默認選中,在右邊的“開始流程”按鈕上點擊:
點擊開始後,流程引擎啓動了,我們可以看到這個流程進程已經啓動:
紅框中內容表示對應的流程已經啓動,並派發到部門領導處進行審批。紅色箭頭指向的按鈕,點開後展示流程進行過程:
注意上圖中顏色代表的意義:藍色表示完成的活動,綠色表示當前處於的活動,灰色表示還沒有開始的活動。
第二步:user_tl登陸
根據我們的設計的規則,這個用戶登錄後,會在請假模塊看到一條自己需要處理的待辦,我們來看看是否如此:
我們可以進行審批(這是添加一個註釋),然後點擊完成。完成後,在任務列表中已經看不到要處理的任務,在進程中看到這個活動的流程:
而此時顯示圖表表示流程進入到hr審批階段。
第三步:hr_tl登陸
Hr登陸後,在任務列表中看到待辦任務列表中有一條記錄,可以進行審批。
而用user_dev賬號登陸,可以看到活動的流程目前流轉到hr審批
當hr審批完成後,同樣任務列表中消失,由於這個審批任務完成了,所以在進程中是看不到這個流程的,同理用user_dev,user_tl登陸一樣看不到這個完成的流程了。
第4步:通過activiti-admin查看完成的流程
Activiti-admin是工作流的管理功能模塊,通過下面的url進入。首先打開http://localhost:8080/activiti-admin,使用賬號 admin/admin登陸
這裏顯示activiti-app的端口是9999,需要修改爲正確的端口,通過右邊的edit按鈕進行修改。修改完成後,我們可以在deployments面板下看到我們發佈部署的應用:請假模塊
在tasks面板下,我們可以看到流程最後結束的兩個操作
可以通過instances(實例)面板,來查看每個流程實例:
紅色箭頭指向的是最後一個發起的請假流程。7528是這個流程實例ID,點擊這條記錄,可以看到這個流程下的各個任務(即參與協同的人完成的每個活動)。
從上面可以看到這個流程實例進行的具體的2個活動
5、問題總結
5.1 更換爲mysql數據庫啓動異常
問題:採用mysql數據庫,啓動應用,報告liquibase下創建對象exist存在,app或者admin應用啓動異常
解決:由於默認採用H2數據庫(一種內存數據庫),系統重啓後會丟失,因此修改爲mysql可以保持數據持久化。注意admin和app兩個應用數據庫要建成不同庫,否則會因爲數據同步方面的設計導致應用啓動異常
5.2 創建用戶無法登陸
問題:創建用戶後,用新用戶無法登陸
解決:用admin賬號創建用戶時信息要完整,比如要有email信息,創建時不填寫是不會報異常的,因此創建了用戶,無法用這些用戶登錄一般都是創建時信息不完整。
5.3 中文亂碼問題
問題:Admin應用顯示中文亂碼
解決:在tomcat容器中可以進行中文配置:修改catlina.bat文件
加入 UTF-8參數設置