## 一、概述
有时候,会有这样一种业务需求场景。比如,流程的下一个环节,可以由业务实体中某个属性来决定,而不总是通过人工来选择。因为人工来判断,会显得比较繁琐,而且还容易出错。这个时候,需要流程引擎能够针对表达式进行判断,来决定下一个环节的走向;
从技术的角度来说,流程引擎通过引入”路由环节“的概念,来实现这个目的;
关于路由环节,更详细的信息,可以参考[流程定义/流程环节](../流程定义/流程环节.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】仍然是路由节点,则继续重复这个过程);
- 前言
- 01、系统平台
- 系统管理
- 组织类型
- 单位管理
- 基本功能
- SAAS功能
- 组织管理
- 角色管理
- 人员管理
- 账号管理
- 账户体系
- 账号绑定
- 账号锁定
- 团队管理
- 模板管理
- 补丁管理
- 字段管理
- 静态字典
- 动态字典
- 系统配置
- 菜单配置
- 路由配置
- 编码规则
- 访问控制
- 系统参数
- 字典配置
- 参数定义
- 参数配置
- 属性定义
- 属性设置
- 树形定义
- 树形设置
- 系统监控
- 业务维护
- 工作监控
- 调度监控
- 导入监控
- 日志管理
- 在线监控
- 附件管理
- 附件监控
- 附件应用
- 附件授权
- 上传监控
- 字段监控
- 系统提醒
- 场景配置
- 事件监控
- 提醒记录
- 事件历史
- 日期设置
- 节假日期
- 工作时间
- 日历编制
- 工作日历
- 开放平台
- 微信应用
- 配置信息
- 更新菜单
- 钉钉应用
- 配置信息
- 开放服务
- 应用设置
- 服务管理
- 请求监控
- 请求跟踪
- 移动应用
- 发布管理
- 导航菜单
- 个人管理
- 个人资料
- 内部消息
- 短信中心
- 流程管理
- 流程定义
- 流程环节
- 处理人
- 流程提醒
- 流程签收
- 流程目录
- 流程微调
- 转移动作
- 定义校验
- 流程绑定
- 流程实体设定
- 单业务多流程
- 动态表单绑定
- 环节字段设定
- 转移路由设定
- 流程监控
- 流程催办
- 流程会话
- 流程启动
- 通用待办
- 流程驱动
- 通用已办
- 示范实例
- 流程启动
- 流程待办
- 流程已办
- 常见问题
- 表单管理
- 预留字段
- 字段定义
- 业务应用
- 动态辅表
- 辅表定义
- 辅表应用
- 辅表监控
- 动态主表
- 主表定义
- 业务定义
- 元数据
- 产生机制
- 应用场景
- 02、技术平台
- 重要组件
- 表单引擎
- 流程引擎
- 基础设施
- 系统安全
- 服务集成
- 核心组件
- 核心平台
- 调度容器
- 代码调试
- 相关配置
- 常见问题
- 多线程
- 工作容器
- 开放服务
- 富客户端
- 代理容器
- https
- SSLPinning
- 03、手机应用
- 参数配置
- 技术平台
- 功能设计
- 系统功能
- 应用升级
- 业务模块
- 04、微信应用
- 参数配置
- 多公众号
- 技术平台
- 业务功能
- 平台功能
- 微信客服
- 微信公号
- 05、开放服务
- 接入示例
- 实施方案
- nginx安装
- nginx配置
- nginx运行
- nginx限流
- 实现方案
- 业务操作
- 代码示意
- 06、常见问题
- 性能优化
- 启动优化
- 解决方案
- 实体操作冲突
- 算法说明
- 检验算法
- 注意事项
- 浏览器
- 插件
- 邮箱配置
- 系统维护
- 维护日志
- 维护脚本
- 开发环境
- 07、版权信息
- 平台版权
- 产品版权
- 后记