activiti 任务节点 处理人设置

activiti 任务节点 处理人设置1.1.1.前言我们在使用activiti工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,流程的运转依赖于人员如何设置,人员的设置是非常重要的一个环节,所以说如果能让activiti工作流引擎运转的核心,就必须要支持强大的人员组织架构设计。下面我们先说一下activiti工作流引擎自身支持的可以直接使用的地方。我…

大家好,又见面了,我是你们的朋友全栈君。

1.1.1. 前言

我们在使用activiti 工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,流程的运转依赖于人员如何设置,人员的设置是非常重要的一个环节,所以说如果能让activiti 工作流引擎运转的核心,就必须要支持强大的人员组织架构设计。下面我们先说一下activiti 工作流引擎自身支持的可以直接使用的地方。我们来看一下,人员如何设置。

1.1.2. 处理人分配方式

处理人分配的方式有六种设置方式,可以让我们很轻松的结合业务来设置任务节点的处理人,如下图所示:

 activiti 任务节点 处理人设置

任务处理人的设置如下图所示:

 activiti 任务节点 处理人设置

activiti 任务节点 处理人设置

下面,我们就看一下每一种方式的具体操作:

1.1.3. act_ru_identitylink

因为处理人除了直接设置指定人处理的方式,act_ru_identitylink表没有数据,其他的方式都是在这个表有记录的,所以还是很有必要说一下这个表结构,表结构如下图所示:

 activiti 任务节点 处理人设置

act_ru_identitylink表结构说明:

task_id 对应act_ru_task中的主键id_

type_:对应类别有starter流程实例的发起者、candidate:节点的候选人

group_id:候选组的id主键,

user_id:对应人的id_主键

rev_:版本号

其中group_id、user_id不一定是activiti工作流引擎中人员组织关系,有可能使我们自定义的人员架构关系,这一点重点说明一下,因为后面的文章,我们会讲解如何扩展工作流人员架构

1.1.4. 第一种方式assignee

这种方式就是就是指定的具体处理人,xml配置信息对应如下所示:

1.1.4.1. xml

<userTask id="usertask1" name="商务采购" activiti:assignee="分享牛原创" >
      <extensionElements>
  </userTask>

当我们运行的时候可以看到act_ru_task表中assignee_字段使我们设置的值

1.1.5. 第二种方式assignee 变量方式

这种方式就是就是指定的具体处理人,xml配置信息对应如下所示:

1.1.5.1. xml

<userTask id="usertask1" name="商务采购" activiti:assignee="${分享牛原创}" >
      <extensionElements>
  </userTask>

运行的时候把当${分享牛原创}”分享牛原创变量传递进去,也就是把${}里面的变量传递进去就可以,我们运行的时候可以看到act_ru_task表中assignee_字段使我们设置的值,注意这个变量传递一定要在流程还没有到达这个任务节点的时候传递,否则当流程到达这个节点的时候,在传递变量就不行了。因为当前的节点设置的是下一个节点的变量值信息。

1.1.6. 第三种方式后候选组的方式

这种方式就是就是指定多个人去处理,xml配置信息对应如下所示:

1.1.6.1. xml

<userTask id="usertask1" name="商务采购"  activiti:candidateUsers="分享牛原创">
</userTask>

候选组使用的时候,多个就是,分割。比如我们需要设定当前的任务处理人是a、b、c三个人处理,那我们怎么设置呢?设置的时候,我们就设置为a,b,c即可。

当流程运转到当前的节点的时候a、b、c三个人都可以查询到代办信息,然后对应的操作。

数据库的变化就是放在act_ru_identitylink中多了三条记录分别对应同一个任务id。可以参考上面说的act_ru_identitylink描述。

1.1.7. 第三中方式后候选组的方式 候选组是一个集合

这种方式就是就是指定多个人去处理,xml配置信息对应如下所示:

1.1.7.1. xml

<userTask id="usertask1" name="商务采购"  activiti:candidateUsers="${分享牛原创}">
</userTask>

设置的时候我们可以指定一个集合,这个集合变量,我们在程序运行的时候,也是,分割的形式,进行传递值,不过需要注意,这种方式必须是一个集合对象,而不是一个字符串类型。

看下面的两种方式赋值:

第一种方式:

           String candidateUsers=“a,b,c”;

task.setVariable(“分享牛原创”, candidateUsers);

这种方式是错误的,程序运行的时候会报错,报错信息就是没有分享牛原创这个集合。

正确的方式如下:

String [] candidateUsers={
“a”,“b”,“c”};

task.setVariable(“分享牛原创”, Arrays.asList(candidateUsers));

数据库的变化就是放在act_ru_identitylink中多了三条记录分别对应同一个任务id。可以参考上面说的act_ru_identitylink描述。

 

1.1.8. 第四种方式 角色的方式

这种方式就是就是指定多角色去处理,xml配置信息对应如下所示:

1.1.8.1. xml

 <userTask id="usertask1" name="商务采购" activiti:candidateGroups="分享牛原创">
</userTask>

角色使用的时候,多个就是,分割。比如我们需要设定当前的任务处理角色是a、b、c三个角色处理,那我们怎么设置呢?设置的时候,我们就设置为a,b,c即可。

当流程运转到当前的节点的时候a、b、c三个角色都可以查询到代办信息,然后对应的操作。

数据库的变化就是放在act_ru_identitylink中多了三条记录分别对应同一个任务id。可以参考上面说的act_ru_identitylink描述。

1.1.9. 第五种方式 角色的方式 变量方式

这种方式就是就是指定多角色去处理,xml配置信息对应如下所示:

1.1.9.1. xml

 <userTask id="usertask1" name="商务采购" activiti:candidateGroups="分享牛原创">
</userTask>

 设置的时候我们可以指定一个集合,这个集合变量,我们在程序运行的时候,也是,分割的形式,进行传递值,不过需要注意,这种方式必须是一个集合对象,而不是一个字符串类型。

看下面的两种方式赋值:

第一种方式:

           String candidateUsers=“a,b,c”;

task.setVariable(“分享牛原创”, candidateUsers);

这种方式是错误的,程序运行的时候会报错,报错信息就是没有分享牛原创这个集合。

正确的方式如下:

String [] candidateUsers={
“a”,“b”,“c”};

task.setVariable(“分享牛原创”, Arrays.asList(candidateUsers));

1.1.10. 第六种方式 监听器方式

监听器方式,我们可以动态的控制,在这个监听器中,我们可以从数据库中查询出来对应的人或者角色中的人,变量的方式设置进去,达到灵活多用。

具体的监听器的配置如下:

具体的xml如下:

 <userTask id="usertask1" name="商务采购" >
      <extensionElements>
        <activiti:taskListener event="assignment" class="com.daling.bpmn.extend.MyTaskListener"></activiti:taskListener>
      </extensionElements>
    </userTask>

具体的监听实现类如下:

public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask task) {
String [] candidateUsers={"a","b","c"};
task.setVariable("分享牛原创", Arrays.asList(candidateUsers));
}
 
}

1.1.11. 总结

 activiti 任务节点处理人的设置总结如下:

1.指定具体的处理人,可以使用变量方式设置人。也可以直接在模板中定义。

2.候选组,可以在模版中定义,不灵活。灵活的做法,可以指定一个变量赋值。

3.角色,可以在模版中定义,不灵活。灵活的做法,可以指定一个变量赋值。

4.可以使用任务监听器的方式进行赋值操作。

5.变量的方式比较灵活,模板中直接定义不灵活,因为处理节点的人或者角色可能变化。

1.1.12. 遗留点

上面的几种方式我们总结了一下,第一就是指定人、组、角色,这典型是个一维的数据结构,但是实际的项目中,我们的人员关系,一般是,人、角色、部门,这是一个二维结构,很显然上面这种方式就不行了,因为程序是没有办法,同时去区到底是是角色还是部门,而且我们可能还要对角色、部门求交集、并集的需求以及更加复杂的运算,所以我们还是需要扩展工作流中人员设置这一块的。后续的章节详细的讲解。

分享牛,分享、我们是快乐的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152457.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Idea激活码永久有效Idea2021.1.3激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2021.1.3激活码教程-持续更新,一步到位Idea激活码永久有效2021.1.3激活码教程-Windows版永久激活-持续更新,Idea激活码2021.1.3成功激活

  • dumpbin的使用方法_dumpbin 的基础使用

    dumpbin的使用方法_dumpbin 的基础使用oneNeko于2020-10-17发布要查看exe依赖哪些动态库或某个DLL包含哪些接口函数依赖哪些动态库,可以使用depends工具或者vs自带的dumpbin工具,这里使用vs自带的dumpbin启动dumpbin是使用vs命令行的,有两种方法打开:1、打开vs,工具-命令行-开发者命令提示2、开始菜单-visualstdioxxxx-命令提示符使用使用很简单,语法如下:DUMPB…

  • Java 中构造器、初始化块、静态初始化块的执行顺序

    Java 中构造器、初始化块、静态初始化块的执行顺序静态初始化块 &gt; 初始化块 &gt; 构造器 父类 &gt; 子类综合下来顺序就是:父类静态初始化块 子类静态初始化块 父类初始化块 父类构造器 子类初始化块 子类构造器需要注意静态初始化块是在类第一次加载的时候就会进行初始化。…

  • 什么是robots.txt文件

    什么是robots.txt文件一、什么是robots文件Robots.txt文件是网站跟爬虫间的协议,对于专业SEO并不陌生,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。如您的网站未设置robots协议,搜索引擎对网.

  • mysql数据库备份方法_oracle数据库备份文件格式

    mysql数据库备份方法_oracle数据库备份文件格式数据库备份Mysqldump:逻辑备份,热备份,全量xtrabackup:物理,热,全量+增量备份一、什么是MySQL主备情况一:客户端的业务操作,读、写访问的是主库主库通过某种机制,将数据实时同步给备库主库由于有些原因,无法正常响应客户端的请求情况二:完成主备切换客户端读写,访问的是备库(此时备库升级为新主库)数据同步是如何实现的?1.主从同步原理1、在备库执行changemaster命令,绑定主库的信息mysql>CHANGEMAS

  • 单片机控制步进电机

    单片机控制步进电机简介:用单片机控制步进电机正转反转加速减速;由LCD1602实时显示步进电机的状态;F-正转,B-反转;数字越大,转速越大;仿真原理图如下:MCU和LCD1602显示模块:ULN2803驱动和步进电机模块:C语言代码如下:/*—————————–FileName:StepperMotor.hFunction:函数头文件Autho…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号