flowable 子流程
时间: 2025-02-07 20:41:43 浏览: 55
### Flowable 中子流程的使用方法
#### 创建嵌套子流程定义
在 Flowable 中,可以通过 BPMN 图形化编辑工具或 XML 定义来创建带有子流程的工作流模型。对于子流程而言,在父流程中可以将其视为一个单独的任务节点,该节点内部又包含了多个活动。
```xml
<process id="parentProcess" name="Parent Process">
<!-- ... -->
<subProcess id="embeddedSubprocess" name="Embedded Sub-process">
<startEvent id="innerStart"/>
<sequenceFlow id="flow1" sourceRef="innerStart" targetRef="taskInSubprocess"/>
<userTask id="taskInSubprocess" name="User Task In Subprocess"></userTask>
<endEvent id="innerEnd"/>
</subProcess>
<!-- ... -->
</process>
```
上述代码展示了如何在一个父进程中定义内嵌式的子进程[^1]。
#### 调用外部已存在的子流程
除了直接在当前流程文件里声明子流程外,还可以通过 `callActivity` 来调用预先已经部署好的另一个独立 BPNM 流程作为子流程执行:
```xml
<process id="mainProcess" name="Main Process">
<!-- Other elements -->
<callActivity id="calledChildProcess" calledElement="childProcessId"/>
<!-- More elements -->
</process>
```
这里的关键在于设置属性 `calledElement` 的值为要被调用的目标子流程 ID 或者 key 值[^2]。
#### 处理子流程中的变量传递
当涉及到父子流程间的数据交换时,通常会利用输入输出参数映射机制来进行数据共享。这允许开发者指定哪些局部变量应该从父级传入到子级别以及反过来的情况。
```java
// 设置调用子流程前后的变量操作逻辑
Map<String, Object> variables = new HashMap<>();
variables.put("inputVariable", "someValue");
runtimeService.startProcessInstanceByKey(
"mainProcessKey",
variables);
// 获取完成之后的结果
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
if (pi != null && !pi.isEnded()) {
// 进一步处理...
}
```
这段 Java 代码片段说明了怎样向新启动的过程实例注入初始变量集合,并查询特定过程的状态以获取最终结果。
阅读全文
相关推荐

















