审批节点
流程中的人工处理环节,需要指定审批人进行审批操作。
本文档是 审批流 概念的具体配置说明。建议先阅读审批流概念,了解整体架构。
概述
「审批节点」(NodeType 为 ApproveNode)是审批流中的人工审批环节。一个审批节点需要指定审批人与会签方式,并可选配置通知模板、执行接口、审批表单、驳回 / 撤回 / 时间限制等高级能力。当节点有多个审批人时,会签方式决定该节点何时判定通过或拒绝。
配置项
| 配置项 | 必填 | 说明 |
|---|---|---|
| 节点名称 | 是 | 显示在流程图上的名称 |
| 副标题 | 否 | 补充说明文本 |
| 会签方式 | 是 | 多个审批人的通过 / 拒绝规则,默认「所有人同意」 |
| 设置比例或人数 | 条件必填 | 会签方式为「超过比例」「超过人数」时出现 |
| 审批人 | 是 | 通过高级选择器指定,可 多选、可混合多种类型 |
| 审批人审批通知模板 | 否 | 审批人待办通知模板,留空使用系统默认模板 |
| 审批人点击同意后通知发起人模板 | 否 | 留空不发送 |
| 审批人点击不同意后通知发起人模板 | 否 | 留空不发送 |
| 节点同意后通知发起人模板 | 否 | 节点通过时通知发起人,留空不发送 |
| 节点不同意后通知发起人模板 | 否 | 节点拒绝时通知发起人,留空不发送 |
| 自定义执行前触发的接口 | 否 | 审批人操作前调用 |
| 自定义同意后触发的接口 | 否 | 节点通过时调用 |
| 自定义不同意后触发的接口 | 否 | 节点拒绝时调用 |
| 审批表单 | 否 | 审批人处理时使用的表单,仅可选择本对象下的表单 |
| 允许审批人驳回 | 否 | 开关,默认关闭 |
| 驳回时的通知消息模板 | 否 | 开启驳回后出现 |
| 允许选择驳回目标节点 | 否 | 开关,默认关闭;开启后可驳回至中间节点 |
| 允许发起人撤回 | 否 | 开关,默认关闭 |
| 启用审批时间限制 | 否 | 开关,默认关闭 |
| 审批开始时间 / 审批结束时间 | 条件必填 | 开启时间限制后出现 |
| 自定义错误信息 | 否 | 超出时间范围时的提示,留空使用系统默认文案 |
会签方式
会签方式决定当节点存在多个审批人时,如何判定该节点通过 或拒绝。
| 会签方式 | 存储值 | 通过条件 | 拒绝条件 |
|---|---|---|---|
| 所有人同意(任意一人不同意则拒绝) | 0 | 全部审批人同意 | 任意一人不同意 |
| 任意一人同意(所有人不同意则拒绝) | 1 | 任意一人同意 | 全部审批人不同意 |
| 任意一人同意或拒绝 | 2 | 任意一人同意 | 任意一人不同意 |
| 超过x比例人员同意 | 3 | 同意人数占比 ≥ 设定比例 | 同意人数占比 > (100 − 设定比例) |
| 超过x人数人员同意 | 4 | 同意人数 > 设定人数 | 不同意人数 > (总人数 − 设定人数) |
选择「超过x比例人员同意」或「超过x人数人员同意」时,「设置比例或人数」输入框出现,取值范围 0 ~ 100 的整数。
审批人配置
审批人通过高级选择器配置,弹窗左侧按类型分组,可跨类型混合选择多个人或群体,结果以标签形式展示。支持的类型:
| 分组 | 类型值 | 说明 |
|---|---|---|
| 人员 | User | 直接选择具体用户 |
| 组织 | Organization | 按组织选择,展开该组织下的成员 |
| 档案 | Profile | 按档案(用户组)选择 |
| 角色 | Role | 按角色选择,角色内成员均可审批 |
| 组织负责人 | OrganizationResponsiblePersons | 选择组织的负责人 |
| 审批用户选择 | ApprovalUserSelect | 与发起人相关的角色(见下表) |
| 动态用户选择 | DynamicUserSelect | 与当前登录人相关的角色(见下表) |
| 接口用户选择 | MetaInterfaceUserSelect | 由接口动态返回审批人 |
审批时可用的动态角色取值:
| 类型值 | 含义 |
|---|---|
LaunchUser | 发起人 |
LaunchUserLineManager | 发起人直属上级 |
LaunchUserLineManagerLevel2 | 发起人上上级 |
LaunchUserLineManagerLevel3 | 发起人上上上级 |
CurrentLogin | 当前登录人 |
CurrentLoginLineManager | 当前登录人直属上级 |
CurrentLoginLineManagerLevel2 | 当前登录人上上级 |
CurrentLoginLineManagerLevel3 | 当前登录人上上上级 |
审批人配置后,发起审批时会自动解析出每个节点的具体审批人。若任一节点解析不到具体审批人,流程发起会失败。
通知消 息模板
通知模板用于向审批人和发起人推送消息,均「留空则使用系统默认或不发送」:
| 模板 | 触发时机 |
|---|---|
| 审批人审批通知模板 | 流程流转到本节点,通知审批人有待办 |
| 审批人点击同意后通知发起人模板 | 单个审批人点击同意后 |
| 审批人点击不同意后通知发起人模板 | 单个审批人点击不同意后 |
| 节点同意后通知发起人模板 | 本节点整体判定通过后 |
| 节点不同意后通知发起人模板 | 本节点整体判定拒绝后 |
自定义执行接口
审批节点可挂载三个自定义接口,用于扩展业务逻辑:
| 接口 | 触发时机 |
|---|---|
| 自定义执行前触发的接口 | 审批人提交操作(同意 / 不同意 / 驳回 / 撤回)时,在处理逻辑之前调用 |
| 自定义同意后触发的接口 | 本节点判定通过时调用 |
| 自定义不同意后触发的接口 | 本节点判定拒绝时调用 |
接口调用时可选的来源仅包含标签为「功能」的接口,调用时会附带审批上下文参数。
驳回与撤回
| 配置项 | 说明 |
|---|---|
| 允许审批人驳回 | 开启后审批人可驳回;关闭则隐藏驳回按钮 |
| 驳回时的通知消息模板 | 驳回后通知相关人员的模板 |
| 允许选择驳回目标节点 | 开启后驳回可选择目标中间节点,否则默认驳回到发起人 |
| 允许发起人撤回 | 开启后发起人可在流程进行中撤回 |
审批时间限制
开启「启用审批时间限制」后,需设置审批开始时间与结束时间。审批人只能在时间窗口内处理该节点,超出范围会被拒绝提交并提示错误信息;未填自定义错误信息时使用系统默认文案。
下一步
属性明细
以下内容面向技术实现与知识库检索,说明节点属性的属性名、类型、含义与存储格式。节点属性存储在流程图版本 LogicGraphical 的 data.meta 字典中,所有值均为字符串。
节点属性表
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 节点类型 | 固定为 ApproveNode |
Title | string | 节点名称 | 必填,为空时报「审批节点名称未设置」 |
SubTitle | string | 副标题 | 可为空 |
PassCondition | string | 会签方式 | "0" ~ "4",默认 "0" |
PercentOrPersons | string | 比例或人数阈值 | 数字字符串,如 "50";仅 PassCondition 为 "3"/"4" 时有效 |
Approver | string(JSON) | 审批人配置 | AdvancedSelectItem[] 的 JSON 字符串,必填 |
AssignApproversNotificationTemplateId | string | 审批人审批通知模板 ID | 模板 ID,可为空 |
AgreeToLaunchUserNotificationTemplateIdForApproverOperation | string | 审批人点击同意后通知发起人模板 ID | 模板 ID,可为空 |
DisagreeToLaunchUserNotificationTemplateIdForApproverOperation | string | 审批人点击不同意后通知发起人模板 ID | 模板 ID,可为空 |
AgreeToLaunchUserNotificationTemplateIdForNodeFinish | string | 节点同意后通知发起人模板 ID | 模板 ID,可为空 |
DisagreeToLaunchUserNotificationTemplateIdForNodeFinish | string | 节点不同意后通知发起人模板 ID | 模板 ID,可为空 |
BeforeInterfaceId | string | 自定义执行前触发的接口 ID | 接口 ID,可为空 |
AgreeInterfaceId | string | 自定义同意后触发的接口 ID | 接口 ID,可为空 |
UnAgreeInterfaceId | string | 自定义不同意后触发的接口 ID | 接口 ID,可为空 |
MetaFormId | string | 审批表单 ID | 本对象下的表单 ID,可为空 |
DisplayReturnButton | string | 允许审批人驳回 | "true" / "false" |
ReturnMessageTemplateId | string | 驳回时的通知消息模板 ID | 模板 ID,可为空 |
AllowSelectReturnTargetNode | string | 允许选择驳回目标节点 | "true" / "false" |
AllowRevoke | string | 允许发起人撤回 | "true" / "false" |
EnableTimeLimit | string | 启用审批时间限制 | "true" / "false" |
ApproveStartTime | string | 审批开始时间 | 本地时间字符串 |
ApproveEndTime | string | 审批结束时间 | 本地时间字符串 |
CustomTimeLimitErrorMessage | string | 超时自定义错误信息 | 可为空 |
此外,属性面板顶部还提供通用节点属性:ID(只读,节点 ID)、执行优先级 order(数字字符串,影响引擎遍历顺序)。
会签方式枚举
PassCondition 与后端枚举 ApprovalTypeEnum 一一对应:
| 存储值 | 枚举名 | 含义 |
|---|---|---|
"0" | AllAgree | 所有人同意(任意一人不同意则拒绝) |
"1" | AnyAgree | 任意一人同意(所有人不同意则拒绝) |
"2" | AnyOneAgreeOrUnagree | 任意一人同意或拒绝 |
"3" | MoreThanPercentAgree | 超过x比例人员同意 |
"4" | MoreThanPersonsAgree | 超过x人数人员同意 |
审批人存储结构
Approver 存储为 AdvancedSelectItem[] 的 JSON 字符串,每项包含 type、label、value 三个字段。其中「组织负责人」类型的 value 会带 r- 前缀。
[
{ "type": "User", "label": "张三", "value": "u-1001" },
{ "type": "Role", "label": "财务负责人", "value": "role-finance" },
{ "type": "OrganizationResponsiblePersons", "label": "华东大区负责人", "value": "r-org-2001" },
{ "type": "ApprovalUserSelect", "label": "发起人直属上级", "value": "LaunchUserLineManager" },
{ "type": "DynamicUserSelect", "label": "当前登录人", "value": "CurrentLogin" },
{ "type": "MetaInterfaceUserSelect", "label": "获取部门负责人", "value": "iface-3001" }
]
存储示例
{
"shape": "node",
"id": "node-approve-1",
"data": {
"meta": {
"type": "ApproveNode",
"Title": "部门审批",
"SubTitle": "由部门负责人审批",
"PassCondition": "0",
"PercentOrPersons": "0",
"Approver": "[{\"type\":\"Role\",\"label\":\"部门负责人\",\"value\":\"role-dept\"}]",
"AssignApproversNotificationTemplateId": null,
"AgreeToLaunchUserNotificationTemplateIdForApproverOperation": null,
"DisagreeToLaunchUserNotificationTemplateIdForApproverOperation": null,
"AgreeToLaunchUserNotificationTemplateIdForNodeFinish": null,
"DisagreeToLaunchUserNotificationTemplateIdForNodeFinish": null,
"BeforeInterfaceId": null,
"AgreeInterfaceId": null,
"UnAgreeInterfaceId": null,
"MetaFormId": null,
"DisplayReturnButton": "false",
"ReturnMessageTemplateId": null,
"AllowSelectReturnTargetNode": "false",
"AllowRevoke": "false",
"EnableTimeLimit": "false",
"ApproveStartTime": null,
"ApproveEndTime": null,
"CustomTimeLimitErrorMessage": null,
"order": "0"
}
}
}
引擎行为
| 阶段 | 行为 |
|---|---|
| 校验 | Title 必填;Approver 必须可解析且非空,否则报错;该节点计入流程审批节点数量 |
| 构建 | 解析 Approver 生成审批人明细,节点 ApprovalType 取 PassCondition |
| 进入节点 | 重新解析一次最新审批人,写入节点审批人明细;若解析结果为 0 人,标记需要流程转交;否则按「审批人审批通知模板」发送待办通知 |
| 同意 | 按 PassCondition 判定节点是否通过;通过则节点置为已通过、未处理审批人被移除、通知下一节点,并调用「同意后触发的接口」与「节点同意后通知发起人模板」 |
| 不同意 | 按 PassCondition 判定节点是否拒绝;拒绝则节点置为已拒绝,调用「不同意后触发的接口」并结束流程 |
| 驳回 | 删除当前节点所有未处理待办;若指定了驳回目标节点且该节点为审批节点,则重置该节点及后续节点状态并从目标节点前一节点重新流转;否则驳回至发起人,流程置为已驳回 |
| 撤回 | 删除本节点未处理待办并关闭待办,流程置为已撤回 |
| 审批意见必填 | 按「流程属性设置」中 OpinionRequiredWhenAgree / OpinionRequiredWhenDisagree / OpinionRequiredWhenReturn 校验 |
| 时间限制 | 启用时按 ApproveStartTime / ApproveEndTime 校验,超范围抛出错误信息 |
接口调用参数
节点接口通过统一上下文 DicParam 传递审批信息:
| 参数 | 含义 |
|---|---|
WorkflowId | 审批流 ID |
WorkflowNodeId | 当前节点 ID |
WorkflowNodeType | 当前节点类型(如 ApproveNode) |
WorkflowDataIds | 流程实例 ID |
Action | 当前动作(Agree / Disagree / Return / Revoke 等) |
BizDataIds | 业务数据 ID |
MetaObjectCode | 对象编码 |