Flowable流程部署

1,749 阅读1分钟

查看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("流程发布成功!");
    }