SubflowActivity
分类: 通用步骤
命名空间: CMS.Plugin.FlowManagement.Abstractions.FlowBusiness.Activitys
基类: BusinessActivity
模块: FlowManagement.Abstractions
概述
SubflowActivity(子流程)是用于在主流程中启动和执行子流程的特殊节点。通过指定子流程的流程编号,可以在主流程执行过程中调用另一个独立的流程,实现流程的模块化和复用。子流程节点支持父子流程之间的参数传递,可以将主流程的数据传递给子流程,也可以将子流程的执行结果返回给主流程。
子流程是流程设计中的重要模式,它允许将复杂的业务逻辑分解为多个独立的、可复用的流程模块,提高流程的可维护性和可扩展性。
业务场景
适用场景
- 流程复用: 将常用的业务逻辑封装为子流程,在多个主流程中复用
- 流程模块化: 将复杂流程分解为多个子流 程,降低单个流程的复杂度
- 动态流程: 根据业务条件动态选择要执行的子流程
- 标准化操作: 将标准化的操作流程封装为子流程,确保执行一致性
- 流程嵌套: 支持多层嵌套的子流程调用
在系统中的作用
SubflowActivity 在 LMES 流程系统中扮演着流程组合器的角色:
- 启动和管理子流程的执行
- 处理父子流程之间的参数传递
- 维护父子流程的关联关系
- 支持流程的模块化设计
- 提供流程复用机制
与其他节点的协作
- BusinessActivity: 子流程中的业务节点,正常执行业务逻辑
- 主流程节点: SubflowActivity 作为主流程中的一个节点,与其他节点协作
- 参数映射: 通过 Mapping 配置实现父子流程的数据交换
配置说明
基本配置
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| ProcessflowID | int | 是 | 0 | 子流程编号,需要启动的子流程的流程编号 |
| IsEmbedded | bool | 否 | true | 是否将子流程定义嵌套入父流程 |
| Mapping | ParameterMapCollection | 否 | 空集合 | 参数对照表,父子流程做参数传递的参数对照表 |
| ExtendedProperty | BusinessPropertyCollection | 否 | 空集合 | 步骤扩展属性 |
配置项详解
ProcessflowID
说明: 子流程的流程编号,指定要启动的子流程。这是子流程节点最重要的配置项。
取值范围: 大于 0 的整数,对应系统中已定义的流程编号
注意事项:
- 必须确保指定的流程编号在系统中存在
- 子流程必须是已发布的流程
- 可以通过流程上下文动态指定流程编号
IsEmbedded
说明: 是否将子流程定义嵌套入父流程。当设置为 true 时,子流程的定义会嵌入到父流程中。
取值范围: true 或 false
注意事项:
- 默认为 true,推荐使用默认值
- 嵌套模式下,子流程的修改不会影响已运行的父流程实例
- 非嵌套模式下,子流程的修改会影响所有引用它的父流程
Mapping
说明: 参数对照表,定义父子流程之间的参数映射关系。通过映射配置,可以将父流程的数据传递给子流程,也可以将子流程的结果返回给父流程。
取值范围: ParameterMapCollection 对象,包含多个参数映射项
映射项结构:
- SourceKey: 源参数键(父流程中的键名)
- TargetKey: 目标参数键(子流程中的键名)
- Direction: 映射方向(Input/Output/Both)
- Input: 从父流程传递到子流程
- Output: 从子流程返回到父流程
- Both: 双向传递
注意事项:
- 参数键名通常以 "_Value" 结尾
- 映射方向决定了数据传递的时机
- 可以配置多个参数映射
流程上下文
输入参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| 父流程数据 | any | 通过 Mapping 配置传递给子流程的数据 |
| @ParentCase | string | 父流程实例号(系统自动设置) |
| @ParentTask | int | 父流程对应任务号(系统自动设置) |
输出参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| 子流程结果 | any | 通过 Mapping 配置从子流程返回的数据 |
| @SubflowCase | string | 子流程实例号(系统自动设置) |
系统参数
SubflowActivity 定义了三个系统参数常量:
- ParameterParentCase (
@ParentCase): 父流程实例号 - ParameterParentTask (
@ParentTask): 父流程对应任务号 - ParameterSubflowCase (
@SubflowCase): 子流程实例号
这些参数由系统自动管理,用于维护父子流程的关联关系。
数据流转说明
-
启动子流程前:
- 根据 Mapping 配置,将父流程的数据复制到子流程上下文
- 设置系统参数(@ParentCase、@ParentTask)
-
子流程执行:
- 子流程在独立的上下文中执行
- 可以访问从父流程传递的参数
-
子流程完成后:
- 根据 Mapping 配置,将子流程的结果复制回父流程上下文
- 设置子流程实例号(@SubflowCase)