activiti参考5-任务TASK
一、概要
1,设计TASK的表主要是:ACT_RU_TASK,ACT_HI_TASKINST(见参考-activiti表);
2,任务主要有:人工任务(usertask),服务任务(servicetask)等;
3,候选人/候选组(candidate):可以执行任务的一类人或者多个组,候选人/候选组中都可以去签收任务,一旦某人签收,就成为受理人,其他人就不能再签收受理此任务;usertask流程图中,candidate标示候选;候选人涉及的表ACT_RU_IDENTITYLINK;
4,受理人(assignee):有两种情况,一种是候选人/组中有人签收任务后成为受理人,另外一种是流程图中直接指定受理人,但是可以指定一个动态受理人;受理人涉及的表ACT_RU_TASK;
5,持有人(owner):持有人设置主要是存入历史表中,用于历史任务的查询,涉及的表ACT_HI_TASKINST;
二、任务操作
1,创建TASK任务与设置权限:可以使用代码创建任务,但是实际操作中都是绘制流程图。绘制TASK后,在属性可以设置候选人和受理人,一般都是设置候选人,因为固定受理人不太符合程序变动;

候选人设置了deptleader,该值将部署在表ACT_RU_IDENTITYLINK中,查看xml看见:
|
1
2
3
|
//设置了候选组 <userTask id="deptLeaderAudit" name="部门领导审批" activiti:candidateGroups="deptLeader"> </userTask> |
完整的XML(无图形位置信息)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<process id="leave" name="请假流程" isExecutable="true"> <documentation>请假流程演示</documentation> <startEvent id="startevent1" name="Start" activiti:initiator="applyUserId"></startEvent> <userTask id="deptLeaderAudit" name="部门领导审批" activiti:candidateGroups="deptLeader"></userTask> <exclusiveGateway id="exclusivegateway5" name="Exclusive Gateway"></exclusiveGateway> <userTask id="modifyApply" name="调整申请" activiti:assignee="${applyUserId}"> <extensionElements> <activiti:taskListener event="complete" delegateExpression="${afterModifyApplyContentProcessor}"></activiti:taskListener> </extensionElements> </userTask> <userTask id="hrAudit" name="人事审批" activiti:candidateGroups="hr"></userTask> <exclusiveGateway id="exclusivegateway6" name="Exclusive Gateway"></exclusiveGateway> <userTask id="reportBack" name="销假" activiti:assignee="${applyUserId}"> <extensionElements> <activiti:taskListener event="complete" delegateExpression="${reportBackEndProcessor}"></activiti:taskListener> </extensionElements> </userTask> <endEvent id="endevent1" name="End"></endEvent> <exclusiveGateway id="exclusivegateway7" name="Exclusive Gateway"></exclusiveGateway> <sequenceFlow id="flow2" sourceRef="startevent1" targetRef="deptLeaderAudit"></sequenceFlow> <sequenceFlow id="flow3" sourceRef="deptLeaderAudit" targetRef="exclusivegateway5"></sequenceFlow> <sequenceFlow id="flow4" name="不同意" sourceRef="exclusivegateway5" targetRef="modifyApply"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!deptLeaderPass}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow5" name="同意" sourceRef="exclusivegateway5" targetRef="hrAudit"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderPass}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow6" sourceRef="hrAudit" targetRef="exclusivegateway6"></sequenceFlow> <sequenceFlow id="flow7" name="同意" sourceRef="exclusivegateway6" targetRef="reportBack"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrPass}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow8" sourceRef="reportBack" targetRef="endevent1"></sequenceFlow> <sequenceFlow id="flow9" name="不同意" sourceRef="exclusivegateway6" targetRef="modifyApply"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!hrPass}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow10" name="重新申请" sourceRef="exclusivegateway7" targetRef="deptLeaderAudit"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow11" sourceRef="modifyApply" targetRef="exclusivegateway7"></sequenceFlow> <sequenceFlow id="flow12" name="结束流程" sourceRef="exclusivegateway7" targetRef="endevent1"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!reApply}]]></conditionExpression> </sequenceFlow> </process> |
2,查询候选任务
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//根据候选组ID查询拥有任务List<Task> tasks = taskService .createTaskQuery() .taskCandidateGroup(groupA.getId()) .list();for (Task task : tasks) {System.out.println(task.getName());} //根据用户ID查询任务tasks = taskService .createTaskQuery() .taskCandidateUser(user.getId()) .list();for (Task task : tasks) {System.out.println(task.getName());}//调用taskCandidateGroupInList<String> groupIds = new ArrayList<String>(); groupIds.add(groupA.getId()); groupIds.add(groupB.getId());tasks = taskService .createTaskQuery() .taskCandidateGroupIn(groupIds) .list();for (Task task : tasks) {System.out.println(task.getName());} //查询权限数据List<IdentityLink> links = taskService .getIdentityLinksForTask(tasks.get(0) .getId());System.out.println("关系数据量: " + links.size());} |
activiti参考5-任务TASK的更多相关文章
- 定时管理器框架-Task.MainForm
入住博客园4年多了,一直都是看别人的博客,学习别人的知识,为各个默默无私贡献自己技术总结的朋友们顶一个:这几天突然觉得是时候加入该队列中,贡献出自己微弱的力量,努力做到每个月有不同学习总结,知识学习的 ...
- activiti数据库表结构全貌解析
http://www.jianshu.com/p/e6971e8a8dad 下面本人介绍一些activiti这款开源流程设计引擎的数据库表结构,首先阐述:我们刚开始接触或者使用一个新的东西(技术)时我 ...
- Activiti工作流学习(一)部署对象和流程定义
一.前言 前一段时间在工作中,使用了流程审批,对api的调用非常不熟悉,都是调用别人写好的接口在界面上进行显示,基本了解了流程审批的主要步骤,现对流程审批进行学习,主要是调用api进行CRUD操作,感 ...
- [activiti] Activiti 5.18 的Mybatis版本依赖问题
测试activiti 是查询Task时抛出一个异常: org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat ...
- Activiti工作流学习-----基于5.19.0版本(3)
前面关于eventType的属性值的配置简单的说了一下,activiti支持的值如下表所示:这是我摘抄的activiti官网的 Event 的名字 描述 Event的类名 ENGINE_CREATED ...
- c# async Task await Result 死锁
最近项目数据量较大,使用 async Task异步增加执行效率 遇到问题,当前有2个计算非常耗时,现在需要你优化一下,这2个计算并行执行,2个计算执行完成后将2个结果sum返回给用户 当前我是这样实现 ...
- 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(三)
题外话: 最近在忙公司的云项目空闲时间不是很多,所以很久没来更新,今天补上一篇! 回顾: 前几篇介绍了一下设计器的界面和Draw2d基础知识,这篇讲解一下本设计器如何扩展Draw2d. 进入主题: 先 ...
- (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)
1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...
- Activiti 5.17 实体对象与类和数据库表的映射
一.Activiti 5.17 mybatis的mapping文件声明映射的实体对象关系. <configuration><settings><settingname=& ...
随机推荐
- POJ 1787 Charlie's Change (完全背包/多重背包,输出方案的物品个数)
网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量, ...
- C++默认参数(转)
函数的默认参数值,即在定义参数的时候同时给它一个初始值.在调用函数的时候,我们可以省略含有默认值的参数.也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值. void Func( ...
- 未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
问题: 未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3 ...
- tomcat下context.xml中JNDI数据源配置
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- asp.net dataTable添加列
DataTable dtNew = new DataTable(); dtNew.Columns.Add("ItemNo");//序列号列 dtNew.Columns.Add(&q ...
- Tomcat中xml文件引入各种schma xsd问题原理
1.Tomcat下的xml引入各种xsd约束,其实是为了对应xml中用到的各个标签
- Java-马士兵设计模式学习笔记-责任链模式-处理数据
一.目标 数据提交前做各种处理 二.代码 1.MsgProcessor.java public class MsgProcessor { private List<Filter> filt ...
- 针对安卓java入门:条件语句和循环语句
条件语句: if(){..} if(){}else{..} if(){..}else if(){..} if(){..}else if(){..}else{..} switch(x){ case x: ...
- 如何在Java客户端调用RESTful服务
在这个例子中,我们将看到如何使用java.net包实用工具,创建一个访问REST服务RESTful的客户端.当然这不是创建一个RESTful客户端最简单的方法,因为你必须自己读取服务器端的响应,以及J ...
- *在Win7中安装JDK1.7并配置环境变量
安装的过程就不废话了. 下面是环境变量的配置. 1. 配置环境变量 单机右键‘计算机--属性’ 2.点击高级系统设置 3.点击‘环境变量’ 4.增加"JAVA_HOME"系统变 ...