Activiti学习笔记4 — 流程实例化
1、创建流程引擎对象
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
2、启动流程
流程启动后会更新以下二张表:act_ru_execution和act_ru_task各产生一条记录
1 // 获取服务对象的实例 2 RuntimeService runtimeService = processEngine.getRuntimeService(); 3 4 String processDefinitionKey = "leaveflow"; 5 // 自动执行与Key相对应的流程的最高版本 6 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey); 7 8 logger.info("Id:" + processInstance.getId()); 9 logger.info("ActivitiId:" + processInstance.getActivityId());
3、查看任务
3.1、查看私有任务
1 // 1、获取服务对象的实例 2 TaskService taskService = processEngine.getTaskService(); 3 4 // 2、查询 5 // 2.1、创建查询对象 6 TaskQuery query = taskService.createTaskQuery(); 7 // 2.2、配置查询对象 8 // String assignee = "employee"; 9 String assignee = "manager"; 10 query 11 // 过滤条件 12 .taskAssignee(assignee) 13 // 排序条件 14 .orderByTaskCreateTime().desc(); 15 // 分页条件 16 // .listPage(firstResult, maxResults) 17 18 // 2.3、执行查询 19 List<Task> tasks = query.list(); 20 21 for (Task task : tasks) { 22 logger.info("Id:" + task.getId()); 23 logger.info("Name:" + task.getName()); 24 logger.info("Category:" + task.getCategory()); 25 logger.info("Description:" + task.getDescription()); 26 logger.info("Assignee:" + task.getAssignee()); 27 logger.info("CreateTime:" + task.getCreateTime()); 28 }
3.2、查看共有任务
在流程定义中使用candidateUser属性,发布任务后会在act_ru_identitylink表产生对应的记录
1 // 1、获取服务对象的实例 2 TaskService taskService = processEngine.getTaskService(); 3 4 // 2、查询 5 // 2.1、创建查询对象 6 TaskQuery query = taskService.createTaskQuery(); 7 // 2.2、配置查询对象 8 //String candidateUser = "张三"; 9 //String candidateUser = "李四"; 10 11 //String candidateUser = "李经理"; 12 String candidateUser = "赵经理"; 13 query 14 // 过滤条件 15 .taskCandidateUser(candidateUser) 16 // 排序条件 17 .orderByTaskCreateTime().desc(); 18 // 分页条件 19 // .listPage(firstResult, maxResults) 20 21 // 2.3、执行查询 22 List<Task> tasks = query.list(); 23 24 for (Task task : tasks) { 25 logger.info("Id:" + task.getId()); 26 logger.info("Name:" + task.getName()); 27 logger.info("Category:" + task.getCategory()); 28 logger.info("Description:" + task.getDescription()); 29 logger.info("Assignee:" + task.getAssignee()); 30 logger.info("CreateTime:" + task.getCreateTime()); 31 }
4、认领任务
1 // 1、获取服务对象的实例 2 TaskService taskService = processEngine.getTaskService(); 3 String taskId = "37502"; 4 String userId = "赵经理"; 5 taskService.claim(taskId, userId);
5、完成任务
1 // 1、获取服务对象的实例 2 TaskService taskService = processEngine.getTaskService(); 3 // 2、完成任务 4 String taskId = "37502"; 5 taskService.complete(taskId);
6、查看流程状态
1 // 1、获取服务对象的实例 2 RuntimeService runtimeService = processEngine.getRuntimeService(); 3 //查询 4 // 2.1、创建查询对象 5 ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery(); 6 String processInstanceId = "35001"; 7 ProcessInstance processInstance = query.processInstanceId(processInstanceId).singleResult(); 8 9 if (processInstance != null) { 10 logger.info(processInstance.getId()); 11 logger.info(processInstance.getActivityId()); 12 } else { 13 logger.info("流程已结束!"); 14 //HistoryService historyService = processEngine.getHistoryService(); 15 16 }
7、ProcessInstance的4个特点:
1、一个流程只有一个流程实例。
2、一个流程中,流程实例的ID不会变。
3、流程实例永远指向当前活动的节点
4、流程实例是一个特殊的执行对象(Execution)
4.1、如果是单线流程,流程实例和执行对象是同一个;
4.2、如是是并发流程,流程会在分支处产生一个Root级别的执行对象作为ProcessInstance,而分支下的每一个活动节点,都会分别产生一个Execution对象挂在Root下。
8、流程整改的方式:
1、如果老流程没有太大的问题,那么老流程按照老规则流程,新流程按照新规则流转。
2、如果老流程有严重问题,废除老流程,所有的都按照新规则重新执行。
注:流程没有修改操作