天天看点

Activiti流量变量(九)

流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti

结合时少不了流程变量,流程变量就是 activiti 在管理工作流时根据管理需要而设置的变量。

比如在请假流程流转时如果请假天数大于 3 天则由总经理审核,否则由人事直接审核, 请假天

数就可以设置为流程变量,在流程流转时使用。

注意:虽然流程变量中可以存储业务数据可以通过 activiti 的 api 查询流程变量从而实现 查询业务

数据,但是不建议这样使用,因为业务数据查询由业务系统负责, activiti 设置流程变量是为了流程

执行需要而创建 。

Activiti流量变量(九)

 注意:如果将 pojo 存储到流程变量中,必须实现序列化接口 serializable,为了防止由于新增字段无

法反序列化,需要生成 serialVersionUID。

流程变量的作用域默认是一个流程实例(processInstance),也可以是一个任务(task)或一个执行实例

(execution),这三个作用域流程实例的范围最大,可以称为 global 变量,任务和执行实例仅仅是针对

一个任务和一个执行实例范围,范围没有流程实例大, 称为 local 变量。

Activiti流量变量(九)

变量名不允许重复

global 变量中变量名不允许重复,设置相同名称的变量,后设置的值会覆盖前设置的变量值。

Local 变量由于在不同的任务或不同的执行实例中,作用域互不影响,变量名可以相同没有影响。

Local 变量名也可以和 global 变量名相同,没有影响。

第一步:设置流程变量

第二步:通过 UEL 表达式使用流程变量

1> 可以在 assignee 处设置 UEL 表达式,表达式的值为任务的负责人

比如: ${assignee}, assignee 就是一个流程变量名称

Activiti 获取 UEL 表达式的值 ,即流程变量 assignee 的值 ,将 assignee 的值作为任务的负责人

进行任务分配

2> 可以在连线上设置 UEL 表达式,决定流程走向

比如: ${price>=10000}和${price<10000}: price 就是一个流程变量名称, uel 表达式结果类型为

布尔类型

如果 UEL 表达式是 true,要决定 流程执行走向。

员工创建请假申请单,由部门经理审核,部门经理审核通过后请假 3 天及以下由人事经理直接

审核, 3 天以上先由总经理审核,总经理审核通过再由人事经理存档。

Activiti流量变量(九)

请假天数大于等于 3 连线条件:

Activiti流量变量(九)
Activiti流量变量(九)

 请假天数小于 3 连线条件:

Activiti流量变量(九)
Activiti流量变量(九)

在部门经理审核前设置流程变量,变量值为请假单信息(包括请假天数),部门经理审核后可以根据

流程变量的值决定流程走向。

在启动流程时设置流程变量,变量的作用域是整个流程实例。

通过 map<key,value>设置流程变量, map 中可以设置多个变量,这个 key 就是流程变量的名字。

 先重新部署项目

Activiti流量变量(九)

 实体类

说明:

startProcessInstanceByKey(processDefinitionKey, variables)流程变量作用域是一个流

程实例,流程变量使用 Map 存储,同一个流程实例设置变量 map 中 key 相同,后者覆盖前者。

Activiti流量变量(九)

 可以自行测试当天数小于等于3天的时候,是流转不到他的

在完成任务时设置流程变量,该流程变量只有在该任务完成后其它结点才可使用该变量,它的作用

域是整个流程实例,如果设置的流程变量的 key 在流程实例中已存在相同的名字则后设置的变量替

换前边设置的变量。

这里需要在创建请假单任务完成时设置流程变量

通过流程实例 id 设置全局变量,该流程实例必须未执行完成。

操作数据库表

设置流程变量会在当前执行流程变量表插入记录,同时也会在历史流程变量表也插入记录。

SELECT * FROM act_ru_variable #当前流程变量表

记录当前运行流程实例可使用的流程变量,包括 global 和 local 变量

Id_:主键

Type_:变量类型

Name_:变量名称

Execution_id_:所属流程实例执行 id, global 和 local 变量都存储

Proc_inst_id_:所属流程实例 id, global 和 local 变量都存储

Task_id_:所属任务 id, local 变量存储

Bytearray_: serializable 类型变量存储对应 act_ge_bytearray 表的 id

Double_: double 类型变量值

Long_: long 类型变量值

Text_: text 类型变量值

SELECT * FROM act_hi_varinst #历史流程变量表

记录所有已创建的流程变量,包括 global 和 local 变量

字段意义参考当前流程变量表

任务办理时设置 local 流程变量,当前运行的流程实例只能在该任务结束前使用,任务结束该变量无

法在当前流程实例使用,可以通过查询历史任务查询。

设置作用域为任务的 local 变量,每个任务可以设置同名的变量,互不影响。

注意:

任务 id 必须是当前待办任务 id, act_ru_task 中存在。