Activiti委托与解决委托

       我们常常在业务场景中会有这样的需求,我需要将自己的任务委托给另外一个人,同时需要获取委托人和被委托人的信息,也需要知道此任务是正在被委托,还是委托人已完成此时,我们就需要用到Activiti中的委托功能:

这是一条普通的任务,现在我们看数据库act_ru_task表,对比任务的id我们看到第一条是当前我们需要观测的数据:

1、接下来我们开始委托功能

/**
 * 将指定任务进行委托处理
 *
 * @param taskId
 * @param assignee
 */
public static void delegateTask(String taskId, String assignee) {
    taskService.delegateTask(taskId, assignee);
}

此时,再查看数据库表:

对比委托之前的数据我们发现发生了一些变化:

  • DELEGATION_字段的值变化为PENDING,表示此任务为正在执行的委托任务;
  • OWNER_字段表示委托人;
  • ASSIGNEE_表示当前任务处理人;

2、接下来解决委托

/**
 * 根据taskId解决被委托的任务并进行到下一个节点,动态传值设置变量
 */
public static void resolveTask(String taskId, Map<String, Object> variables) {
    //根据taskId提取任务
    Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
    if (task.getOwner() != null && !task.getOwner().equals("null")) {
        DelegationState delegationState = task.getDelegationState();
        if (delegationState.toString().equals("RESOLVED")) {
            System.out.println("此委托任务已是完结状态");
        } else if (delegationState.toString().equals("PENDING")) {
            //如果是委托任务需要做处理
            taskService.resolveTask(taskId);
            taskService.complete(taskId, variables);
        } else {
            System.out.println("此任务不是委托任务");
        }
    }
}

对比之前的数据库:

此时的DELEGATION_字段的值变化为RESOLVED,表示此任务为被解决的委托任务;

3、Activiti是外国人写的,外国人与我们想法不太一样,他们认为委托任务必须有解决委托这一步骤,当解决委托后,流程并不是进行到下一个节点,而是需要被委托人有完成任务操作时方可进行到下一步,而中国式需求中大多都是解决委托就是完成任务,需要解决这个问题的话可以在调用解决委托后执行一个完成任务代码操作。

/**
 * 根据taskId解决被委托的任务并进行到下一个节点,动态传值设置变量
 */
public static void resolveTask(String taskId, Map<String, Object> variables) {
    //根据taskId提取任务
    Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
    if (task.getOwner() != null && !task.getOwner().equals("null")) {
        DelegationState delegationState = task.getDelegationState();
        if (delegationState.toString().equals("RESOLVED")) {
            System.out.println("此委托任务已是完结状态");
        } else if (delegationState.toString().equals("PENDING")) {
            //如果是委托任务需要做处理
            taskService.resolveTask(taskId);
            taskService.complete(taskId, variables);
        } else {
            System.out.println("此任务不是委托任务");
        }
    }
}

委托任务如果不解决委托将无法进行到下一个节点,完成任务时将直接抛出异常:

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值