问题
今天项目中发现有流程流转时找不到serviceTask里指定的classname,经排查发现是前几天更改了bpmn,将里面的delegate类路径全给改了,所以之前运行中的流程都找不到包了,导致报错:
解决思路
摆在眼前两条路,第一条是把运行中的流程全都给改了,第二条是在原路径中加上delegate类。第二条路看起来偷懒、简单,但是仔细一看,我的delegate都是注入的bean,这样会导致有重复name的bean。于是采用第一种方法,解决。下面上测试代码。
代码
@Test
public void illegalProcessMigrateTest() {
List<Illegal> illegalList = illegalMapper.selectNotComplete(null, "2020-11-18");
Deployment deploy = repositoryService.createDeployment().
addClasspathResource("processes/IllegalProcess.bpmn20.xml").deploy();
int success = 0, fail = 0;
ProcessDefinition def = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
for (Illegal illegal : illegalList) {
String processId = illegal.getProcessId();
try {
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();
ProcessInstanceMigrationValidationResult validationResult = runtimeService.createProcessInstanceMigrationBuilder()
.migrateToProcessDefinition(def.getId())
.validateMigration(pi.getProcessInstanceId());
runtimeService.createProcessInstanceMigrationBuilder()
.migrateToProcessDefinition(def.getId())
.migrate(pi.getProcessInstanceId());
boolean isMigrationValid = validationResult.isMigrationValid();
if (isMigrationValid) {
success++;
} else {
fail++;
}
} catch (Exception e) {
e.printStackTrace();
fail++;
}
}
log.info("违章:更新老流程实例流程,成功:{}个,失败:{}个", success, fail);
}
总结
1.servicetask的delegate类里尽量还是放一些基础功能,不要轻易修改(也不要轻易移动~~~),一些脚本可以通过script task来执行。
2.碰到问题,百度上找不到,直接上官网找。
参考
https://flowable.com/open-source/docs/bpmn/ch09-ProcessInstanceMigration/