Flowable处理CMMN案例时能否切换至另一模型并生成独立案例?
在Flowable CMMN中切换至独立的新CMMN案例:实现方案
嘿,作为Flowable的新手,你的这个需求其实非常常见,而且完全可以实现!下面我就给你详细拆解怎么操作:
核心结论
你完全可以在一个CMMN案例(比如贷款请求)的处理过程中,触发创建另一个完全独立的CMMN案例(比如捐赠请求),两者拥有各自独立的生命周期,互不干扰。
具体实现步骤
1. 触发新案例的创建
你可以通过两种方式来触发新案例的启动:
- 人工触发:在原贷款案例的某个人工任务节点(比如“突发情况处理”),由处理人操作启动新的捐赠案例。
- 自动触发:在原案例的某个自动节点(比如监听特定异常事件的节点),系统自动启动新案例。
不管哪种方式,核心都是调用Flowable的CmmnRuntimeService来启动新案例,Java代码示例如下:
// 获取Flowable引擎的CmmnRuntimeService实例 CmmnRuntimeService cmmnRuntimeService = processEngine.getCmmnRuntimeService(); // 准备传递给新案例的变量(比如原贷款案例的ID、用户信息等) Map<String, Object> caseVars = new HashMap<>(); caseVars.put("originalLoanCaseId", "LOAN-CASE-123"); // 原贷款案例的实例ID caseVars.put("applicantName", "张三"); caseVars.put("donationAmount", 5000.0); // 启动独立的捐赠案例 CaseInstance donationCase = cmmnRuntimeService.createCaseInstanceBuilder() .caseDefinitionKey("donation-request") // 你的捐赠CMMN模型定义的key .variables(caseVars) .start();
2. 处理原案例的状态
根据你的业务需求,原贷款案例可以选择:
- 终止:如果贷款请求已经完全转为捐赠,直接终止原案例:
cmmnRuntimeService.terminateCaseInstance("LOAN-CASE-123"); - 暂停:如果后续可能还需要恢复处理,可暂停原案例:
cmmnRuntimeService.suspendCaseInstance("LOAN-CASE-123"); - 标记状态:给原案例添加一个
caseStatus变量标记为“已转捐赠”,方便后续查询统计。
3. 案例间的关联(可选)
如果需要后续能追溯两个案例的关联关系,可以在两个案例的变量中互相存储对方的实例ID:
- 在启动捐赠案例时,把原贷款案例ID存入捐赠案例变量(如上面代码的
originalLoanCaseId) - 同时更新原贷款案例的变量,存入新捐赠案例的ID:
cmmnRuntimeService.setCaseInstanceVariable("LOAN-CASE-123", "relatedDonationCaseId", donationCase.getId());
关键注意点
- 两个案例是完全独立的:各自有自己的实例ID、执行日志和生命周期,一个案例的状态变化不会影响另一个。
- 权限控制:要确保执行创建新案例操作的用户有对应的Flowable权限(比如
CREATE_CASE_INSTANCE权限)。 - 数据一致性:传递变量时要确保关键数据的准确性,避免业务信息丢失。
这样就能完美实现你需要的“贷款请求转独立捐赠请求”的业务场景啦!
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

