企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[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 | +------+------+--------+-----------+---------------+---------------+----------+---------------+---------+-------+----------+--------+ ```