查看Flowable的org.flowable.engine.repository.DeploymentBuilder类,Flowable提供了六种部署流程方式
DeploymentBuilder addInputStream(String resourceName, InputStream inputStream);
DeploymentBuilder addClasspathResource(String resource);
DeploymentBuilder addString(String resourceName, String text);
DeploymentBuilder addBytes(String resourceName, byte[] bytes);
DeploymentBuilder addZipInputStream(ZipInputStream zipInputStream);
DeploymentBuilder addBpmnModel(String resourceName, BpmnModel bpmnModel);
不同的流程文件类型,使用不同的部署方式。
我这边的需求是在设计完成模型后即进行部署,所以我使用的是addByte方式,方法如下:
1)在process.html中新增了“发布”按钮
<div class="btn-group pull-right">
<button type="button" class="btn btn-default" ng-click="deployModel()" ng-if="model.process.latestVersion">
{{'PROCESS.ACTION.DEPLOY_MODEL' | translate}}
</button>
</div>
如下图:

2)在process.js把modelId传到后端:
$scope.deployModel = function() {
var data = {
modelId: $routeParams.modelId
};
$http({method: 'POST', url: FLOWABLE.APP_URL.getDeployUrl(), data: data}).
success(function(data, status, headers, config) {
alert(data.msg)
}).
error(function(data, status, headers, config) {
alert(data.msg)
});
};
3)使用addByte方式进行流程发布:
public ResultDTO deployByProcessKey(Map<String, Object> map) {
try {
String modelId = (String) map.get("modelId");
Model modelData = modelService.getModel(modelId);
byte[] bytes = modelService.getBpmnXML(modelData);
if (bytes == null) {
return ResultDTO.failure("模型数据为空,请先设计流程并成功保存,再进行发布。");
}
BpmnModel model = modelService.getBpmnModel(modelData);
if (model == null || model.getProcesses().size() == 0) {
return ResultDTO.failure("数据模型不符要求,请至少设计一条主线流程。");
}
byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
String processName = modelData.getName() + ".bpmn20.xml";
repositoryService.createDeployment()
.name(modelData.getName())
.addBytes(processName, bpmnBytes)
.deploy();
} catch (Exception e) {
return ResultDTO.failure("流程发布失败!");
}
return ResultDTO.success("流程发布成功!");
}