流程引擎(camunda)学习--流程实例版本迁移。

场景:流程引擎在流程图结构发生变化时会进行流程定义的版本迭代。新启动的流程默认在最新的版本进行流转。已经存在的活跃的流程实例会按照原有版本进行流转。

目的:实现将已经存在的流程实例迁移到最新的版本进行流转。

实现此场景我们需要以下内容:

源流程定义ID、目标流程定义ID、迁移计划、源流程实例ID。

下面开始整活:

1、获取源流程定义ID:

我们在部署一个流程定义时,会返回一个流程部署对象(Deployment)。

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processId, param);         String definitionId = processInstance.getProcessDefinitionId();

当然我们部署流程定义时可能没有存储流程定义ID,这时候我们在启动一个流程实例(ProcessInstance)时,会返回流程实例对象。通过流程实例对象获取流程定义ID。

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processId, param);         String definitionId = processInstance.getProcessDefinitionId();

 2、获取目标流程定义ID。

我这里使用的是Definition Key进行获取的。也就是我们绘制流程图时定义的ID

 可以通过camunda提供的API进行获取,

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().                 latestVersion().                 processDefinitionKey(processDefinitionKey).singleResult();         String targetDefinitionId = processDefinition.getId();

 3、创建迁移计划。执行迁移操作。

MigrationPlanBuilder migrationPlanBuilder = runtimeService.createMigrationPlan(sourceDefinitionId, targetDefinitionId);         // 增加流程变量         migrationPlanBuilder.setVariables(variablMap);         // 同节点迁移         migrationPlanBuilder.mapEqualActivities();         // 非同节点迁移。需要指定源任务节点以及迁移后的任务节点         //migrationPlanBuilder.mapActivities(sourceTaskId, targetTaskId);          runtimeService.newMigration(migrationPlanBuilder.build()).                 // 需要迁移的流程实例ID                 processInstanceIds(processIds).                 // 同步迁移                 execute();                 // 异步迁移                 //executeAsync()

 到这里我们流程实例迁移就完成了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值