1. 背景
Activiti Modeler有個功能可以將已經部署的流程重新轉化爲可編輯模型,感覺這個功能還是很有實用價值的,百度後發現沒有人整合過,所以自己看了源碼,做了整合,下面分享給大家。
2. 代碼分享
/** * 流程轉化爲可編輯模型 * * @param processDefineModel */ public String changeProcessToModel(ProcessDefineModel processDefineModel) { Model modelData = repositoryService.newModel(); // 初始化Model ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefineModel.getName()); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefineModel.getDescription()); modelData.setMetaInfo(modelObjectNode.toString()); modelData.setName(processDefineModel.getName()); modelData.setKey(processDefineModel.getKey()); // 保存模型 repositoryService.saveModel(modelData);
String deploymentId = processDefineModel.getDeploymentId(); String processDefineResourceName = null; // 通過deploymentId取得某個部署的資源的名稱 List<String> resourceNames = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId); if (resourceNames != null && resourceNames.size() > 0) { for (String temp : resourceNames) { if (temp.indexOf(".xml") > 0) { processDefineResourceName = temp; } } }
/* * 讀取資源 * deploymentId:部署的id * resourceName:資源的文件名 */ InputStream bpmnStream = processEngine.getRepositoryService() .getResourceAsStream(deploymentId, processDefineResourceName); impoerModelUtil.creatModelByImpoutStream(bpmnStream, modelData.getId());
return modelData.getId();
} |
/** * 創建Model二進制信息 * @param bpmnStream * @param ModelID */ public void creatModelByImpoutStream(InputStream bpmnStream, String ModelID) { XMLInputFactory xif; InputStreamReader in = null; XMLStreamReader xtr = null; try { xif = XmlUtil.createSafeXmlInputFactory(); in = new InputStreamReader(bpmnStream, "UTF-8"); xtr = xif.createXMLStreamReader(in); BpmnModel bpmnModel = (new BpmnXMLConverter()).convertToBpmnModel(xtr);
ObjectNode modelNode = new BpmnJsonConverter().convertToJson(bpmnModel); repositoryService.addModelEditorSource(ModelID, modelNode.toString().getBytes("utf-8"));
} catch (XMLStreamException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } finally { if (xtr != null) { try { xtr.close(); } catch (XMLStreamException e) { e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } }
if (bpmnStream != null) { try { bpmnStream.close(); } catch (IOException e) { e.printStackTrace(); } }
} } |