用Activiti工作流程跳过或完成用户任务
问题描述:
有没有办法用Java完成或跳过activiti用户任务? 我实现了一个TaskListener这样做,但是当我把这个代码:用Activiti工作流程跳过或完成用户任务
delegateTask.getExecution().getEngineServices().getTaskService().complete(task.getId());
我得到这个异常:
Caused by: org.activiti.engine.ActivitiException: UserTask should not be signalled before complete
at org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior.signal(UserTaskActivityBehavior.java:146)
at org.activiti.engine.impl.persistence.entity.ExecutionEntity.signal(ExecutionEntity.java:407)
at org.activiti.engine.impl.persistence.entity.TaskEntity.complete(TaskEntity.java:201)
at org.activiti.engine.impl.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:50)
at org.activiti.engine.impl.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:24)
at org.activiti.engine.impl.cmd.NeedsActiveTaskCmd.execute(NeedsActiveTaskCmd.java:59)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)[415:org.activiti.engine:5.17.0]
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)[415:org.activiti.engine:5.17.0]
at org.activiti.engine.impl.TaskServiceImpl.complete(TaskServiceImpl.java:179)
at Proxy7b61ad98_bd2d_436d_94dd_1e7381cca64e.complete(Unknown Source)
答
不能在任务监听器内完成一个任务,因为上下文仍然实例化。如果你想跳过任务,你应该使用网关。
其仅在XML电平(在建模器不暴露)支持的另一种替代方法是使用在下面的博客记录相当不错的跳过表达式语法:
https://blog.canang.com.my/2016/09/30/whats-activiti-skiptask-about/