Activiti 笔记
################################
# 部署流程定义涉及到的表
# 流程部署表
SELECT * FROM `act_re_deployment`
# 流程定义表
SELECT * FROM `act_re_procdef`
# 资源文件表
SELECT * FROM `act_ge_bytearray`
# 系统配置表
SELECT * FROM `act_ge_property`
################################
# 启动流程实例涉及到的表
# 流程实例运行时 执行对象表
SELECT * FROM `act_ru_execution`
# 流程实例运行时 身份联系表
SELECT * FROM `act_ru_identitylink`
# 流程实例运行时 用户任务表
SELECT * FROM `act_ru_task`
# 活动节点历史表
SELECT * FROM `act_hi_actinst`
# 身份联系表 历史
SELECT * FROM `act_hi_identitylink`
# 流程实例表 历史
SELECT * FROM `act_hi_procinst`
# 历史任务表
SELECT * FROM `act_hi_taskinst`
################################
# 结束流程实例涉及到的表
# 运行时 表数据全部清空
# 历史表 表数据修改 或者增加了数据
################################
# 设置流程变量涉及到的表
# 运行时流程变量表
SELECT * FROM `act_ru_variable`
# 历史流程变量表
SELECT * FROM `act_hi_varinst`
1.1. 核心组件介绍
1.1.1. 关键对象
- Deployment:流程部署对象,部署一个流程时创建。
对应的表:
act_re_deployment:部署对象表
act_re_procdef:流程定义表
act_ge_bytearray:资源文件表
act_ge_property:主键生成策略表
- ProcessDefinitions:流程定义,部署成功后自动创建。可以从这里获得资源文件等。
- ProcessInstances:流程实例,启动流程时创建。 一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个。
注意
(1)如果是单例流程,执行对象ID就是流程实例ID
(2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同
(3)一个流程中,流程实例只有1个,执行对象可以存在多个。
- Task:任务,执行到某任务环节时生成的任务信息。
对应的表:
act_ru_task:正在执行的任务信息
act_hi_taskinst:已经执行完的历史任务信息
- Execution:执行计划(执行对象),流程实例和流程执行中的所有节点都是Execution,如UserTask、ServiceTask等。
对应的表:
act_ru_execution: 正在执行的信息
act_hi_procinst:已经执行完的历史流程实例信息
act_hi_actinst:存放历史所有完成的活动
![]()
从源代码中可以看出ProcessInstance就是Execution。但在现实意义上有所区别:
这个例子有一个特点:wire money(汇钱)和archive(存档)是并发执行的。 这个时候,总线路代表ProcessInstance,而分线路中每个活动代表Execution。
* 一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
* 当流程按照规则只执行一次的时候,那么流程实例就是执行对象。
1.1.2. 服务接口
- ProcessEngine:流程引擎的抽象,通过它我们可以获得我们需要的一切服务。
在Activiti中最核心的类,其他的类都是由他而来。
- RepositoryService:Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0 XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中。RepositoryService提供了对 repository的存取服务。
- RuntimeService:在Activiti中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
- TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
- IdentityService: Activiti中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的Task。IdentityService提供了对Activiti 系统中的用户和组的管理功能。
- ManagementService: ManagementService提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。
- HistoryService: HistoryService用于获取正在运行或已经完成的流程实例的信息,与 RuntimeService中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。

个人任务及三种分配方式:
1:在taskProcess.bpmn中直接写 assignee=“张三丰"
2:在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。
使用流程变量指定办理人
3,使用TaskListener接口,要使类实现该接口,在类中定义:
delegateTask.setAssignee(assignee);// 指定个人任务的办理人
使用任务ID和办理人重新指定办理人:
processEngine.getTaskService() .setAssignee(taskId, userId);
组任务及三种分配方式:
1:在taskProcess.bpmn中直接写 candidate-users=“小A,小B,小C,小D"
2:在taskProcess.bpmn中写 candidate-users =“#{userIDs}”,变量的值要是String的。
使用流程变量指定办理人
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userIDs", "大大,小小,中中");
3,使用TaskListener接口,使用类实现该接口,在类中定义:
//添加组任务的用户
delegateTask.addCandidateUser(userId1);
delegateTask.addCandidateUser(userId2);
组任务分配给个人任务(认领任务):
processEngine.getTaskService().claim(taskId, userId);
个人任务分配给组任务:
processEngine.getTaskService(). setAssignee(taskId, null);
向组任务添加人员:
processEngine.getTaskService().addCandidateUser(taskId, userId);
向组任务删除人员:
processEngine.getTaskService().deleteCandidateUser(taskId, userId);
个人任务和组任务存放办理人对应的表:
act_ru_identitylink表存放任务的办理人,包括个人任务和组任务,表示正在执行的任务
act_hi_identitylink表存放任务的办理人,包括个人任务和组任务,表示历史任务
区别在于:如果是个人任务TYPE的类型表示participant(参与者)
如果是组任务TYPE的类型表示candidate(候选者)和participant(参与者)


浙公网安备 33010602011771号