注意:如果不是与spring整合使用,则使用activitiRule进行测试,原理相同
1、流程的暂停
Deployment deploy = repositoryService.createDeployment().name("部署实例暂停启动")
.addClasspathResource("my-process.bpmn20.xml")
.deploy();
ProcessDefinition processDefinition =
repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
LOGGER.info("processDefinition.getId() = {}", processDefinition.getId());
//暂停
repositoryService.suspendProcessDefinitionById(processDefinition.getId());
//启动
try {
LOGGER.info("启动");
runtimeService.startProcessInstanceById(processDefinition.getId());
LOGGER.info("启动成功");
} catch (Exception e) {
LOGGER.info("启动失败, 原因 {}", e.getMessage());
// 暂停之后的流程不激活的会报错
// Cannot start process instance. Process definition null (id = my-process:1:127503) is suspended
}
//重新激活再启动
repositoryService.activateProcessDefinitionById(processDefinition.getId());
LOGGER.info("启动");
runtimeService.startProcessInstanceById(processDefinition.getId());
LOGGER.info("启动成功");
}
2、指定候选人或组(删除候选人或组)
Deployment deploy = repositoryService.createDeployment().name("部署实例暂停启动")
.addClasspathResource("my-process.bpmn20.xml")
.deploy();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
LOGGER.info("processDefinition.getId() = {}", processDefinition.getId());
repositoryService.addCandidateStarterUser(processDefinition.getId(), "user");
repositoryService.addCandidateStarterGroup(processDefinition.getId(), "manager");
List<IdentityLink> identityList = repositoryService.getIdentityLinksForProcessDefinition(processDefinition.getId());
identityList.forEach(identityLink -> {
LOGGER.info("identityLink = {}", identityLink);
});
repositoryService.deleteCandidateStarterGroup(processDefinition.getId(), "manager");
repositoryService.deleteCandidateStarterUser(processDefinition.getId(), "user");
}