You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fluent BPMN API中创建关联流(Association-Flow,非顺序流)?

嘿,刚好我之前用Fluent BPMN API做过关联流的开发,这就给你详细说下怎么实现!

首先得明确:在BPMN规范里,关联流(Association)主要用来连接文本注释、数据对象和流程元素(比如任务、网关),和顺序流(Sequence Flow)的跳转逻辑完全不同。Fluent BPMN API提供了直接的方法来创建这类关联,下面分两种场景给你示例:

1. 基础API方式(手动创建关联流)

如果是手动构建BPMN模型实例,你可以直接创建Association对象,指定源、目标元素和关联方向:

// 先初始化模型、流程,创建需要关联的元素(比如用户任务和文本注释)
BpmnModelInstance modelInstance = Bpmn.createEmptyModel();
Definitions definitions = modelInstance.newInstance(Definitions.class);
definitions.setTargetNamespace("http://your-company.com/bpmn");
modelInstance.setDefinitions(definitions);

Process process = modelInstance.newInstance(Process.class);
process.setId("approval-process");
definitions.addChildElement(process);

// 创建用户任务
UserTask submitTask = modelInstance.newInstance(UserTask.class);
submitTask.setId("submit-application");
submitTask.setName("提交审批申请");
process.addChildElement(submitTask);

// 创建文本注释
TextAnnotation tipAnnotation = modelInstance.newInstance(TextAnnotation.class);
tipAnnotation.setId("submit-tip");
tipAnnotation.setText("请上传身份证和收入证明附件");
process.addChildElement(tipAnnotation);

// 创建单向关联流:从注释指向任务
Association association = modelInstance.newInstance(Association.class);
association.setId("assoc-submit-tip");
association.setSourceRef(tipAnnotation.getId());
association.setTargetRef(submitTask.getId());
// 设置关联方向:ONE=单向,BOTH=双向,NONE=无方向
association.setAssociationDirection(AssociationDirection.ONE);
process.addChildElement(association);

2. 链式Fluent API方式(更简洁)

如果你用Fluent BPMN的链式调用风格,代码会更紧凑,直接用associateWith()方法就能关联元素:

BpmnModelInstance modelInstance = Bpmn.createExecutableProcess("approval-process")
    // 构建流程主逻辑
    .startEvent("start")
    .userTask("submit-application").name("提交审批申请")
    .endEvent("end")
    
    // 跳转到用户任务,关联文本注释
    .moveToUserTask("submit-application")
    .associateWith("submit-tip", AssociationDirection.ONE)
    
    // 创建文本注释
    .textAnnotation("submit-tip").text("请上传身份证和收入证明附件")
    
    .done();

关键注意点

  • 关联的元素必须都属于同一个流程实例,ID要唯一且正确,否则会出现元素找不到的问题
  • 关联方向AssociationDirection的三个枚举值对应不同的显示效果:ONE会显示带箭头的连线,BOTH是双向箭头,NONE是无箭头的虚线
  • 除了注释和任务,你也可以用同样的方式关联数据对象(DataObject)和流程元素,只需要把TextAnnotation换成DataObject即可

内容的提问来源于stack exchange,提问作者Alpha_33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:52:52