Skip to main content

自动审批节点

自动审批节点(ApproveAutoHandle)用于在审批流中由系统自动执行审批动作,无需人工介入。

概念说明

本文档是 平台接口 组件说明的一部分。审批流的整体概念请参考 审批流配置。

概述​

自动审批节点在流程流转到该节点时,由系统按配置的审批动作自动处理,并记录审批意见。它适用于「满足条件即自动通过 / 驳回」等场景,例如金额较小自动同意、命中规则自动驳回。

配置项​

配置项必填说明
节点名称是显示在流程图上的名称,缺省为「自动审批」
副标题否节点名称下方的补充说明文本
审批方式是自动审批的处理方式,缺省为「系统审批」
审批动作是系统自动执行的动作,缺省为「同意审批」
审批意见否自动处理时写入的审批意见

审批方式取值​

界面名称值(ApproveMode)说明
系统审批0由系统按审批动作自动处理,缺省值

审批动作取值​

界面名称值(ApproveAction)说明
同意审批2自动同意,缺省值
拒绝审批3自动拒绝
驳回审批4自动驳回
撤回审批5自动撤回

「审批动作」与「审批意见」仅在审批方式为「系统审批」时显示。

使用场景​

  • 满足条件的单据自动通过
  • 命中规则的申请自动拒绝
  • 免审批流程的自动流转

下一步​

属性明细​

以下内容面向技术实现与 AI 检索,说明自动审批节点的节点元数据。

节点元数据​

自动审批节点由 FlowCmpType.ApproveAutoHandle 标识:

属性名类型含义取值/存储值
typestring组件类型固定为 "ApproveAutoHandle"
Titlestring节点名称必填,缺省 "自动审批"
SubTitlestring副标题可为空
ApproveModestring审批方式"0"(系统审批),缺省 "0"
ApproveActionstring审批动作"2"(同意)/ "3"(拒绝)/ "4"(驳回)/ "5"(撤回),缺省 "2"
Opinionstring审批意见可为空
orderstring同级排序例:"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 键读取方式含义
Titlemeta.SafeGet("Title")节点名称,必填
SubTitlemeta.SafeGet("SubTitle")副标题
ApproveModemeta.SafeGet("ApproveMode")审批方式,当前仅 "0" 系统审批
ApproveActionmeta.SafeGet("ApproveAction")审批动作:"2" 同意 / "3" 拒绝 / "4" 驳回 / "5" 撤回;为空默认同意
Opinionmeta.SafeGet("Opinion")自动写入的审批意见

上下文入参:context.Result 必须为 WorkflowData,context.Param 必须为 WorkflowOperationRequest,否则分别抛 ApprovalInstanceNotFound / ApprovalRequestParamError。

执行步骤​

_VerifyAsync:

  1. 读取 meta,Title 为空抛 AutoApprovalNodeNameNotSet。
  2. 按 ApproveMode 校验:"0" 时,ApproveAction 非空且不属于 2/3/4/5 则抛 SystemApprovalActionSettingError;其他 ApproveMode 抛 ApprovalModeSettingError。
  3. context.FinalResultCount++,执行 VerifyNextAsync。

_BuildAsync:

  1. 读取 Title、SubTitle,要求 context.Result 为 WorkflowData。
  2. 新建节点项,ApproverItems 固定为单个系统用户 { UserId = ChameleonConst.DefaultUserId }。
  3. 追加到 flowData.NodeItems,置 context.CmpResult = true,调用 BuildNextAsync。

_NotifyAsync:

  1. 置 flowData.CurrentNode = 节点 Id、flowData.Status = InProgress,节点项 Status = InProgress、写入 EntryTime。
  2. 调用 _ExecuteAsync 执行自动处理。

_ExecuteAsync:

  1. 读取 ApproveMode、ApproveAction、Opinion,要求 WorkflowData 与 WorkflowOperationRequest 齐备。
  2. 取节点项的第一个审批人(系统用户),写入 HandleTime 与 Opinion。
  3. 按 ApproveMode 分支("0" 系统审批):ApproveAction 为空默认同意,否则 (ApprovalActionEnum)int.Parse(ApproveAction)。
ApproveAction审批人结果节点状态实例状态
"2" 同意AgreeApprovedApproved
"3" 拒绝DisagreeRejectedRejected
"4" 驳回DisagreeReturnedReturned
"5" 撤回DisagreeRevokedRevoked
  1. 节点结果为 Approved 时调用 NotifyNextAsync 流转到下一节点;否则调用 FinishAsync 结束实例。

自动审批流转​

上下文写入与实例状态​

目标写入值
节点项 ApproverItems[0]系统用户 UserId、HandleTime、Opinion、Result(Agree / Disagree)
节点项 Status / EntryTimeInProgress → 终态、进入时间
flowData.StatusInProgress → 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