[TOC]
# 1. UEL 表达式
UEL 表达式是 java EE6 规范的一部分, UEL(Unified Expression Language)即 统一表达式语言, activiti 支持两个 UEL 表达式: UEL-value 和 UEL-method。
<br/>
**1. UEL-value**
:-: ![](https://img.kancloud.cn/57/5b/575b5d43342f7728065cfcbe5c5723da_1212x408.png)
写法一
![](https://img.kancloud.cn/95/73/957325f3731860b695b543c01ddf4737_1238x427.png)
写法二
**2. UEL-method**
![](https://img.kancloud.cn/50/a3/50a33917a2a762f8611809730d5f371f_1304x412.png)
<br/>
**3. UEL-value与UEL-method配合使用**
![](https://img.kancloud.cn/fd/67/fd67ee21dc6c3374f9bdf73785ac8302_1410x431.png)
<br/>
**4. 其他**
表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。
```
${order.price > 100 && order.price < 250}
```
<br/>
>[warning]注意:由于使用了表达式分配,必须保证在任务执行过程表达式执行成功,比如:某个任务使用了表达式`${order.price > 100 && order.price < 250}`,当执行该任务时必须保证 order 在流程变量中存在,否则异常。
****
参考文档:https://tkjohn.github.io/flowable-userguide/#apiExpressions
<br/>
# 2. 演示UEL-value的使用
下面演示UEL-value的使用,其他的也是一样的道理,步骤如下:
<br/>
**1. 定义流程变量**
:-: ![](https://img.kancloud.cn/9e/20/9e20c3e02ba15956df1a59c0ed09ee7b_1157x172.png)
`evection-uel.bpmn`
```xml
...
<userTask activiti:assignee="${assignee0}" activiti:exclusive="true" id="_3" name="创建出差申请单" />
<endEvent id="_7" name="EndEvent" />
<sequenceFlow id="_8" sourceRef="_2" targetRef="_3" />
<userTask activiti:assignee="${assignee1}" activiti:exclusive="true" id="_14" name="部门经理审批" />
<sequenceFlow id="_15" sourceRef="_3" targetRef="_14" />
<userTask activiti:assignee="${assignee2}" activiti:exclusive="true" id="_16" name="总经理审批" />
<userTask activiti:assignee="${assignee3}" activiti:exclusive="true" id="_17" name="财务审批" />
...
...
```
**2. 设置流程变量**
```java
public class UelAssigneeDemo {
/**
* 1. 流程部署
*/
@Test
public void testDeployment() {
//1、获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2、获取RepositoryServcie
RepositoryService repositoryService = processEngine.getRepositoryService();
//3、部署流程
Deployment deploy = repositoryService.createDeployment()
.name("出差申请流程") //流程名称
.addClasspathResource("bpmn/evection-uel.bpmn")
.deploy();
//流程部署id=10001
System.out.println("流程部署id=" + deploy.getId());
//流程部署名字=出差申请流程
System.out.println("流程部署名字=" + deploy.getName());
}
/**
* 2. 启动流程,并设置流程变量
*/
@Test
public void startAssigneeUel() {
//1、获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2、获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//3、设定assignee的值,用来替换uel表达式
Map<String, Object> assigneeMap = new HashMap<String, Object>(1);
assigneeMap.put("assignee0", "张三");
assigneeMap.put("assignee1", "李经理");
assigneeMap.put("assignee2", "王总经理");
assigneeMap.put("assignee3", "赵财务");
//4、根据流程key启动流程实例并设置变量
runtimeService.startProcessInstanceByKey("evection-uel", assigneeMap);
}
}
```
```sql
#设置的流程变量如下
mysql> select * from act_ru_variable;
+------+------+--------+-----------+---------------+---------------+----------+---------------+---------+-------+----------+--------+
| ID_ | REV_ | TYPE_ | NAME_ | EXECUTION_ID_ | PROC_INST_ID_ | TASK_ID_ | BYTEARRAY_ID_ | DOUBLE_ | LONG_ | TEXT_ | TEXT2_ |
+------+------+--------+-----------+---------------+---------------+----------+---------------+---------+-------+----------+--------+
| 2502 | 1 | string | assignee3 | 2501 | 2501 | NULL | NULL | NULL | NULL | 赵财务 | NULL |
| 2503 | 1 | string | assignee0 | 2501 | 2501 | NULL | NULL | NULL | NULL | 张三 | NULL |
| 2504 | 1 | string | assignee2 | 2501 | 2501 | NULL | NULL | NULL | NULL | 王总经理 | NULL |
| 2505 | 1 | string | assignee1 | 2501 | 2501 | NULL | NULL | NULL | NULL | 李经理 | NULL |
+------+------+--------+-----------+---------------+---------------+----------+---------------+---------+-------+----------+--------+
```
- Activiti流程引擎
- 工作流介绍
- Activiti是什么
- Activiti流程处理步骤
- Activiti环境搭建
- 搭建步骤
- 表结构介绍
- ActivitiAPI结构
- 认识流程符号
- 流程设计器的使用
- 流程处理步骤
- 乱码问题
- 流程实例
- 流程实例是什么
- 业务标识
- 查询流程实例
- 挂起/激活流程实例
- 个人任务
- 分配任务负责人
- 查询待办任务
- 办理权限
- 流程变量
- 流程变量类型
- 流程变量作用域
- 使用流程变量控制流程
- 组任务
- 设置任务候选人
- 组任务办理流程
- 网关
- 4种网关类型
- 排他网关
- 并行网关
- 包含网关
- 事件网关
- Spring整合Activiti
- SpringBoot整合Activiti
- Flowable流程引擎
- Flowable是什么
- Flowable与Activiti
- Flowable环境搭建
- FlowableAPI
- 流程引擎API与服务
- 流程处理步骤
- 流程部署
- 流程部署方式
- 流程定义版本
- 删除已部署的流程
- 下载资源
- 流程实例
- 什么是流程实例
- 业务标识
- 查询流程实例
- 挂起/激活流程实例
- 分配任务负责人
- 固定分配
- UEL表达式分配
- 监听器分配
- 办理权限
- 流程变量
- 流程变量类型
- 流程变量作用域
- 流程变量控制流程
- 组任务
- 设置任务候选人
- 组任务办理流程
- 网关
- 排他网关
- 并行网关
- 包含网关
- 事件网关
- 历史查询
- 查询历史
- Spring整合Flowable
- 配置文件整合
- 配置类整合
- SpringBoot整合Flowable