activiti 任务节点 处理人设置

1.1.1. 前言

分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)

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

1.1.2. 处理人分配方式

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

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

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

1.1.3. act_ru_identitylink

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

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. 遗留点

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

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

时间: 2024-10-22 14:43:42

activiti 任务节点 处理人设置的相关文章

Java工作流引擎节点接收人设置“指定节点处理人”系列讲解

关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: oralce,mysql,sqlserver,Informix, PostgreSQL  达梦 接受人规则,就是为了解决下一步发送人的范围所制定的各种规则.审批.生产环境有很多的不确定性,更多的时候需要自动确定接受人的范围,为了适应不同场合下的需要我的制定了如下接收人规则. 按上一节点表单指定的字段值

【Hadoop】Hadoop DataNode节点超时时间设置

hadoop datanode节点超时时间设置 datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长.HDFS默认的超时时长为10分钟+30秒.如果定义超时时间为timeout,则超时时长的计算公式为: timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval. 而默认的heartbeat.reche

MLP神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数

神经网络 隐含层节点数的设置]如何设置神经网络隐藏层 的神经元个数 置顶 2017年10月24日 14:25:07 开心果汁 阅读数:12968 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013421629/article/details/78329191 当训练集确定之后,输入层结点数和输出层结点数随之而确定,首先遇到的一个十分重要而又困难的问题是如何优化隐层结点数和隐层数.实验表明,如果隐层结点数过少,网络不能具有必要的学习能力和信息

也谈一下Activiti工作流节点的自由跳转

最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后加载其用户授权策略,等): 只有往前(往已执行过的节点)跳转的功能,没有往后节点(往还没有执行的节点)跳转的功能: 新任务不是追加到已有执行路径上,而是覆盖老任务: 那么就自己动手吧!操作流程其实也简单,大概如下: 按照目标节点(activity)定义创建一个新的任务(task),这个创建过程必须和正常

activiti 配置节点 连线信息获取

1.1.1.?前言 当使用eclipse插件进行流程设计的时候,部署流程之后,我们怎样获取我们定义的全部的节点.连线.关口等配置信息呢?有的人看到这个需求,不免窃喜.这不非常easy嘛,又一次打来bmpn中定义的xml信息,查看不就完了,确实这样的方式是可取的,可是当我们的项目流程在启动的时候,我们想要获取定义的信息的时候,换言之就是 我们能动态的读取里面的信息反馈给系统用户的时候,我们该怎样获取呢?总不能告诉用户你去打开xml文件自己去查看,用户未必能看懂里面的xml定义信息吧. 这样的方式不

activiti学习笔记6-相关设置

一,ACTIVITI提供图像查看模块diagram-viewer,这个模块可以以REST的方式获取数据,然后显示流程进行状况,但是默认的TASK是米黄色,和很多网站色调不搭,只有通过修改来改变颜色,现在修改成白色背景,可以适应各种网站: 1,修改diagram-viewer使用的JS脚本中:ProcessDiagramCanvas.js,这个是主要的绘制脚本,设置TASK颜色的是其中一段代码 var attr = {"stroke-width": this.strokeWidth, s

SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示,SpriteKit有一个Bug需要开发者自己来填. SpriteNode节点在被copy()复制后,会自动被设置为暂停,也就是节点的所有Action全部不可用,如果需要使用node.run(SKAction.run{//c

【Activiti】流程变量的设置与获取

设置流程变量: ----------------1.启动流程时设置流程变量集合,方法如下:    通过runtimeService.startProcessInstanceByKey(definitionKey,Map);Map表示多个流程变量的集合 ----------------2.在任务执行过程中通过任务服务对象设置,方法如下:     通过taskService.setvariables(taskId)设置流程变量集合.  通过taskService.getvariable(taskId

zTree根据json选中节点,并且设置其他节点不可选

首先,在适配目录树时,使用checkbox形式,配置代码如下: 看下效果: 这时的每个节点都处于一个可选的状态(但都未选中),但在实际项目中我们可能还会遇到另外两种情况: 1.根据后台返回的json,选中指定节点(此时所有的节点仍处于可编辑的状态): 代码如下: var treeObj = $.fn.zTree.getZtreeObj("categoryTree"); for(var j = 0; j < zNodes.length; j++){ treeObj.checkNod