有时候后我们开启一个流程实例的时候需要将第一个任务自动完成
例如:我们开启一个请假申请,需要自动将 提交请假申请的任务完成,自动跳到下一个审批任务
通过监听器完成:
监听器类型选择:delegateExpression 表示将监听器的请求委托给 spring 容器中的一个实例
${priceEvaluationListener} 用来指定要委托的 spring bean 的名字,例如
@Slf4j
@Component
public class PriceEvaluationListener implements TaskListener {
@Resource
private TaskService taskService;
@Override
public void notify(DelegateTask delegateTask) {
String taskId = delegateTask.getId();
//如果是
if(EVENTNAME_CREATE.equals(delegateTask.getEventName()) && "提交价格审批".equals(delegateTask.getName())){
taskService.complete(taskId);
log.info("");
}
}
}
默认是 类的首字母小写
也可以通过注解参数指定实例的名字例如 @Component("priceEvaluationListener")
这样当该任务执行创建好之后,执行监听器,监听器中判断如果是 第一个任务
直接就将其完成
开启任务之后 直接根据流程实例id 和 当前登录人 以及流程定义key获取第一个任务 将其完成:
@Test
public void startProcessInstance(){
String businessKey = "1000";
Map<String, Object> variables = new HashMap<>();
variables.put("submitAssignee" , "tom");
variables.put("priceEvaluationAssignee" , "jack");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("price-evaluation-process", businessKey , variables);
String processInstanceId = processInstance.getId();
//查询第一个任务
TaskQuery taskQuery = taskService.createTaskQuery().active().taskAssignee("tom").processDefinitionKey("price-evaluation-process");
//设置流程实例id
taskQuery.processInstanceId(processInstanceId);
Task task = taskQuery.singleResult();
taskService.complete(task.getId());
}