activiti 自动完成第一个任务

有时候后我们开启一个流程实例的时候需要将第一个任务自动完成
例如:我们开启一个请假申请,需要自动将 提交请假申请的任务完成,自动跳到下一个审批任务


通过监听器完成:

监听器类型选择: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());
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值