Activiti6.0 实现第一个任务节点自动流转提交 |
您所在的位置:网站首页 › Activiti获取已审批的节点 › Activiti6.0 实现第一个任务节点自动流转提交 |
文章目录
前言
实现
方式一
方式二
总结
前言
在Activiti流程设计中,会有2种处理方式,以请假流程举例: 方式一:第一个节点为组长审批我们平常的开发都是推荐第二种方式,因为第二种方式有以下优点: 可以更好的应对组长审批退回到提交申请节点,这是个很常见的功能。 使流程展示的更加完善,第二种能看出来流程的第一步是提交请假。 实现 方式一填写完申请单,在启动流程后,获取当前流程实例申请人的待办任务,并执行当前流程实例的下一步任务。 // 提交表单 // 启动流程 Task task = null; TaskQuery query = taskService.createTaskQuery().taskAssignee("empId").active(); List todoList = query.list();//获取申请人的待办任务列表 for (Task tmp : todoList) { if(tmp.getProcessInstanceId().equals(processInstance.getId())){ task = tmp;//获取当前流程实例,当前申请人的待办任务 break; } } variables.put(ProcessConstants.KEY_DEPT_LEADER_ID, employeeId);//设置下一步办理人的流程变量 taskService.complete(task.getId(),variables); 复制代码优点: 实现简单,便于理解 缺点: 必须每个流程都要这样hardcoding,这不能装逼啊 方式二 首先监听任务的创建 判断是否是第一个用户任务 如果是,则主动调用一下完成任务的方法完整代码如下: public class AutoCompleteFirstTaskEventListener implements ActivitiEventListener { @Override public void onEvent(ActivitiEvent event) { switch (event.getType()) { case TASK_CREATED: System.out.println(event); if (!(event instanceof ActivitiEntityEventImpl)) { return; } ActivitiEntityEventImpl activitiEntityEventImpl = (ActivitiEntityEventImpl) event; Object entity = activitiEntityEventImpl.getEntity(); if (!(entity instanceof TaskEntity)) { return; } TaskEntity taskEntity = (TaskEntity) entity; this.onCreate(taskEntity); break; default: break; } } @Override public boolean isFailOnException() { return false; } private void onCreate(TaskEntity delegateTask) { System.out.println(delegateTask); ExecutionEntity execution = delegateTask.getExecution(); FlowElement currentFlowElement1 = execution.getCurrentFlowElement(); Process process = ProcessDefinitionUtil.getProcess(delegateTask.getProcessDefinitionId()); UserTask currentFlowElementTask = (UserTask) currentFlowElement1; List incomingFlows = currentFlowElementTask.getIncomingFlows(); SequenceFlow sequenceFlow = incomingFlows.get(0); FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement(); if (sourceFlowElement instanceof StartEvent) { // 判断当前任务的前一个节点是否是StartEvent,即是否是第一个任务 new CompleteTaskCmd(delegateTask.getId(), null).execute(Context.getCommandContext());// 执行完成命令 } } } 复制代码缺点: 花了我很长时间才在Activiti6版本实现,尴尬优点: 做成了通用组件,方便拓展管理 总结全局事件监听- ActivitiEventListener 获取当前任务的节点-execution.getCurrentFlowElement() 获取当前任务节点的前一个节点,判断是否为StartEvent ProcessDefinitionUtil.getProcess(delegateTask.getProcessDefinitionId()); UserTask currentFlowElementTask = (UserTask) currentFlowElement1; List incomingFlows = currentFlowElementTask.getIncomingFlows(); SequenceFlow sequenceFlow = incomingFlows.get(0); FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement(); if (sourceFlowElement instanceof StartEvent) { 复制代码主动调用自动完成操作-new CompleteTaskCmd(delegateTask.getId(), null).execute(Context.getCommandContext()); 这个去看下Taskservice.complete源码即可加群一起抱团取暖,共同进步 🍎QQ群【837324215】 🍎关注我的公众号【Java大厂面试官】,一起学习呗🍎🍎🍎 🍎个人vx【lakernote】 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |