🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 有时候,会有这样一种业务需求场景。比如,流程的下一个环节,可以由业务实体中某个属性来决定,而不总是通过人工来选择。因为人工来判断,会显得比较繁琐,而且还容易出错。这个时候,需要流程引擎能够针对表达式进行判断,来决定下一个环节的走向; 从技术的角度来说,流程引擎通过引入”路由环节“的概念,来实现这个目的; 关于路由环节,更详细的信息,可以参考[流程定义/流程环节](../流程定义/流程环节.md)的相关内容; ## 二、设计思路 首先、业务实体绑定流程(或绑定完流程之后重新编辑)的时候,可在业务实体中,设置哪些字段可用在路由中选做表达式,也就是路由表达式字段的可选范围; 然后、就可以针对该范围内的字段,进行路由表达式定义; >[info] 关于字段的设置,如果涉及到有静态/动态数据字典的,请参考如下设置: [系统管理/字段管理](../../系统管理/字段管理.md) ## 三、设置方法 第一步、设定可选字段范围: ![](https://img.kancloud.cn/ac/51/ac51a97457f1cff29e6f85530e875a8e_1366x539.png) 进入绑定设置界面,勾选所有设定路由转移条件可用字段: ![](https://img.kancloud.cn/71/c5/71c5299ca63a15dc7bd6f51fc83829be_1366x549.png) 提交之后,就完成了路由转移条件可用字段范围的选择了; 第二步、进入转移路由的设置; ![](https://img.kancloud.cn/5a/2a/5a2afe3cfc9337442539419d8b588fe9_1364x543.png) 进入设定界面,这里会根据绑定的流程,把那些触发节点是路由环节的转移作为目标对象,展示可以设置表达式的字段、运算符及取值范围(这三个元素构成一个表达式); ![](https://img.kancloud.cn/3f/de/3fde7d345cc795b41f03b53ddbc28e90_1358x546.png) 设置完毕,提交保存,就完成了路由表达式的设定了; >[warning] > 1、注意,这里可以依据实际需要,针对某个转移来具体决定是否启用某个表达式的设定,如果选择为“否”,则流程引擎将无视该表达式设定; > 2、这里,逻辑标记的设定,表明该表达式的逻辑参与类型,如果是“与”,则当前表达式结合其他表达式一起,参与逻辑与运算;如果是“或”,则该表达式结合其他表达式一起,参与逻辑或运算; > 3、每个字段,可以使用多次,也可以不适用,通过每个表达式的复制和删除功能,灵活应用,可以任意组合需要的条件。 ## 四、运行逻辑 流程运行的时候,在流程启动/流程驱动业务中,当下一个环节是路由环节的时候,流程提交之后。流程引擎首先进入路由环节,然后自动完成路由环节。继续开始计算路由环节触发的那些路径的表达式,符合表达式规则的那条路径,将会被选做路由环节的下一个环节,再驱动流程引擎转移进入符合表达式的那条路径的目标环节; 注意,这里实际执行了两次流程环节变迁,第一次是自动执行完路由环节(这里支持级联,也就是递归执行),第二次,才是真正的目的环节;特别注意,这里支持多级路由级联,路由环节后面,可以继续路由,一直可以递归到结束流程为止; ## 五、举例说明 假设做了如下路由表达式设定: ![](https://img.kancloud.cn/bd/7d/bd7d89d434646bd75e5bf8eed5adc540_1349x540.png) 那么运行时的效果如下: 当流程环节流转到【判断】这个路由环节的时候,流程引擎将会把其承载的业务实体中字段【测试申请数(APPLY_NUM)】的值读取出来,然后依据之前设定的表达式,当它的值大于3的时候,它将自动选择下一个环节是【路线1】,流程完成驱动(如果【路线1】仍然是路由节点,则继续重复这个过程),如果它的值小于等于3的时候,它将自动选择的下一个环节是【路线2】(如果【路线2】仍然是路由节点,则继续重复这个过程);