在Activiti流程设计中,为了使流程展示的更加完善,经常会将流程图的第一步任务设计成“提交任务”,例如:

Activiti中如何跳过(自动处理)第一步的提交任务?(转载)

申请人启动流程后,流程就会到达“提交任务”,而“提交任务”的办理人还是该申请人,这个时候就需要通过代码跳过(自动处理)该任务节点,让流程流转到下一任务节点。有两种方法可以处理这个问题。

第一种方式:在启动流程后,获取当前流程实例申请人的待办任务,并执行当前流程实例的下一步任务

 1 Task task = null;
 2 TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned(empId).active();
 3 List<Task> todoList = query.list();//获取申请人的待办任务列表
 4 for (Task tmp : todoList) {
 5     if(tmp.getProcessInstanceId().equals(processInstance.getId())){
 6         task = tmp;//获取当前流程实例,当前申请人的待办任务
 7         break;
 8     }
 9 }
10 variables.put(ProcessConstants.KEY_DEPT_LEADER_ID, employeeId);//设置下一步办理人的流程变量
11 taskService.complete(task.getId(),variables);
View Code

 

 

第二种方式:使用监听器处理(推荐)

spring配置文件

 1 <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
 2 ...
 3 <!-- 添加的自定义监听器 -->
 4 <property name="postBpmnParseHandlers">
 5     <list>
 6         <bean class="com.eazytec.common.activiti.listener.ProxyUserTaskBpmnParseHandler">
 7             <property name="taskListenerId" value="postTaskListener"/>
 8         </bean>
 9     </list>
10 </property>
11 ...
12 </bean>
13 <!-- 在记录history之后执行的TaskListener -->
14 <bean id="postTaskListener" class="com.eazytec.common.activiti.listener.ProxyTaskListener">
15     <property name="taskListeners">
16         <list>
17             <bean class="com.eazytec.common.activiti.listener.AutoCompleteFirstTaskListener"/>
18         </list>
19     </property>
20 </bean>
View Code

相关文章:

  • 2022-01-02
  • 2021-10-13
  • 2021-06-04
  • 1970-01-01
  • 2021-10-31
  • 2021-09-16
猜你喜欢
  • 2022-12-23
  • 2021-07-21
  • 2022-12-23
  • 2021-07-13
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案