发起审批流组件
发起审批流组件(Workflow)用于在流程中发起一条指定的审批流。
概述
发起审批流组件把当前业务数据提交给指定审批流,由审批引擎创建审批实例并推进流程。通常用于「提交后自动送审」「满足条件时发起审批」等场景。
组件需要先选择审批流所属的实体对象,再选择该对象下的审批流。若未选择操作对象,审批流下拉不会加载数据。
配置项
| 配置项 | 说明 |
|---|---|
| 操作对象 | 审批流所属的实体对象,必填,决定可选的审批流范围 |
| 审批流 | 要发起的审批流,必填 |
| 输出到最终结果 | 开启后该组件结果作为接口返回值 |
执行流程
使用场景
- 业务单据提交后自动送审
- 满足条件时触发多级审批
- 与审批流联动
下一步
属性明细
以下内容面向技术实现与 AI 检索,说明发起审批流组件的节点元数据。
节点元数据
发起审批流组件由 FlowCmpType.Workflow 标识:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "Workflow" |
MetaObjectId | string(GUID) | 审批流所属实体对象 | 缺省取当前接口所属对象 |
WorkflowId | string(GUID) | 要发起的审批流主键 | 审批流主键 |
IsFinalResult | string(bool) | 是否输出到最终结果 | "true" / "false" |
order | string | 同级排序 | 例:"5" |
元数据存储示例
{
"ID": "workflow1",
"type": "Workflow",
"MetaObjectId": "3f9c0b2e-2d3a-4e6f-9c11-0f7a5b8d2e10",
"WorkflowId": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"IsFinalResult": "false",
"order": "5"
}
审批流数据源
「审批流」下拉通过 POST /api/DataSource/GetMetaWorkflowDataSource 获取,请求时携带所选 metaObjectId;未选操作对象时返回空。
服务端执行逻辑
发起审批流组件由 WorkflowComponentManager(继承 InterfaceComponentManagerBase)实现,组件类型为 FlowComponentTypeEnum.Workflow。审批实例的创建与推进由审批引擎 IWorkflowApp 负责;审批节点类组件(ApproveStart、ApproveNode、ApproveEnd、ApproveCondition、ApproveAutoHandle)则由 WorkflowComponentManagerBase 的 Verify / Build / Notify 流程处理。
节点
meta中的所有值均以字符串存储,服务端统一通过SafeGet("Key")读取字符串。
执行时机与场景
流程执行到该节点时,针对上下文中的业务数据逐条发起指定审批流,返回审批实例 Id。常用于「提交后自动送审」「满足条件时发起审批」。
输入参数(meta 键)
| 键 | 读取方式 | 含义 |
|---|---|---|
WorkflowId | meta.SafeGet("WorkflowId") | 要发起的审批流主键,必填 |
MetaObjectId | meta.SafeGet("MetaObjectId") | 审批流所属实体对象(界面用于过滤可选审批流) |
IsFinalResult | meta.SafeGet("IsFinalResult") | "true" 时写入成功响应 |
IsDisabled | meta.SafeGet("IsDisabled") == "true" | 为 true 时跳过本组件 |
上下文入参(context.DicParam):
| 键 | 说明 |
|---|---|
BizDataIds | 当前操作的业务数据 Id,多个以英文逗号分隔 |
MetaObjectId | 业务数据所属对象 Id |
WorkflowLaunchUserId | 审批发起人 Id,为空时审批引擎默认取当前登录人 |
WorkflowId | 上游脚本可预设,用于动态覆盖 meta 中的审批流 |
执行步骤
- 从 meta 读取
WorkflowId,从DicParam读取BizDataIds、MetaObjectId、WorkflowLaunchUserId、WorkflowId。 BizDataIds为空或存在非 GUID 项时抛出异常。- 若
DicParam已含WorkflowId(上游脚本设置),以其覆盖 meta 中的值。 - 对每个
bizDataId调用IWorkflowApp.LaunchAsync(new WorkflowOperationRequest { WorkflowId, BizDataId, MetaObjectId, LaunchUserId }),收集返回的审批实例 Id。 - 写回上下文:
context.DicParam["WorkflowId"] = workflowId,context.DicParam["WorkflowDataIds"] = 实例 Id 逗号串。 IsFinalResult = "true"时context.Result = ResponseResult.Success()。- 调用
ExecuteNextAsync继续下游。
输出与上下文
| 字段 | 说明 |
|---|---|
context.DicParam["WorkflowId"] | 本次实际使用的审批流 Id |
context.DicParam["WorkflowDataIds"] | 新创建的审批实例 Id 集合(逗号分隔) |
context.Result | IsFinalResult = "true" 时为 ResponseResult.Success() |
上下文参数含义详见 组件上下文。
权限、安全与限制
- 批量业务数据会逐条发起审批实例,耗时随数量线性增长。
- 无审批流 Id 时校验期即报错。
- 发起人未指定时由审批引擎取当前登录人。
异常与校验
- 校验期:
WorkflowId为空抛「流程 Id 未设置」。 - 执行期:业务数据 Id 缺失或非 GUID 抛异常;审批流不存在由引擎抛出。