1. 背景
开发流程中很多时候流程图发生了修改,流程部署后希望在途流程实例按照新的流程图运行,这时候就引入了在途流程实例的迁移。
如初始流程图如下,processDefinitionId = 1
后续业务发生变化需要新增节点,流程图变成如下,processDefinitionId = 2
需求要求在途流程按照processDefinitionId = 2运行,此时需要修改在途流程的流程图
2. 实现
fromProcessDefId 原流程定义id
toProcessDefId 迁移目标流程定义ID
/**
* 运行中流程实例迁移
* @param fromProcessDefId 迁移原流程定义id
* @param toProcessDefId 迁移目标流程定义id
*/
private void procInstMigration(String fromProcessDefId, String toProcessDefId) {
// 迁移验证
boolean migrationValid = runtimeService.createProcessInstanceMigrationBuilder()
.migrateToProcessDefinition(toProcessDefId)
.validateMigrationOfProcessInstances(fromProcessDefId)
.isMigrationValid();
if (!migrationValid) {
// 验证不通过
throw new BizException("流程定义差异过大不满足在途流程的迁移,请修改流程图");
}
// 验证通过执行迁移
runtimeService.createProcessInstanceMigrationBuilder()
.migrateToProcessDefinition(toProcessDefId)
.migrateProcessInstances(fromProcessDefId);
}