Activiti7工作流引擎:进阶篇 驳回(拒绝)
Posted vbirdbest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti7工作流引擎:进阶篇 驳回(拒绝)相关的知识,希望对你有一定的参考价值。
也不知道张世豪厉害,还是李华强厉害。
驳回或者拒绝就是某个审批人不同意你的申请,此时流程就直接结束了。我们可以增加分支条件或者排它网关来完成驳回功能。此方法适用于节点较少的情况。
1. bpmn文件
同意:$result==1
驳回:$result==1
有一个正常结束事件,有一个异常结束事件。
2. test
@Test
public void testStart()
// 部署
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("bpmn/reject.bpmn")
.name("请假流程")
.deploy();
// 启动
Authentication.setAuthenticatedUserId("zs");
String businessKey = "1";
Map<String, Object> variables = new HashMap<>();
variables.put("creator", "zhangsan");
variables.put("pm", "lisi");
variables.put("hr", "wangwu");
processEngine.getRuntimeService().startProcessInstanceByKey("reject", businessKey, variables);
// 第一个节点完成
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.processDefinitionKey("reject")
.taskAssignee("zhangsan")
.singleResult();
String currentUserId = "zs";
Authentication.setAuthenticatedUserId(currentUserId);
JSONObject jsonObject = new JSONObject();
jsonObject.put("userId", currentUserId);
jsonObject.put("comment", "同意");
taskService.addComment(task.getId(), task.getProcessInstanceId(), JSONObject.toJSONString(jsonObject));
// 设置局部变量,因变量是局部的所以每个连线对应的变量可以重名
taskService.setVariable(task.getId(), "result", 1);
taskService.complete(task.getId());
@Test
public void testRejectTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.processDefinitionKey("reject")
.taskAssignee("lisi")
.singleResult();
Authentication.setAuthenticatedUserId("lisi");
// 异常结束
taskService.setVariable(task.getId(), "result", 0);
taskService.complete(task.getId());
3. 查询某个实例的任务状态
查询某个流程实例的最新状态可以通过endActivityId是否有值,然后将正常的EndEvent改为审批成功,异常的EndEvent改为审批失败等辅助完成。
个人觉得自己在业务表中维护一个状态字段比较方便点,而且还可以自定义状态。
@Test
public void testQueryTaskStatus()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoricProcessInstance historicProcessInstance = processEngine.getHistoryService().createHistoricProcessInstanceQuery()
.processInstanceId("4")
.singleResult();
String endActivityId = historicProcessInstance.getEndActivityId();
String taskStatus = null;
if (endActivityId != null)
HistoricActivityInstance historicActivityInstance = processEngine.getHistoryService().createHistoricActivityInstanceQuery()
.activityId(endActivityId)
.singleResult();
// 审批成功、审批失败
taskStatus = historicActivityInstance.getActivityName();
else
HistoricTaskInstance historicTaskInstance = processEngine.getHistoryService().createHistoricTaskInstanceQuery()
.processInstanceId("4")
.orderByHistoricTaskInstanceEndTime()
.desc()
.list()
.get(0);
// 正在审批的节点
taskStatus = historicTaskInstance.getName();
System.out.println(taskStatus);
如果节点较多,每个节点都增加一个排它网关,感觉整个流程的.bpmn文件内容很多,我们当驳回的时候可以直接操作act_ru删除相关数据和act_hi表中完善end_time等。
以上是关于Activiti7工作流引擎:进阶篇 驳回(拒绝)的主要内容,如果未能解决你的问题,请参考以下文章
Activiti7工作流引擎:进阶篇 ProcessRuntime和TaskRuntime
Activiti7工作流引擎:进阶篇 Activiti7与Spring整合
Activiti7工作流引擎:进阶篇 ProcessRuntime和TaskRuntime