一、實現學生請假流程
1.1 用activiti插件生成bpmn和png文件
1.2 部署流程定義
package com.shyroke.activiti.firstActiviti; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.Deployment; import org.junit.Test; public class StudentLeaveProcess { /** * 獲取默認流程引擎實例,會自動讀取activiti.cfg.xml文件 */ private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定義 */ @Test public void test_Deploy() { Deployment deployment = processEngine.getRepositoryService() // 獲取部署相關Service .createDeployment() //// 創建部署 .addClasspathResource("diagrams/StudentLeaveProcess.bpmn") // 加載資源文件 .addClasspathResource("diagrams/StudentLeaveProcess.bpmn") // 加載資源文件 .name("學生請假流程") // 流程名稱 .deploy(); // 部署 System.out.println("流程部署ID:" + deployment.getId()); System.out.println("流程部署Name:" + deployment.getName()); } }
- 結果:
- 更新流程部署表
- 更新流程定義表
- 更新資源文件表
- 更新系統配置表
1.2 啟動流程實例
/** * 啟動流程實例 */ @Test public void start() { ProcessInstance instance=processEngine.getRuntimeService() // 運行時Service .startProcessInstanceByKey("StudentLeaveProcess"); // 流程定義表act_re_procdef的KEY字段值 System.out.println("流程實例ID:"+instance.getId()); System.out.println("流程定義ID:"+instance.getProcessDefinitionId()); }
- 此時流程學生請假這個節點,等待張三完成任務。
- 結果
- 更新執行對象表
- 更新身份聯系表,
- 更新 用戶任務表,這里是張三的任務
- 更新活動節點歷史表,如下圖可知,張三的任務還沒完成,所以END_TIME為空
- 更新歷史身份聯系表,流程走到這里暫時只有張三這個用戶需要完成任務。
- 更新歷史流程實例表,因為張三還沒完成任務,所以END_TIME為空。
- 更新歷史任務表,目前只有張三的任務
1.3 查看張三的任務
/** * 查看任務 */ @Test public void find_task() { List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskAssignee("張三").list(); for(Task task:taskList){ System.out.println("任務ID:"+task.getId()); System.out.println("任務名稱:"+task.getName()); System.out.println("任務創建時間:"+task.getCreateTime()); System.out.println("任務委派人:"+task.getAssignee()); System.out.println("流程實例ID:"+task.getProcessInstanceId()); } }
- 結果
1.4 張三完成學生請假任務
/** * 完成任務 */ @Test public void test_completeTask() { processEngine.getTaskService().complete("2504"); }
- 結果,張三完成任務之后,流程就從學生請假走到了班長審批這個節點,需要李四完成任務。
- 更新執行對象表
- 更新身份聯系表 ,這個流程走到現在需要張三和李四兩個用戶,張三已經完成任務。
- 更新 用戶任務表,這里是李四的任務
- 更新活動節點歷史表,如下圖可知,李四的任務還沒完成,所以END_TIME為空
- 更新歷史身份聯系表
- 更新歷史流程實例表
- 更新歷史任務表
1.5 查看李四的任務
/** * 查看任務 */ @Test public void find_task() { List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskAssignee("李四").list(); for(Task task:taskList){ System.out.println("任務ID:"+task.getId()); System.out.println("任務名稱:"+task.getName()); System.out.println("任務創建時間:"+task.getCreateTime()); System.out.println("任務委派人:"+task.getAssignee()); System.out.println("流程實例ID:"+task.getProcessInstanceId()); } }
- 結果
1.6 李四完成班長審批任務
/** * 完成任務 */ @Test public void test_completeTask() { processEngine.getTaskService().complete("5002"); }
- 完成之后,流程就從李四的班長審批節點走到班主任審批節點,需要王五來完成
- 更新執行對象表
- 更新身份聯系表
- 更新 用戶任務表,這里是王五的任務
- 更新活動節點歷史表,如下圖可知,王五的任務還沒完成,所以END_TIME為空
- 更新歷史身份聯系表
- 更新歷史流程實例表
- 更新歷史任務表
1.7 查看王五任務
/** * 查看任務 */ @Test public void find_task() { List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskAssignee("王五").list(); for(Task task:taskList){ System.out.println("任務ID:"+task.getId()); System.out.println("任務名稱:"+task.getName()); System.out.println("任務創建時間:"+task.getCreateTime()); System.out.println("任務委派人:"+task.getAssignee()); System.out.println("流程實例ID:"+task.getProcessInstanceId()); } }
- 結果
1.8 王五完成任務
/** * 完成任務 */ @Test public void test_completeTask() { processEngine.getTaskService().complete("7502"); }
- 結果
- 當王五完成任務的時候,流程就全部走完了。
- 當流程結束的時候,運行時的表(以act_ru開頭的表)數據全部清空,歷史表(以act_hi開頭的表)數據修改 或者增加了數據