前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工作流引擎之activiti委托功能实现

工作流引擎之activiti委托功能实现

作者头像
lyb-geek
发布2018-09-27 09:40:21
3.7K0
发布2018-09-27 09:40:21
举报
文章被收录于专栏:Linyb极客之路

委托场景

在业务的一些需求中,比如有些属于自己的任务无法完成,就可以把自己的任务委托给其他人,让其他人来帮你完成

如何利用activiti实现委托功能

利用activiti自带的api:taskservice中的delegateTask方法实现委托

核心代码功能实现

1、指定委托人

代码语言:javascript
复制
public static void delegate(String curTaskId, String userId) {
        taskService.delegateTask(curTaskId, userId);
    }

这段代码执行后,查看 act_ru_task表

受理人委托其他人操作该TASK的时候,受理人就成了委托人OWNER,其他人就成了受理人ASSIGNEE,同时DELEGATION_的状态变为PENDING(委托状态)

2.完成任务

完成任务不能直接调用taskservice的complete方法,否则会抛出

代码语言:javascript
复制
org.activiti.engine.ActivitiException: A delegated task cannot be completed, but should be resolved instead.

异常的意思就是完成任务是要先解决委托,委托任务必须有解决委托这一步骤,当解决委托后,流程并不是进行到下一个节点,而是需要被委托人有完成任务操作时方可进行到下一步,而中国式需求中大多都是解决委托就是完成任务,需要解决这个问题的话可以在调用解决委托后执行一个完成任务代码操作。因此在完成任务时,要判断是否是委托任务。

完成任务核心代码功能

代码语言:javascript
复制
public static void completeTask(String curTaskId, Map<String, Object> variables) {
        Task task = taskService.createTaskQuery().taskId(curTaskId).singleResult();
        // owner不为空说明可能存在委托任务
        if (StringUtils.isNotBlank(task.getOwner())) {
            DelegationState delegationState = task.getDelegationState();
            switch (delegationState) {
            case PENDING:
                taskService.resolveTask(curTaskId);
                taskService.complete(curTaskId, variables);
                break;

            case RESOLVED:
                System.out.println("委托任务已经完成");
                break;

            default:
                System.out.println("不是委托任务");
                taskService.complete(curTaskId, variables);
                break;
            }
        } else {
            taskService.complete(curTaskId, variables);
        }

    }

demo地址

https://github.com/lyb-geek/demo-activiti-delegated

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 委托场景
  • 如何利用activiti实现委托功能
  • 核心代码功能实现
    • 完成任务核心代码功能
    • demo地址
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档