infra-parent

动态办理人配置

页面操作

经典模式、仿钉钉模式共用节点属性面板。进入审批节点的“办理人设置”,点击“选择办理人”,切换到“动态规则”页签,勾选需要的规则并确定。节点表格和画布回显规则名称,保存并重新打开后保留配置。

规则 实际存储的Warm-Flow表达式 后端处理
申请人 ${wfApplicant} 本次发起流程的已登录用户
本部门副主管(无则主管) ${wfDepartmentApprovers} 查申请人所在部门的有效副主管;排除本人、无效账号后没有候选人时,查本部门主管
上一级部门主管 ${wfParentDepartmentApprovers} 查申请人所在部门的直接上级部门主管,不是上一位审批人的上级

多个副主管任意一人通过,应在节点“基础设置”中选择“或签”。候选人规则只负责选人,不会强行覆盖设计器设置的会签、票签等协作方式。

固定角色、部门、用户仍按原方式选择;同一节点可选择多个办理项,表达式按引擎机制展开后合并。手动输入合法标识、离开输入框时回显名称;不认识的自定义变量不会在表格中被自动删除,但宿主必须自行提供变量,未解析的表达式不能生成有效任务。

规则边界

实现与安全

flow-api 定义动态规则模型和 WorkflowDataProvider 基础数据查询端口;flow-core 实现 WorkflowIdentityProvider,负责规则解析、候选人展开及展示名称组装,不依赖 upm-core。infra-start 的 UpmWorkflowDataProvider 只使用 UPM Service 查询用户、部门和主管任职等基础数据。独立宿主只需用本地 Service、Feign 或 Dubbo 实现 WorkflowDataProvider,不必复制动态规则和目录组装逻辑。

WorkflowAssigneeResolver 在启动前读取当前租户已发布定义,按需要解析规则,将用户ID列表写入实例变量;Warm-Flow原生 ${变量名} 机制解析为任务办理人。沿用现有权限适配和候选人校验,不另建审批引擎,也不要求用户填写监听器。

三个 wf... 变量为服务端保留变量,发起、通过和退回时,业务调用方不得覆盖。当前HTTP办理接口也不接受客户端修改流程变量。未解析的表达式和空候选人会导致事务回滚,不留下无人可办的任务。

本轮使用发起时的审批人快照:后续审批、退回再办理使用同一实例保存的变量,不根据当前审批人的部门重新选人,也不因组织调整自动换人。账号在后续流转时失效则由原有有效账号校验拒绝流转,应由管理员按实际业务处理,不自动找其他人替代。

实例只读图展示规则名称;当前任务和历史中的用户姓名展示仍属于独立的后续需求。

请假流程配置示例

  1. 复制已有 leave 定义创建新版本,不修改已产生实例的旧版本。
  2. 本部门审核节点选择“本部门副主管(无则主管)”,协作方式选择“或签”。
  3. 下一个审批节点选择“上一级部门主管”,配置通过后结束。
  4. 检查申请人所在部门及直接上级部门均已启用,相关主管任职有效且账号可用,然后发布新版本。

不需要增加数据库表、字段或执行SQL;内置规则作为既有节点 permissionFlag 保存,快照使用既有实例变量。

请假示例已支持“申请人提交”普通办理节点:该节点只配置“申请人”规则,作为开始后的唯一首个任务;首次业务提交自动完成,退回到该节点后可修改表单并在原实例重新提交。无需申请人审核自己,也不允许用通用审批按钮绕过表单校验。定义中的申请节点必须唯一,不按名称识别,不能与其他任务并行;配置、接口与权限说明见请假申请示例。其他业务应自行适配申请任务识别与业务表单提交,不能只添加表达式就自动获得表单修改能力。

回归覆盖

引擎集成测试覆盖“申请人提交→本部门多人或签→上级部门主管→结束”,以及退回申请人后重新办理、保留原申请人审批配置、阻止覆盖保留变量、无有效候选人时不创建实例。UPM适配测试覆盖副主管优先、主管兜底、本人排除、停用账号过滤和跨租户部门拒绝。前端组件测试覆盖动态页签选择、表达式手填回显、经典及仿钉钉模式的保存与重新打开。