flowable实战(二)flowable流程模型管理接口

一、流程模型资源

  流程定义文件:文件的命名必须是XXXXbpmn20.xml,注意命名规范,后面必须是bpmn20.xml。

  流程定义图片:用BPMN2.0规范定义的各种图形描绘(BMPN2.0的符号及画布上的坐标信息),一般是PNG格式。

  表单文件:把表单内容保存在一个文件中,扩展名为drl。

  规则文件:扩展名为drl。

二、流程模型资源的部署:

        用flowable Modeler设计好的流程图后,有多种资源部署方式,分别是(1)导出xml,然后部署到flowable数据库中 (2)多个流程模型定义文件,即xml打包成zip/bar,多个资源文件一起部署。(3)Model方式部署,设计器中的发布就是用的此方法。(4)其它方式部署

(1)流程资源xml部署:

/*
 * @Description: 部署工作流程
 *
 *
 * @Date: 2019/4/27 1:53
 * @Param: [filePath, flowName, flowKey]
 * @Param: [filePath, flowName, flowKey]
 * @return: com.zjm.gwork.utils.Result
 **/
public Deployment deployFlow(String filePath) {
    try {        
        DeploymentBuilder deploymentBuilder = repositoryService
                .createDeployment()
                .addClasspathResource(filePath);
        Deployment deployment = deploymentBuilder.deploy();
        logger.info("成功:部署工作流成:" + filePath);
        return deployment;
    } catch (Exception e) {
        logger.error("失败:部署工作流:" + e);
        return null;
    } // end catch
}

(2)zip/bar打包,多个流程资源文件部署:

 InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/approve.zip"); 

ZipInputStream zipInputStream = new ZipInputStream(in);  

 Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service  

                                         .createDeployment()//创建部署对象 

                                         .addZipInputStream(zipInputStream)//使用zip方式部署,将approve.bpmn和approve.png压缩成zip格式的文件  

                                         .deploy();//完成部署

 System.out.println("部署ID:"+deployment.getId());

 System.out.println("部署时间:"+deployment.getDeploymentTime());  

(3)Model部署

  通过act_de_model中存放的Modeler内容来部署,例如代码(此代码别人写的,作者不详,但在此感谢此作者):

org.flowable.ui.modeler.domain.Model modelData =modelService.getModel(modelId);
        //获取模型
        byte[] bytes = modelService.getBpmnXML(modelData);

        if (bytes == null) {
            return (new PermissionResult()).getPermissionResult(500,"模型数据为空,请先设计流程并成功保存,再进行发布。");
        }

        BpmnModel model=modelService.getBpmnModel(modelData);
        if(model.getProcesses().size()==0){
            return (new PermissionResult()).getPermissionResult(500,"数据模型不符要求,请至少设计一条主线流程。");
        }
        byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);

        //发布流程
        String processName = modelData.getName() + ".bpmn20.xml";
   Deployment  deploy=   repositoryService.createDeployment()
                .name(modelData.getName())
                .addString(processName, new String(bpmnBytes, "UTF-8"))
                .deploy();

        return (new PermissionResult()).getPermissionResult(200,"部署成功",deploy);
 

(4)其它方式部署:

    你也可以用代码创建bpmnModel模型,然后用以下代码进行部署:           repositoryService.createDeployment().addBpmnModel("bpmnModel", bpmnModel).deploy();  

三、部署有关的数据库表

act_re_deployment:流程模型部署对象表

    每部署一次生成一条记录,首先生成这条数据,它的id主键将会被act_re_procdef和act_ge_bytearray作为外键。

act_re_procdef(流程定义表)

   很多人不理解为什么还要这张表,需要这张表是因为有时候一次部署可能采用zip/bar进行部署,里面是有多份流程定义文件xml的,这时候act_re_deployment只有一条部署信息,但act_re_procdef有多个记录(一个流程定义对应一条),同时act_ge_bytearray也是每一个流程定义对应2条记录。这个表有DEPLOYMENT_ID_外键字段,用它关联act_re_deployment。

act_ge_bytearray(资源文件表)

    流程模型资源文件的真正存放地方,它每部署一次就会产生2条记录,一条是关于bpmn规范的文件内容存放在BYTES字段中,另一条是图片信息,采用二进制格式存储。提示:可以部署后解析bpmn文件的内容自动生成流程图,实现流程图的跟踪线路。

act_ge_property(主键生成表):部署主键的id生成规则。

act_re_model:这张表,在xml进行部署时,它没有内容(flowable应该是放弃了此表改用act_de_model)。

四、流程模型的常见管理接口

1.部署api

2.验证部署是否成功/可以用来验证部署是否存在 api

3.获取所有部署api

4.删除部署api

5.部署的挂起与激活(以后还会讲到流程实例的挂起与激活,注意区分)

上一篇:从零开始了解 kubernetes,还有谁不会?


下一篇:kubernetes 核心技术-controller