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

委托场景

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

如何利用activiti实现委托功能

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

核心代码功能实现

1、指定委托人

public static void delegate(String curTaskId, String userId) {
        taskService.delegateTask(curTaskId, userId);
    }

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

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

2.完成任务

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

org.activiti.engine.ActivitiException: A delegated task cannot be completed, but should be resolved instead.

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

完成任务核心代码功能

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

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]

关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则。这实...

2207
来自专栏C语言及其他语言

【每日一题】问题 1209: 密码截获

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码 进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一...

1482
来自专栏日常分享

Java 循环队列的实现

  队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空...

2163
来自专栏好好学java的技术栈

Java11震撼发布了,我们该怎么办?

Java11已经发布了,我们今天聊聊大家还停留在哪个版本呢?大家对于新版本的迅速的发布有什么想说的呢?

2042
来自专栏算法与数据结构

拓扑排序 ——个人理解,仅供参考

贴代码: #include <bits/stdc++.h> using namespace std; #define maxn 100//可以根据题目条件进行更...

2088
来自专栏恰童鞋骚年

《你必须知道的.NET》读书笔记一:小OO有大智慧

此篇已收录至《你必须知道的.Net》读书笔记目录贴,点击访问该目录可以获取更多内容。

552
来自专栏JavaEdge

Netty 源码深度解析(八) - 解码

就像很多标准的架构模式都被各种专用框架所支持一样,常见的数据处理模式往往也是目标实现的很好的候选对象,它可以节省开发人员大量的时间和精力。

1811
来自专栏FD的专栏

写出形似QML的C++代码

我的第一个想法(居然?)是做个Embedded-DSL。不过C++又不是Ruby……随便搜了一下,发现了一篇文章,也只是利用了重载运算符和运算符优先级,看上去限...

652
来自专栏nice_每一天

转载 Java设计模式

设计模式; 一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精...

1242
来自专栏.net core新时代

再谈Newtonsoft.Json高级用法

  上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充。 ...

2088

扫码关注云+社区

领取腾讯云代金券