一、流程模型资源
流程定义文件:文件的命名必须是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.部署的挂起与激活(以后还会讲到流程实例的挂起与激活,注意区分)