自动审批节点
自动审批节点(ApproveAutoHandle)用于在审批流中由系统自动执行审批动作,无需人工介入。
概述
自动审批节点在流程流转到该节点时,由系统按配置的审批动作自动处理,并记录审批意见。它适用于「满足条件即自动通过 / 驳回」等场景,例如金额较小自动同意、命中规则自动驳回。
配置项
| 配置项 | 必填 | 说明 |
|---|---|---|
| 节点名称 | 是 | 显示在流程图上的名称,缺省为「自动 审批」 |
| 副标题 | 否 | 节点名称下方的补充说明文本 |
| 审批方式 | 是 | 自动审批的处理方式,缺省为「系统审批」 |
| 审批动作 | 是 | 系统自动执行的动作,缺省为「同意审批」 |
| 审批意见 | 否 | 自动处理时写入的审批意见 |
审批方式取值
| 界面名称 | 值(ApproveMode) | 说明 |
|---|---|---|
| 系统审批 | 0 | 由系统按审批动作自动处理,缺省值 |
审批动作取值
| 界面名称 | 值(ApproveAction) | 说明 |
|---|---|---|
| 同意审批 | 2 | 自动同意,缺省值 |
| 拒绝审批 | 3 | 自动拒绝 |
| 驳回审批 | 4 | 自动驳回 |
| 撤回审批 | 5 | 自动撤回 |
「审批动作」与「审批意见」仅在审批方式为「系统审批」时显示。
使用场景
- 满足条件的单据自动通过
- 命中规则的申请自动拒绝
- 免审批流程的自动流转
下一步
- 审批节点 - 配置人工审批环节
- 条件分支节点 - 配置自动处理的分支条件
- 自动审批节点(详细) - 引擎行为说明
属性明细
以下内容面向技术实现与 AI 检索,说明自动审批节点的节点元数据。
节点元数据
自动审批节点由 FlowCmpType.ApproveAutoHandle 标识:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "ApproveAutoHandle" |
Title | string | 节点名称 | 必填,缺省 "自动审批" |
SubTitle | string | 副标题 | 可为空 |
ApproveMode | string | 审批方式 | "0"(系统审批),缺省 "0" |
ApproveAction | string | 审批动作 | "2"(同意)/ "3"(拒绝)/ "4"(驳回)/ "5"(撤回),缺省 "2" |
Opinion | string | 审批意见 | 可为空 |
order | string | 同级排序 | 例:"5" |
元数据存储示例
{
"ID": "auto1",
"type": "ApproveAutoHandle",
"Title": "自动审批",
"SubTitle": "",
"ApproveMode": "0",
"ApproveAction": "2",
"Opinion": "满足条件,系统自动同意",
"order": "5"
}
服务端执行逻辑
自动审批节点由 ApproveAutoHandleComponentManager 实现,继承 WorkflowComponentManagerBase,组件类型为 FlowComponentTypeEnum.ApproveAutoHandle。
系统审批以内置系统用户(ChameleonConst.DefaultUserId)作为审批人,进入节点后立即执行审批动作并写入审批意见,无需人工介入。
节点 meta 以 Dictionary<string, string> 存储,ApproveMode、ApproveAction 等均以字符串保存,服务端通过 meta.SafeGet("Key") 读取并转换为枚举。
执行时机与场景
| 时机 | 入口 | 说明 |
|---|---|---|
| 保存 / 发布校验 | _VerifyAsync | 校验审批方式与审批动作合法,并计入 FinalResultCount |
| 发起审批(构建节点列表) | _BuildAsync | 以系统用户作为审批人写入 NodeItems |
| 流转到本节点 | _NotifyAsync | 置节点进行中后立即调用 _ExecuteAsync 自动处理 |
_NotifyAsync 内部直接调用 _ExecuteAsync,因此流程流转到该节点时自动完成审批动作并继续流转。
输入参数(meta 键)
| meta 键 | 读取方式 | 含义 |
|---|---|---|
Title | meta.SafeGet("Title") | 节点名称,必填 |
SubTitle | meta.SafeGet("SubTitle") | 副标题 |
ApproveMode | meta.SafeGet("ApproveMode") | 审批方式,当前仅 "0" 系统审批 |
ApproveAction | meta.SafeGet("ApproveAction") | 审批动作:"2" 同意 / "3" 拒绝 / "4" 驳回 / "5" 撤回;为空默认同意 |
Opinion | meta.SafeGet("Opinion") | 自动写入的审批意见 |
上下文入参:context.Result 必须为 WorkflowData,context.Param 必须为 WorkflowOperationRequest,否则分别抛 ApprovalInstanceNotFound / ApprovalRequestParamError。
执行步骤
_VerifyAsync:
- 读取 meta,
Title为空抛AutoApprovalNodeNameNotSet。 - 按
ApproveMode校验:"0"时,ApproveAction非空且不属于2/3/4/5则抛SystemApprovalActionSettingError;其他ApproveMode抛ApprovalModeSettingError。 context.FinalResultCount++,执行VerifyNextAsync。
_BuildAsync:
- 读取
Title、SubTitle,要求context.Result为WorkflowData。 - 新建节点项,
ApproverItems固定为单个系统用户{ UserId = ChameleonConst.DefaultUserId }。 - 追加到
flowData.NodeItems,置context.CmpResult = true,调用BuildNextAsync。
_NotifyAsync:
- 置
flowData.CurrentNode = 节点 Id、flowData.Status = InProgress,节点项Status = InProgress、写入EntryTime。 - 调用
_ExecuteAsync执行自动处理。
_ExecuteAsync:
- 读取
ApproveMode、ApproveAction、Opinion,要求WorkflowData与WorkflowOperationRequest齐备。 - 取节点项的第一个审批人(系统用户),写入
HandleTime与Opinion。 - 按
ApproveMode分支("0"系统审批):ApproveAction为空默认同意,否则(ApprovalActionEnum)int.Parse(ApproveAction)。
ApproveAction | 审批人结果 | 节点状态 | 实例状态 |
|---|---|---|---|
"2" 同意 | Agree | Approved | Approved |
"3" 拒绝 | Disagree | Rejected | Rejected |
"4" 驳回 | Disagree | Returned | Returned |
"5" 撤回 | Disagree | Revoked | Revoked |
- 节点结果为
Approved时调用NotifyNextAsync流转到下一节点;否则调用FinishAsync结束实例。
自动审批流转
上下文写入与实例状态
| 目标 | 写入值 |
|---|---|
节点项 ApproverItems[0] | 系统用户 UserId、HandleTime、Opinion、Result(Agree / Disagree) |
节点项 Status / EntryTime | InProgress → 终态、进入时间 |
flowData.Status | InProgress → Approved / Rejected / Returned / Revoked |
flowData.CurrentNode | 节点 Id |
| 业务数据字段 | 由 UpdateStatusAsync 回写 approvalstatus 等 |
异常与校验
| 场景 | 异常 / 提示 |
|---|---|
| 节点 meta 为空 | AutoApprovalNodeMetaDataError |
| 未设置节点名称 | AutoApprovalNodeNameNotSet |
| 系统审批动作非法 | SystemApprovalActionSettingError |
| 审批方式非法 | ApprovalModeSettingError |
| 实例不存在 | ApprovalInstanceNotFound |
| 审批参数缺失 | ApprovalRequestParamError |
| 找不到人员审批节点 | PersonApprovalNodeNotFound |
权限与限制
- 自动审批节点无需人工操作,进入即完成,不受审批时间限制约束。
ApproveAction的合法性在保存 / 发布校验期即拦截(仅允许2/3/4/5)。- 驳回 / 撤回在此节点视为「不同意」结果,节点项
Result统一记录为Disagree。
相关实现
| 项 | 位置 |
|---|---|
| 组件管理器 | ApproveAutoHandleComponentManager(Components/Managers/WorkFlow/) |
| 系统审批人 | ChameleonConst.DefaultUserId |
| 结束 / 流转 | WorkflowComponentManagerBase.FinishAsync / NotifyNextAsync |