activiti流程导入导出
提示信息:根据modelId进行对应流程的导入导出
使用场景:我们在开发环境新建了一个流程之后,上到测试环境或者生产环境的时候能够更快速准确,不需要自己手动再画一遍流程图,还容易出错
前言
没啥好说的,直接看代码吧
一、根据modelId导出xml流程文件
主要代码如下(示例):
/**
* 流程定义资源文件
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ProcessDefinitionResourceResponse implements Serializable {
private String fileName;
private byte[] fileBytes;
}
public ProcessDefinitionResourceResponse procDefXmlFile(String modelId){
Model model = repositoryService.getModel(modelId);
Assert.isTrue(null != model,"流程模型不存在");
// 获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(model.getDeploymentId()).singleResult();
Assert.isTrue(null != processDefinition,"流程定义不存在");
InputStream inputStream = repositoryService.getResourceAsStream(model.getDeploymentId(),processDefinition.getResourceName());
return ProcessDefinitionResourceResponse.builder()
.fileBytes(IoUtil.readInputStream(inputStream,processDefinition.getResourceName()))
.fileName(processDefinition.getResourceName())
.build();
}
二、根据xml流程文件导入流程
主要代码如下(示例):
public void createModelByXmlFile(byte[] bytes,String fileName) throws Exception {
InputStreamSource inputStreamSource = new InputStreamSource(new ByteArrayInputStream(bytes));
// 解析xml文件
BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(inputStreamSource,false,true);
// 查找对应的流程model是否已存在
Model existModel = repositoryService.createModelQuery()
.modelName(bpmnModel.getMainProcess().getName())
.modelKey(bpmnModel.getMainProcess().getId())
.singleResult();
// 唯一标识
Model model = null != existModel?existModel:repositoryService.newModel();
model.setKey(bpmnModel.getMainProcess().getId());
// 名称
model.setName(bpmnModel.getMainProcess().getName());
// 分类
model.setCategory(bpmnModel.getMainProcess().getName());
// 版本号
model.setVersion(null != existModel?existModel.getVersion()+1:1);
// 部署
Deployment deployment = repositoryService
.createDeployment()
.name(model.getName())
.key(model.getKey())
.addBytes(fileName,bytes)
.deploy();
model.setDeploymentId(deployment.getId());
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId())
.singleResult();
ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, model.getVersion());
modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
// 相关信息
model.setMetaInfo(modelObjectNode.toString());
//保存模型,存储数据到表:act_re_model
repositoryService.saveModel(model);
ObjectNode modelNode = bpmnJsonConverter.convertToJson(bpmnModel);
//更新资源信息到model
repositoryService.addModelEditorSource(model.getId(), modelNode.toString().getBytes("utf-8"));
}
总结
看完点个赞用起来吧