审批流开始组件
审批流开始组件(ApproveStart)是审批流画布的入口节点,标识一条审批流的起点。
概述
审批流开始组件是审批流画布(场景 MetaWorkflow)的固定入口节点,每个审批流有且仅有一个。新建审批流时画布会自动预置该节点,并自动与审批结束节点连线。
该节点属于引擎固定节点,不可删除、不可禁用,也不能插入到连线中间。它承载审批流的标题信息,并可配置副标题作为补充说明。
配置项
| 配置项 | 必填 | 说明 |
|---|---|---|
| 节点名称 | 是 | 显示在流程图上的名称,缺省为「发起审批」 |
| 副标题 | 否 | 节点名称下方的补充说明文本 |
使用说明
- 一个审批流只允许存在一个审批流开始节点
- 审批流的具体发起方式(列表行按钮 / 自定义接口)请在审批流所属对象中配置
- 审批流级别的属性(审批页面、终态回调接口、审批意见必填等)在流程属性中配置,详见 审批流配置
下一步
属性明细
以下内容面向技术实现与 AI 检索,说明审批流开始组件的节点元数据。
节点元数据
审批流开始组件由 FlowCmpType.ApproveStart 标识:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "ApproveStart" |
Title | string | 节点名称 | 必填,为空时报「请输入流程节点名称」 |
SubTitle | string | 副标题 | 可为空 |
order | string | 同级排序 | 例:"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 键 | 读取方式 | 含义 |
|---|---|---|
Title | meta.SafeGet("Title") | 节点名称,为空时回退为本地化默认文案「发起审批」(ApprovalStart) |
SubTitle | meta.SafeGet("SubTitle") | 副标题,可为空 |
上下文入参(context):context.LogicGraphical 为画布逻辑图,context.Result 必须是本次的 WorkflowData 实例,context.CurrentNode 为开始节点。
执行步骤
_VerifyAsync:
- 在
LogicGraphical.Nodes中查找所有type == "ApproveStart"的节点:数量为 0 抛StartNodeNotFound,大于 1 抛ProcessCanNotExistMultipleStartCmp。 - 以唯一开始节点为
CurrentNode,进入VerifyNextAsync校验下游。
_BuildAsync:
- 重新定位开始节点(找不到抛
StartNodeNotFound),读取Title、SubTitle。 - 要求
context.Result为WorkflowData,否则抛ApprovalInstanceNotFound。 - 新建
WorkflowDataNode { NodeType = "ApproveStart", NodeId, Title, SubTitle }追加到flowData.NodeItems,并置flowData.CurrentNode = 开始节点 Id。 - 置
context.CmpResult = true,调用BuildNextAsync构建下游节点。
_ExecuteAsync:
- 在
flowData.NodeItems中找到NodeId == CurrentNode.Id的节点项,置EntryTime = FinishedTime = DateTime.UtcNow、Status = Approved。 - 置
flowData.CurrentNode = 开始节点 Id、flowData.Status = Approved(表示发起 环节已通过)。 - 调用
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 | 发起人 / 发起时间(重新发起时更新) |
Status | Unstarted(ApprovalStatusEnum 值为 0) |
CurrentNode | 空串(构建时由开始组件赋值为第一个节点) |
NodeItems / PendingApproverUserIds / ParticipantUserIds | 重置为空集合 |
开始组件只修改实例的 Status、CurrentNode 与节点项状态;业务数据的状态回写由 WorkflowDataService.UpdateStatusAsync 统一完成,写入业务数据对象的 workflowdataid、approvalstatus、approvalnodeid、approvalnodetitle 字段。
异常与校验
| 场景 | 异常 / 提示 |
|---|---|
| 画布无开始节点 | StartNodeNotFound |
| 画布存在多个开始节点 | ProcessCanNotExistMultipleStartCmp |
| 开始节点无下游 | ProcessInComplete |
| 下游审批节点与条件节点混连 | ProcessConfigurationError(明细 CanNotExistApprovalAndConditionInSame) |
| 下游存在多个审批节点 | ProcessConfigurationError(明细 DownstreamCannotExistMultipleApprovalNode) |
构建 / 执行时上下文缺少 WorkflowData | ApprovalInstanceNotFound |
BuildNextAsync 无命中分支 | NotMetApprovalConditions |
NotifyNextAsync 已到末节点 | EndNodeCannotContinueApprove |
权限与限制
- 一个审批流只能存在一个
ApproveStart节点,重复时无法发布。 - 开始节点是固定引擎节点,
Build阶段强制写入节点列表首项,不可禁用。 - 下游配置为强约束:审批节点与条件节点不能同级混连,且审批节点在同一层级最多一个。
相关实现
| 项 | 位置 |
|---|---|
| 组件管理器 | ApproveStartComponentManager(Components/Managers/WorkFlow/) |
| 审批流基类 | WorkflowComponentManagerBase(Components/Base/) |
| 流程编排 | WorkflowComponentManagementApp |
| 实例创建 | WorkflowDataService.LaunchAsync |