一 部署流程定義,貼代碼
import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Deployment; import org.junit.Test; public class ActivitiTest { /** * 部署流程 */ @Test public void deploy(){ //創建ProcessEngineConfiguration對象 ProcessEngineConfiguration configuration = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource("activiti.cfg.xml"); //創建ProcessEngine對象 ProcessEngine processEngine = configuration.buildProcessEngine(); //得到RepositoryService實例 RepositoryService repositoryService = processEngine.getRepositoryService(); //進行部署 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("processes/diagram_1.bpmn") //添加bpmn資源 .addClasspathResource("processes/diagram_1.png") .name("請假申請單流程") .deploy(); System.out.println(deployment.getName()); System.out.println(deployment.getId()); } }
activiti.cfg.xml 見 springboot2+activiti 7 整合(三) 工程依賴配置和創建表結構
運行完成后,打開數據庫查看流程定義數據表ACT_RE_PROCDEF,可以看到 activiti 會將上邊代碼中指定的 bpm 文件和圖片文件保存在數據庫中。
二 啟動一個流程實例
/**
* 啟動一個流程實例
*/
@Test
public void startProcessInstance(){
ProcessEngine processEngine = getProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance instance = runtimeService.startProcessInstanceByKey("myProcess_1");
System.out.println("流程實例ID:"+instance.getId());
System.out.println("流程定義ID:"+instance.getProcessDefinitionId());
}
public ProcessEngine getProcessEngine(){
//創建ProcessEngineConfiguration對象
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//創建ProcessEngine對象
return configuration.buildProcessEngine();
}
運行后,打開運行時任務節點表ACT_RU_TASK
流程實例的執行表ACT_RU_EXECUTION
一個流程就啟動起來了。
三 任務查詢
流程啟動后,各各任務的負責人就可以查詢自己當前需要處理的任務,查詢出來的任務都是該用戶的待辦任務
/**
* 查詢用戶的任務列表
*/
@Test
public void taskQuery() {
ProcessEngine processEngine = getProcessEngine();
TaskService taskService = processEngine.getTaskService();
//根據流程定義的key,負責人assignee來實現當前用戶的任務列表查詢
List<Task> list = taskService.createTaskQuery()
.processDefinitionKey("myProcess_1")
.taskAssignee("tom")
.list();
if(list!=null && list.size()>0){
for(Task task:list){
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());
System.out.println("執行對象ID:"+task.getExecutionId());
System.out.println("流程定義ID:"+task.getProcessDefinitionId());
System.out.println("getOwner:"+task.getOwner());
System.out.println("getCategory:"+task.getCategory());
System.out.println("getDescription:"+task.getDescription());
System.out.println("getFormKey:"+task.getFormKey());
Map<String, Object> map = task.getProcessVariables();
for (Map.Entry<String, Object> m : map.entrySet()) {
System.out.println("key:" + m.getKey() + " value:" + m.getValue());
}
for (Map.Entry<String, Object> m : task.getTaskLocalVariables().entrySet()) {
System.out.println("key:" + m.getKey() + " value:" + m.getValue());
}
}
}
}
四 完成任務
/** * 完成任務 */ @Test public void completeTask(){ //任務ID String taskId = "2505"; ProcessEngine processEngine = getProcessEngine(); TaskService taskService = processEngine.getTaskService(); taskService.complete(taskId); System.out.println("完成任務:任務ID:"+taskId); }
依次把部門經理審批和人事審批的流程完成,整個流程走完以后:
查看, 歷史任務實例表ACT_HI_TASKINST
查看 ,歷史節點表 ACT_HI_ACTINST