Skip to main content

审批流开始组件

审批流开始组件(ApproveStart)是审批流画布的入口节点,标识一条审批流的起点。

概念说明

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

概述​

审批流开始组件是审批流画布(场景 MetaWorkflow)的固定入口节点,每个审批流有且仅有一个。新建审批流时画布会自动预置该节点,并自动与审批结束节点连线。

该节点属于引擎固定节点,不可删除、不可禁用,也不能插入到连线中间。它承载审批流的标题信息,并可配置副标题作为补充说明。

配置项​

配置项必填说明
节点名称是显示在流程图上的名称,缺省为「发起审批」
副标题否节点名称下方的补充说明文本

使用说明​

tip
  • 一个审批流只允许存在一个审批流开始节点
  • 审批流的具体发起方式(列表行按钮 / 自定义接口)请在审批流所属对象中配置
  • 审批流级别的属性(审批页面、终态回调接口、审批意见必填等)在流程属性中配置,详见 审批流配置

下一步​

属性明细​

以下内容面向技术实现与 AI 检索,说明审批流开始组件的节点元数据。

节点元数据​

审批流开始组件由 FlowCmpType.ApproveStart 标识:

属性名类型含义取值/存储值
typestring组件类型固定为 "ApproveStart"
Titlestring节点名称必填,为空时报「请输入流程节点名称」
SubTitlestring副标题可为空
orderstring同级排序例:"1"

该节点为固定节点,不支持 IsDisabled(禁用)与 IsFinalResult(输出到最终结果)。

元数据存储示例​

{
"ID": "approve-start",
"type": "ApproveStart",
"Title": "发起审批",
"SubTitle": "",
"order": "1"
}

服务端执行逻辑​

审批流开始组件由 ApproveStartComponentManager 实现,继承 WorkflowComponentManagerBase,组件类型为 FlowComponentTypeEnum.ApproveStart。

审批实例的创建不由节点本身完成,而是由审批引擎 WorkflowDataService.LaunchAsync 在发起时统一创建(或重置)WorkflowData 记录,随后依次调用组件的 Verify → Build → Execute。开始组件是这条链路的入口:Verify 阶段定位唯一开始节点并校验下游,Build 阶段把开始节点写入实例的节点列表,Execute 阶段标记开始节点通过并流转到下一个节点。

元数据均为字符串

节点 meta 以 Dictionary<string, string> 存储,Title、SubTitle、order 等键均以字符串保存,服务端统一通过 meta.SafeGet("Key") 读取。

执行时机与场景​

时机入口说明
保存 / 发布校验_VerifyAsync定位唯一 ApproveStart 节点,校验下游配置合法性
发起审批(构建节点列表)_BuildAsync把开始节点追加进 WorkflowData.NodeItems,并置为当前节点
发起审批(推进流程)_ExecuteAsync把开始节点置为「已通过」,通知并流转到下游节点

BuildFlowDataAsync 与 ExecuteAsync 由 WorkflowComponentManagementApp 编排:前者一次性构建整条实例的节点列表,后者从 WorkflowData.CurrentNode 对应节点开始执行。

输入参数(meta 键)​

meta 键读取方式含义
Titlemeta.SafeGet("Title")节点名称,为空时回退为本地化默认文案「发起审批」(ApprovalStart)
SubTitlemeta.SafeGet("SubTitle")副标题,可为空

上下文入参(context):context.LogicGraphical 为画布逻辑图,context.Result 必须是本次的 WorkflowData 实例,context.CurrentNode 为开始节点。

执行步骤​

_VerifyAsync:

  1. 在 LogicGraphical.Nodes 中查找所有 type == "ApproveStart" 的节点:数量为 0 抛 StartNodeNotFound,大于 1 抛 ProcessCanNotExistMultipleStartCmp。
  2. 以唯一开始节点为 CurrentNode,进入 VerifyNextAsync 校验下游。

_BuildAsync:

  1. 重新定位开始节点(找不到抛 StartNodeNotFound),读取 Title、SubTitle。
  2. 要求 context.Result 为 WorkflowData,否则抛 ApprovalInstanceNotFound。
  3. 新建 WorkflowDataNode { NodeType = "ApproveStart", NodeId, Title, SubTitle } 追加到 flowData.NodeItems,并置 flowData.CurrentNode = 开始节点 Id。
  4. 置 context.CmpResult = true,调用 BuildNextAsync 构建下游节点。

_ExecuteAsync:

  1. 在 flowData.NodeItems 中找到 NodeId == CurrentNode.Id 的节点项,置 EntryTime = FinishedTime = DateTime.UtcNow、Status = Approved。
  2. 置 flowData.CurrentNode = 开始节点 Id、flowData.Status = Approved(表示发起环节已通过)。
  3. 调用 NotifyNextAsync 流转到节点列表中的下一个节点。

下游构建与流转规则​

开始组件的下游即整条审批链的起点,WorkflowComponentManagerBase 提供 VerifyNextAsync / BuildNextAsync / NotifyNextAsync 三个基类方法:

方法规则
VerifyNextAsync无下游抛 ProcessInComplete;下游同时存在 ApproveNode 与 ApproveCondition 抛 ProcessConfigurationError(明细 CanNotExistApprovalAndConditionInSame);ApproveNode 多于 1 个抛 ProcessConfigurationError(明细 DownstreamCannotExistMultipleApprovalNode);下游为条件节点时逐个递归校验,否则校验唯一下游
BuildNextAsync按下游逐个 BuildAsync,返回第一个 CmpResult == true 的分支;全部未命中抛 NotMetApprovalConditions
NotifyNextAsync在 WorkflowData.NodeItems 中按 NodeId 定位当前节点,取其后一项通知;当前已是最后一项时抛 EndNodeCannotContinueApprove

上下文写入与实例状态​

发起时 WorkflowDataService.LaunchAsync 先创建或重置 WorkflowData:

字段写入值
_id新生成 GUID(重新发起时复用原实例)
WorkflowId / WorkflowVersionId审批流主键 / 发布版本主键
BizDataId / MetaObjectCode业务数据 Id / 对象编码
LaunchUserId / LaunchDateTime发起人 / 发起时间(重新发起时更新)
StatusUnstarted(ApprovalStatusEnum 值为 0)
CurrentNode空串(构建时由开始组件赋值为第一个节点)
NodeItems / PendingApproverUserIds / ParticipantUserIds重置为空集合

开始组件只修改实例的 Status、CurrentNode 与节点项状态;业务数据的状态回写由 WorkflowDataService.UpdateStatusAsync 统一完成,写入业务数据对象的 workflowdataid、approvalstatus、approvalnodeid、approvalnodetitle 字段。

异常与校验​

场景异常 / 提示
画布无开始节点StartNodeNotFound
画布存在多个开始节点ProcessCanNotExistMultipleStartCmp
开始节点无下游ProcessInComplete
下游审批节点与条件节点混连ProcessConfigurationError(明细 CanNotExistApprovalAndConditionInSame)
下游存在多个审批节点ProcessConfigurationError(明细 DownstreamCannotExistMultipleApprovalNode)
构建 / 执行时上下文缺少 WorkflowDataApprovalInstanceNotFound
BuildNextAsync 无命中分支NotMetApprovalConditions
NotifyNextAsync 已到末节点EndNodeCannotContinueApprove

权限与限制​

  • 一个审批流只能存在一个 ApproveStart 节点,重复时无法发布。
  • 开始节点是固定引擎节点,Build 阶段强制写入节点列表首项,不可禁用。
  • 下游配置为强约束:审批节点与条件节点不能同级混连,且审批节点在同一层级最多一个。

相关实现​

项位置
组件管理器ApproveStartComponentManager(Components/Managers/WorkFlow/)
审批流基类WorkflowComponentManagerBase(Components/Base/)
流程编排WorkflowComponentManagementApp
实例创建WorkflowDataService.LaunchAsync