Activiti流程引擎學習筆記
阿新 • • 發佈:2019-05-11
一、Activiti的核心物件及資料庫對應表
(一)ProcessEngine-流程引擎,通過流程引擎可以獲取各種服務。
(二)核心服務
- RepositoryService 管理流程定義
- RuntimeService 執行管理,包括啟動、推進、刪除流程例項等操作
- TaskService 任務管理
- HistoryService 歷史資料管理(管理正在執行或歷史執行的資料)
- IdentityService 組織機構管理 (一般很少用、因為提供的欄位太少不能滿足一般專案,一般的系統自己維護組織機構相關的表)
- FormService 一個可選服務,任務表單管理,提供啟動表單和任務表單相關的服務。 啟動表單會在流程例項啟動之前展示給使用者, 任務表單會在使用者完成任務時展示。
- ManagerService 查詢資料庫表中的資料、表的元資料、以及執行命令的方法,在使用Activiti的定製環境中基本上不會用到。 它可以查詢資料庫的表和表的元資料。另外,它提供了查詢和管理非同步操作的功能。 Activiti的非同步操作用途很多,比如定時器,非同步操作, 延遲暫停、啟用,等等。
(三)各個服務對應管理的表
1.RepositoryService
- act_re_deployment-流程部署表
- act_re_procdef-流程定義表
- act_ge_bytearray-二進位制檔案表(存放BPM檔案,PNG檔案,以及流程變數中的物件序列化之後的二進位制流)
2.RunTimeService、TaskService
- act_ru_execution-執行物件表,如果一個流程有分支和聚合(併發執行),那麼執行物件ID和流程例項ID就不相同,到分支時會新增新的執行物件資料
- act_ru_task-正在執行的任務表
- act_ru_variable-正在執行的流程變量表
- act_ru_identitylink-任務辦理人表
3.HistoryService
- act_hi_procinst 流程例項歷史表
- act_hi_taskinst 任務歷史表(只有節點是UserTask的時候,該表中存在資料)
- act_hi_actinst 活動節點歷史表
- act_hi_identitylink 任務辦理人歷史表
- act_hi_comment 批註表
- act_hi_attachment 附件表
4.IdentityService
- act_id_group 角色表
- act_id_membership 使用者角色關係表
- act_id_info 使用者詳細資訊表
- act_id_user 使用者表
二、細講
(一)流程引擎
流程引擎初始化主要有兩個目的:
- 初始化activiti所需要的表,所以最重要的是配置資料來源相關。
- 通過流程引擎物件獲取各種核心服務
(二)idea外掛的使用
針對不同的IDE有不同的外掛,IDEA的使用的是actiBPM外掛,但這個外掛沒有eclipse的外掛好用。 目前遇到的情況有:
- 中文亂碼問題 需要修改idea目錄下的idea.exe.vmoptions和idea64.exe.vmoptions兩個檔案,用記事本開啟在後面加上"-Dfile.encoding=UTF-8"。
- 獲取流程圖片問題 需要改字尾為xml,然後右鍵選擇【Diagrams】-->【Show BPMN 2.0 Diagrams...】,開啟後才選擇匯出才能獲取流程圖。
- 報錯問題 雖然遇到的報錯暫時沒發現有什麼實質影響。
(三)RepositoryService
1.API
(1)獲取流程部署構建物件
- DeploymentBuilder createDeployment();
(2)流程部署物件相關API
讀取Bpmn和png的流程定義資訊:
- DeploymentBuilder addInputStream(String resourceName, InputStream inputStream);
- DeploymentBuilder addClasspathResource(String resource);
- DeploymentBuilder addString(String resourceName, String text);
- DeploymentBuilder addZipInputStream(ZipInputStream zipInputStream);
- DeploymentBuilder addBpmnModel(String resourceName, BpmnModel bpmnModel);
設定流程定義其他資訊:
- DeploymentBuilder name(String name);設定流程部署名稱
- DeploymentBuilder category(String category);設定流程部署類別
- DeploymentBuilder tenantId(String tenantId);設定流程部署租戶ID(該功能主要用於資料共享在一個數據庫的使用場景。一個或者多個的引擎但是他們使用的資料庫為同一個。 因此操作的時候需要區分這些資料(部署的流程資源)的來源,以方便程式後續的處理。)
部署流程:
- Deployment deploy();
(3)獲取流程定義查詢物件
- ProcessDefinitionQuery createProcessDefinitionQuery();
(4)刪除流程定義
- void deleteDeployment(String deploymentId);若有執行時的流程例項刪除將會失敗
- void deleteDeploymentCascade(String deploymentId);若有執行時的流程例項則將其相關的act_ru_xxx中的所有資料刪除
- void deleteDeployment(String deploymentId, boolean cascade);boolean為true則同第二個,false則同第一個
(4)獲取流程圖
- InputStream getProcessDiagram(String process