驰骋JFlow父子流程-功能清单

CCFlow 父子流程需求列表

依据代码整理:CCFlow/Components/BP.WFVue3/src/WF/Admin/AttrNode/SubFlowVue3/src/WF/WorkOpt/SubFlow.vue


一、总体架构

CCFlow 父子流程采用「节点级父子流程组件(FrmSubFlow)+ 子流程绑定配置(WF_NodeSubFlow)」双层结构:

层级 数据实体 作用
组件层 FrmSubFlow(挂接在 WF_Node 控制表单上子流程区域的显示、权限、汇总规则
绑定层 SubFlowHand/Auto/YanXu/Guide 定义具体子流程编号、启动方式、联动与数据规则

子流程类型(SubFlowType)共 4 种:0 手动启动、1 自动触发、2 延续、3 前置导航


二、功能需求明细表

(一)设计配置 --- 父子流程组件

功能类别 功能名称 功能说明 需求场景概述
组件基础 父子流程组件启用 SFSta:禁用 / 启用 / 只读;启用后自动在表单创建「父子流程」分组字段(GroupCtrlType.SubFlow 在审批节点表单嵌入子流程管理区域
组件基础 显示标签 SFLab,默认「子流程」,控制表单分组标题 按业务命名,如「关联采购单」「子项目审批」
组件基础 组件高度 SF_H,默认 300px 控制子流程列表区域在表单中的可视高度
组件显示 显示方式 SFShowModel:表格方式 / 自由模式(代码标注暂未充分使用) 预留不同 UI 展现风格
组件显示 显示控制方式 SFShowCtrl:可看所有子流程 / 仅看自己发起的 多人共办同一父流程时,限制子流程实例可见范围
组件显示 连接标题 SFCaption,默认「启动子流程」 手工启动入口的默认链接文字
组件显示 可启动子流程编号 SFDefInfo,多个流程编号逗号分隔 限制组件上允许启动的子流程范围
组件显示 审批格式字段 SFFields 配置子流程在审核组件中的展示字段
组件显示 打开子流程显示 SFOpenType:工作查看器 / 流程轨迹 点击子流程实例时打开表单或轨迹图
组件联动 所有子流程结束规则 AllSubFlowOverRole:不处理 / 父流程自动下一步 / 父流程结束 节点绑定多个子流程时,全部完成后统一驱动父流程
组件管理 子流程类型入口 提供「手动启动 / 自动触发 / 延续子流程」三个 RefMethod 管理入口 流程设计器节点属性中分类维护子流程
组件管理 组件禁用清理 禁用时删除对应 GroupField(CtrlID=SubFlowND{NodeID} 关闭组件后表单不再显示子流程区域

(二)设计配置 --- 新建子流程向导(GPN_NewSubFlow)

功能类别 功能名称 功能说明 需求场景概述
向导创建 手工启动子流程 选择目标流程(排除当前父流程),创建 SubFlowType=0,跳转 SubFlowHand 编辑 审批人按需手工发起子流程
向导创建 自动触发子流程 创建 SubFlowType=1,节点 SubFlowAutoNum 自增,跳转 SubFlowAuto 编辑 发送/到达时按规则自动发起
向导创建 延续子流程 创建 SubFlowType=2,跳转 SubFlowYanXu 编辑 父节点发送后冻结,转入延续流程
向导创建 前置导航子流程 创建 SubFlowType=3,跳转 SubFlowGuide 编辑;对开始节点有效 先选子流程实例再发起父流程(如报销选采购单)
向导创建 重复绑定校验 主键 {NodeID}_{SubFlowNo}_{SubFlowType},已存在则提示 防止同一节点重复绑定同一子流程
向导创建 流程分组选择 FlowSort 分组展示可选流程列表 大量流程时分组快速定位

(三)设计配置 --- 手动启动子流程(SubFlowHand)

功能类别 功能名称 功能说明 需求场景概述
基本属性 子流程编号/名称 绑定目标子流程 SubFlowNoSubFlowName 指定要发起的子流程模板
基本属性 子流程状态 SubFlowSta:禁用 / 启用 / 只读 临时关闭某个子流程入口或只读展示
基本属性 启动文字标签 SubFlowLab,覆盖默认「启动子流程」 如「发起投标流程」「创建合同审批」
基本属性 子流程模式 SubFlowModel:下级子流程 / 同级子流程 下级挂当前 WorkID;同级挂父流程 PWorkID 并记录 SL 参数
基本属性 轨迹显示位置 SubFlowShowNodeID,绑定设计器子流程图标节点 子流程实例显示在父流程轨迹图指定位置
基本属性 显示顺序 Idx,支持上移/下移(DoUp/DoDown 多个子流程时控制列表排序
节点运动 父流程自动运行到下一步 ParentFlowSendNextStepRole:不处理 / 子流程结束 / 子流程到指定节点 子流程完成后自动推进父流程
节点运动 父流程结束规则 ParentFlowOverRole:同上三档 子流程完成后自动结束父流程
节点运动 指定子流程节点 ID SubFlowNodeID,配合「到指定节点」规则 子流程到某审批节点即触发父流程联动
节点运动 同级子流程结束规则 IsAutoSendSLSubFlowOver:不处理 / 同级自动下一步 / 结束同级 平级子流程全部完成后驱动发起它的同级流程
限制规则 仅能被调用 1 次 StartOnceOnly 同一父实例下该子流程只能发起一次
限制规则 结束后才可重新发起 CompleteReStart 上次实例归档后才允许再次发起
限制规则 指定流程启动后才能启动 IsEnableSpecFlowStart + SpecFlowStart(逗号分隔多流程) 子流程 B 必须在子流程 A 启动后才能发起
限制规则 指定流程结束后才能启动 IsEnableSpecFlowOver + SpecFlowOver 子流程 B 必须在子流程 A 完成后才能发起
数据传递 父→子字段拷贝 SubFlowCopyFields,格式 @父字段=子字段@... 发起时把父流程数据带入子流程表单
数据传递 子→父字段反填规则 BackCopyRole:不反填 / 自动匹配 / 按设置格式 / 混合 子流程结束后回填父流程
数据传递 子→父字段映射 ParentFlowCopyFields,格式 @子字段=父字段@... 精确映射;签批字段建议用「按设置格式」
启动模式 单条手工启动 SubFlowStartModel=0 一次发起一条子流程(SubFlow.vue 表格模式)
启动模式 简单数据源批量启动 SubFlowStartModel=1 按数据源多行批量发起
启动模式 分组数据源批量启动 SubFlowStartModel=2 分组展示后批量发起
启动模式 树形结构批量启动 SubFlowStartModel=3 树形选择后批量发起
展现模式 表格模式 SubFlowShowModel=0 父子行可展开表格(当前 Vue 实现)
展现模式 列表模式 SubFlowShowModel=1 非单条启动时切换为 List 展现
配置入口 发起模式配置页 DoStartModel → SubFlowStartModel 配置 设计期配置批量/树形等启动方式
配置入口 显示模式配置页 DoShowModel → SubFlowShowModel 配置 设计期配置展现风格

(四)设计配置 --- 自动触发子流程(SubFlowAuto)

功能类别 功能名称 功能说明 需求场景概述
触发时机 调用时间 InvokeTime:发送时(0) / 工作到达时(1)(前端另有流程结束时选项) 父节点发送后或工作到达时自动触发
触发时机 自动发送方式 SendModel:给当前人开始节点待办 / 发送到下一节点 子流程创建后停在开始节点或自动流转
触发时机 发送方式校验 选「发送到下一节点」时,下一节点接收人规则不能为「由上一步选择」 保证自动触发无需人工选人等
启动限制 仅调用 1 次 同手动子流程 防止重复自动发起
启动限制 结束后才可重新发起 同手动子流程 控制重复触发
启动限制 指定流程启动后/结束后 同手动子流程,支持多流程逗号分隔 串行依赖的自动子流程链
启动限制 按指定 SQL 配置 IsEnableSQL + SpecSQL,SQL 返回值>0 才触发 按表单/SQL 动态判断是否触发
启动限制 按平级子流程节点完成 IsEnableSameLevelNode + SameLevelNode(格式 流程,节点;... 仅平级模式;指定平级节点完成后触发
启动数据源 当前表单主表数据 DBSrcType=0,发起单个子流程并用主表赋值 一对一自动发起
启动数据源 指定 SQL 数据源 DBSrcType=1 + DBSrcDoc,每行发起一个子流程,列名匹配子流程字段 按子表明细批量自动发起(如每行物料一条子流程)
节点运动 父流程联动规则 同 SubFlowHand(下一步/结束/指定节点/同级规则) 自动子流程完成后的父流程驱动
数据传递 父→子 / 子→父 SubFlowCopyFieldsBackCopyRoleParentFlowCopyFields 自动发起与结束时数据同步
待办控制 发送后隐藏父流程待办 SubFlowHidTodolist,设置父流程待办 IsPass=100 批量/自动发起子流程后,父流程待办暂时隐藏
待办控制 子流程结束后恢复父待办 所有同类型子流程结束后,恢复 IsPass=0 子流程全部完成后再显示父流程待办
轨迹显示 轨迹显示位置 SubFlowShowNodeID 同手动子流程

(五)设计配置 --- 延续子流程(SubFlowYanXu)

功能类别 功能名称 功能说明 需求场景概述
延续特性 延续子流程绑定 节点仅可配置延续子流程;发送时转入子流程,当前节点活动冻结 主流程暂停,由延续流程承接后续处理
延续特性 子流程模式 下级 / 同级,建立 PWorkID 或 SLWorkID 关系 延续流程作为下级或平级分支
延续特性 延续到的节点 YanXuToNode,多节点逗号分隔,空则到子流程开始节点 延续可直接送到子流程中间节点
延续特性 条件表达式 ExpType:按 SQL / 按参数;CondExp 控制是否走延续 按条件决定是否进入延续流程
延续特性 接收人规则 延续子流程开始节点须能明确计算接收人(角色/部门/绑定人员等) 发送延续流程时自动确定处理人
退回控制 越轨子流程退回方式 YBFlowReturnRole:不能退回 / 退父开始 / 退父任意 / 退父启动 / 退指定节点 延续子流程开始节点可退回到父流程
退回控制 要退回的节点 ReturnToNode,下拉选择父流程节点 配合「退指定节点」使用
运行时 父待办隐藏提示 延续启动后提示「待办不可见,需等子流程完成」 用户知晓父流程被挂起
运行时 撤销发送处理 WorkUnSend 中识别越轨状态并删除延续子流程 父流程撤销时清理延续子流程

(六)设计配置 --- 前置导航子流程(SubFlowGuide / SubFlowHandGuide)

功能类别 功能名称 功能说明 需求场景概述
前置导航 流程级前置导航 配合 StartGuideWay.SubFlowGuide/SubFlowGuideEntity 开始节点先选已有子流程实例再创建父流程
前置导航 批量发起前置导航 IsSubFlowGuide + SubFlowGuideSQL(须含 No、Name 列) 从 SQL 列表勾选多条记录批量发起子流程
前置导航 分组 SQL SubFlowGuideGroup 导航列表按分组展示
前置导航 实体字段映射 SubFlowGuideEnNoFiledSubFlowGuideEnNameFiled 自定义 SQL 结果列名
前置导航 树形结构 IsTreeConstruct + ParentNo 树形前置导航选择
批量发起 多选批量发起 SubFlowGuid_Send,线程池并发 SendSingleSubFlow 一次选中多条记录并行发起子流程
应用场景 先子后父 费用报销选采购申请单:子流程先存在,完成后出现父流程 经典「先出现子流程,后出现父流程」业务

(七)运行时 --- 子流程组件 UI(SubFlow.vue)

功能类别 功能名称 功能说明 需求场景概述
列表展示 表格模式 父行显示子流程名称;子行展示已发起实例(发起人、标题、节点、状态、处理人、时间) 审批表单内查看/管理子流程
列表展示 行展开 expandRowByClick,点击展开查看实例列表 折叠展示多个子流程绑定
列表展示 流程状态文本 草稿/新工作/归档/挂起/退回/转发/删除/加签等 快速识别子流程运行状态
列表展示 过滤草稿与 FID 跳过 WFState=0FID!=0 的记录 只展示有效主实例
权限控制 组件启用 + 子流程启用 SFSta=1SubFlowSta=1 且非只读才可启动 双重开关控制
权限控制 跨节点只读 当前 FK_Node 与组件绑定节点不一致时,子流程置为只读 累加表单场景防止非绑定节点误操作
权限控制 只读模式 isReadonly=true 或组件/子流程只读时禁止启动 查看模式、已办查看
数据权限 显示控制 SFShowCtrl=0 查全部;=1 仅查 Starter=当前用户 多人协作时的实例隔离
启动操作 下级子流程启动 PWorkID=当前WorkIDPNodeIDPFlowNoPFID 标准父子关系
启动操作 同级子流程启动 PWorkID=父PWorkID,并带 SLWorkID/SLNodeID/SLFlowNo 与父流程平级的旁支子流程
启动操作 平级过滤 SLWorkID 过滤,只显示当前流程发起的平级子流程 避免看到其他节点发起的同级子流程
启动操作 启动链接文字 使用 SubFlowLab 或默认 [启动子流程] 可配置的业务入口文案
查看操作 打开子流程 iframe 打开 MyView,带 PageFrom=SubFlow 在父流程内查看/处理子流程
交互 子流程完成后刷新 监听 ReloadPage 消息,关闭 iframe 并重新加载列表 发起子流程后自动刷新父表单组件
展现切换 List 模式切换 SubFlowStartModel!=0 时切换为 List(批量/导航模式) 非单条手工启动走另一套 UI

(八)运行时 --- 子流程发起与父子关系

功能类别 功能名称 功能说明 需求场景概述
关系建立 父子流程关联 SetParentInfo 写入 PWorkID/PNodeID/PFlowNo/PEmp 建立实例级父子血缘
关系建立 同级子流程参数 AtPara 存储 SLWorkID/SLNodeID/SLFlowNo/SLEmp 标识由哪个同级流程发起
发起校验 能否发起校验 Flow_IsCanStartThisFlow 校验开始节点人员权限 防止无权限人员发起子流程
发起校验 启动限制综合判断 综合 StartOnceOnly/CompleteReStart/SpecFlowStart/SpecFlowOver/SQL 手工与自动发起前统一门禁
数据初始化 父数据复制到子 创建时从父节点 Work 复制,再按 SubFlowCopyFields 映射 子流程表单自动带数
数据初始化 标题同步 子流程 Title 可与父流程保持一致(代码注释中的设计意图) 列表中父子标题一致便于识别
工具栏 发起子流程按钮 节点工具栏 SubFlowStartModel!=0 时显示 SendSubFlow 批量/导航模式从工具栏入口发起
工具栏 删除子流程 DelSubFlowFlow_DeleteSubThread 手工删除误发起的子流程实例
删除联动 删除父流程时删子流程 CB_IsDeleteSubFlow 选项 删父流程时级联删除子流程

(九)运行时 --- 父流程联动与待办

功能类别 功能名称 功能说明 需求场景概述
单个子流程联动 子流程结束→父流程下一步 ParentFlowSendNextStepRole=FlowOver 一个子流程完成即推进父流程
单个子流程联动 子流程结束→父流程结束 ParentFlowOverRole=FlowOver 子流程完成即结束父流程
单个子流程联动 子流程到指定节点→父流程下一步 ParentFlowSendNextStepRole=SpecifiedNodes + SubFlowNodeID 子流程到某节点即触发父流程
全部子流程联动 全部结束→父流程下一步 组件 AllSubFlowOverRole=SendParentFlowToNextStep 多子流程会签式全部完成后推进
全部子流程联动 全部结束→父流程结束 组件 AllSubFlowOverRole=OverParentFlow 全部子流程完成后结束父流程
全部子流程联动 运行中子流程计数 Flow_NumOfSubFlowRuning 判断是否全部完成 防止部分完成就触发父流程
同级子流程联动 同级自动下一步 IsAutoSendSLSubFlowOver=1 平级子流程完成后推动发起它的流程
同级子流程联动 结束同级子流程 IsAutoSendSLSubFlowOver=2 平级子流程完成后结束发起流程
流程属性级 子流程到该节点父流程自动下一步 流程属性 IsToParentNextNode(子流程节点级) 子流程到达特定节点时驱动父流程
自动发送 模拟父流程处理人登录发送 SubFlowOver_ParentFlowAutoSendNextSetp 切换用户上下文发送 无人值守自动推进父流程
待办恢复 隐藏待办后恢复 同类型子流程全部结束且 SubFlowHidTodolist=true 时恢复 IsPass=0 子流程全完成后再出现父待办

(十)运行时 --- 数据反填(子→父)

功能类别 功能名称 功能说明 需求场景概述
反填规则 不反填 BackCopyRole=None 子流程与父流程数据独立
反填规则 字段自动匹配 同名字段自动 Copy 内置表单、字段名一致时零配置
反填规则 按设置格式 ParentFlowCopyFields 精确映射 字段名不同或签批字段反填
反填规则 混合模式 自动匹配 + 按设置格式同时生效 通用字段自动、特殊字段手工映射
反填范围 Work + Rpt 双表更新 同时更新节点 Work 与流程 Rpt 表单与报表数据一致
反填扩展 签批信息拷贝 签批字段对应 Track 记录(ActionType=22)复制到父流程 子流程审批意见汇总到父流程轨迹

(十一)运行时 --- 阻塞与发送校验

功能类别 功能名称 功能说明 需求场景概述
节点阻塞 指定子流程未完成不能发送 BlockModel=SpecSubFlowBlockExp 配置 节点,流程;... 父节点必须等指定子流程完成
节点阻塞 指定子流程未到指定节点不能发送 BlockModel=SpecSubFlowNode,配置 节点,流程,子流程节点 子流程到某节点前父流程不能往下走
节点阻塞 平级子流程未完成不能发送 BlockModel=SameLevelSubFlow 平级分支全部完成才能继续
节点阻塞 阻塞错误提示 列出未完成子流程 ID、名称、标题、当前处理人 明确告知卡在哪条子流程
发送校验 子流程未完成阻止发送 发送前检查已发起子流程 WFState 有运行中子流程时不允许父流程发送
设计校验 越轨/子流程发起检查 FlowCheckError 中检查延续子流程配置 发布前发现配置错误

(十二)运行时 --- 轨迹、审核与查看

功能类别 功能名称 功能说明 需求场景概述
轨迹图 子流程轨迹显示位置 设计器创建子流程 Icon 并绑定 SubFlowShowNodeID 父流程轨迹图上可视化子流程
轨迹图 子流程节点坐标 X/Y 属性存储图标位置 设计器拖拽定位
审核组件 子流程审核信息汇总 WF_WorkOpt 中输出子流程 Track,节点名前缀「(子流程)」 父流程审核区展示子流程审批记录
审核组件 多子流程发起人去重 批量发起时发起人只显示一次 避免审核列表重复
查看父流程 查看父流程按钮 ShowParentFormEnable(处理/查看/抄送页可分别配置) 子流程处理人跳转查看父流程
轨迹配置 轨迹图是否显示 SFTrackEnable 组件区是否展示子流程轨迹
轨迹配置 历史审核是否显示 SFListEnable 组件区是否展示历史审核
轨迹配置 显示所有步骤 SFIsShowAllStep 轨迹表是否展示全部子流程步骤

(十三)流程/节点级扩展配置

功能类别 功能名称 功能说明 需求场景概述
节点计数 自动子流程数量 节点 SubFlowAutoNum,新建自动子流程时自增 标识节点是否配置了自动触发
节点计数 延续子流程数量 节点 SubFlowYanXuNum 标识节点是否配置延续子流程
节点属性 发起会签子流程 ItIsSendDraftSubFlow 工具栏入口 草稿/会签场景发起子流程
流程属性 前置导航-父子流程模式 StartGuideWay.ByParentFlowModel 流程级前置导航与父子流程集成
流程属性 前置导航-子流程实例列表 StartGuideWay.SubFlowGuide 从开始节点选子流程实例
移动端 移动端子流程组件 CCMobile/WorkOpt/SubFlow.vue 移动端同等父子流程能力
存储 统一存储表 所有类型子流程存 WF_NodeSubFlow,主键含类型后缀 一种表结构支撑四种类型

三、子流程类型与模式对照

#mermaid-svg-UQavMdDFuMJWL5mY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UQavMdDFuMJWL5mY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UQavMdDFuMJWL5mY .error-icon{fill:#552222;}#mermaid-svg-UQavMdDFuMJWL5mY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UQavMdDFuMJWL5mY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UQavMdDFuMJWL5mY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UQavMdDFuMJWL5mY .marker.cross{stroke:#333333;}#mermaid-svg-UQavMdDFuMJWL5mY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UQavMdDFuMJWL5mY p{margin:0;}#mermaid-svg-UQavMdDFuMJWL5mY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UQavMdDFuMJWL5mY .cluster-label text{fill:#333;}#mermaid-svg-UQavMdDFuMJWL5mY .cluster-label span{color:#333;}#mermaid-svg-UQavMdDFuMJWL5mY .cluster-label span p{background-color:transparent;}#mermaid-svg-UQavMdDFuMJWL5mY .label text,#mermaid-svg-UQavMdDFuMJWL5mY span{fill:#333;color:#333;}#mermaid-svg-UQavMdDFuMJWL5mY .node rect,#mermaid-svg-UQavMdDFuMJWL5mY .node circle,#mermaid-svg-UQavMdDFuMJWL5mY .node ellipse,#mermaid-svg-UQavMdDFuMJWL5mY .node polygon,#mermaid-svg-UQavMdDFuMJWL5mY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UQavMdDFuMJWL5mY .rough-node .label text,#mermaid-svg-UQavMdDFuMJWL5mY .node .label text,#mermaid-svg-UQavMdDFuMJWL5mY .image-shape .label,#mermaid-svg-UQavMdDFuMJWL5mY .icon-shape .label{text-anchor:middle;}#mermaid-svg-UQavMdDFuMJWL5mY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UQavMdDFuMJWL5mY .rough-node .label,#mermaid-svg-UQavMdDFuMJWL5mY .node .label,#mermaid-svg-UQavMdDFuMJWL5mY .image-shape .label,#mermaid-svg-UQavMdDFuMJWL5mY .icon-shape .label{text-align:center;}#mermaid-svg-UQavMdDFuMJWL5mY .node.clickable{cursor:pointer;}#mermaid-svg-UQavMdDFuMJWL5mY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UQavMdDFuMJWL5mY .arrowheadPath{fill:#333333;}#mermaid-svg-UQavMdDFuMJWL5mY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UQavMdDFuMJWL5mY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UQavMdDFuMJWL5mY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UQavMdDFuMJWL5mY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UQavMdDFuMJWL5mY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UQavMdDFuMJWL5mY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UQavMdDFuMJWL5mY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UQavMdDFuMJWL5mY .cluster text{fill:#333;}#mermaid-svg-UQavMdDFuMJWL5mY .cluster span{color:#333;}#mermaid-svg-UQavMdDFuMJWL5mY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UQavMdDFuMJWL5mY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UQavMdDFuMJWL5mY rect.text{fill:none;stroke-width:0;}#mermaid-svg-UQavMdDFuMJWL5mY .icon-shape,#mermaid-svg-UQavMdDFuMJWL5mY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UQavMdDFuMJWL5mY .icon-shape p,#mermaid-svg-UQavMdDFuMJWL5mY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UQavMdDFuMJWL5mY .icon-shape .label rect,#mermaid-svg-UQavMdDFuMJWL5mY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UQavMdDFuMJWL5mY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UQavMdDFuMJWL5mY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UQavMdDFuMJWL5mY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 父流程节点
0 下级
1 同级
FrmSubFlow 组件
手动启动 SubFlowHand
自动触发 SubFlowAuto
延续子流程 SubFlowYanXu
前置导航 SubFlowGuide
SubFlowModel
PWorkID = 父WorkID
PWorkID = 父PWorkID + SL参数
子流程实例
结束事件 SubFlowEvent
数据反填 / 父流程联动 / 待办恢复


四、典型业务场景映射

业务场景 推荐配置组合
工程主流程 + 投标子流程,投标结果回填主流程 手动启动 + BackCopyRole 反填 + 父流程自动下一步
采购主单按明细行自动生成审批子流程 自动触发 + SQL 数据源 + 批量发起
主流程暂停,转交专门审批线处理后再回来 延续子流程 + 父待办隐藏 + 子流程结束联动
报销前先选多张采购申请单 前置导航子流程 + 开始节点 SubFlowGuide
并行多个子审批,全部完成后主流程才往下走 组件 AllSubFlowOverRole + 节点 SpecSubFlow 阻塞
同一父流程下多人各发起自己的子流程 SFShowCtrl=仅看自己发起的

五、相关代码路径

模块 路径
后端子流程模板 CCFlow/Components/BP.WF/Template/SFlow/
后端运行逻辑 CCFlow/Components/BP.WF/WF/WorkNode.csWorkNodePlus.cs
前端配置实体 Vue3/src/WF/Admin/AttrNode/SubFlow/
前端运行组件 Vue3/src/WF/WorkOpt/SubFlow.vue
父子流程组件配置 Vue3/src/WF/TSClass/FrmSubFlowNode.ts

文档生成依据 CCFlow 代码库当前实现整理。