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表中查询到相应数据。