通过调用taskService.deleteTask方法删除当前正在执行的任务,activity抛出异常提示不能删除正在执行的任务,如果调用complete完成任务,再去历史表中删除,但是调用complete,流程自动往前推进,不想推进的情况下删除当前任务,解决方案如下:
1、首先自定义命令,这里继承了NeedsActiveTaskCmd表示当前任务不能挂起(没有这个需求,直接结成TaskCmd即可)
import org.activiti.engine.impl.cmd.NeedsActiveTaskCmd;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntityManager;
/***
* 删除正在执行的任务
*/
public class DeleteTaskCommand extends NeedsActiveTaskCmd<String> {
public DeleteTaskCommand(String taskId) {
super(taskId);
}
@Override
protected String execute(CommandContext commandContext, TaskEntity currentTask) {
//获取所需服务
TaskEntityManager taskEntityManager = commandContext.getTaskEntityManager();
//获取当前任务的来源任务及来源节点信息
ExecutionEntity executionEntity = currentTask.getExecution();
//删除当前任务,来源任务
taskEntityManager.deleteTask(currentTask, "retakeTask", false);
return executionEntity.getId();
}
@Override
protected String getSuspendedTaskException() {
return "挂起的任务不能删除";
}
}
2、代码中调用
DeleteTaskCommand deleteTaskCommand = new DeleteTaskCommand(task.getId() )
engine.getManagementService().executeCommand(deleteTaskCommand);
3、原理
执行命令,首先把当前任务置为完成,完成原因设置为deleted,在历史任务表act_hi_taskinst中可以查看: