FlowAble流程定义之部署流程
之前已经完成了流程部署模板对象的组装,获得了BpmnModel对象,接下来需要对BpmnModel对象进行布局、校验、部署。部署之后获得模板ID, 业务系统就可以通过模板ID创建流程实例对象。demo项目飞机 流程引擎Demo项目 Git clone飞机 Clone Https
一、BpmnModel布局及校验
/**
* 获取模版的XML字符串
*
* @param process 组装完成的流程节点信息
* @return XML字符串
*/
private BpmnModel getModelString(Process process) {
process.setId(FlowAbleBpmnConstant.getUid());
BpmnModel bpmnModel = new BpmnModel();
bpmnModel.addProcess(process);
// 自动生成布局 布局节点位置
try {
new BpmnAutoLayout(bpmnModel).execute();
} catch (Exception e) {
log.error("[FlowBpmnServiceImpl].[getModelString] ------> error:", e);
}
ProcessValidatorFactory processValidatorFactory = new ProcessValidatorFactory();
ProcessValidator defaultProcessValidator = processValidatorFactory.createDefaultProcessValidator();
// 验证失败信息的封装ValidationError
List<ValidationError> validate = defaultProcessValidator.validate(bpmnModel);
log.error("获取到的验证信息为:{}", JSONObject.toJSONString(validate));
return bpmnModel;
}
二、流程部署
流程部署主要用到 org.flowable.engine.RepositoryService, 可以通过@Resurce直接获得 ,废话不多说,直接上代码:
Deployment deploy = repositoryService.createDeployment().addBpmnModel(String.format("%s.bpmn20.xml", UUID.randomUUID()), params.getBpmnModel()).deploy();
String deployId = deploy.getId();
ProcessDefinition process = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult();
return process.getId();
注意: 此处不管用什么名字,必须要以.bpmn20.xml结尾, 否则就不能部署成功。
流程部署成功之后, return 返回的是流程的模板ID, 业务系统可以通过该ID启动流程实例, 部署成功之后可以在Flowable数据库中的ACT_RE_DEPLOYMENT、ACT_RE_PROCDEF表中查询到相应数据。