您好,登錄后才能下訂單哦!
本篇內容主要講解“Springboot怎么整合Flowable6.x導出bpmn20”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Springboot怎么整合Flowable6.x導出bpmn20”吧!
BPMN2.0(Business Process Model and Notation)是一套業務流程模型與符號建模標準,以XML為載體,以符號可視化業務,支持精準的執行語義來描述元素的操作。
Flowable誕生于Activiti,是一個使用Java編寫的輕量級業務流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定義,可以十分靈活地加入你的應用/服務/構架。
<dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter-basic</artifactId> <version>6.4.1</version> </dependency> <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-json-converter</artifactId> <version>6.4.1</version> </dependency>
通過流程編輯器制作的流程模型(如下圖所示), 可以通過模型ID(Model.id),調用flowable 的 RepositoryService 來生成bpmn20.xml。
@Service public class MyModelServiceImpl implements MyModelService { @Autowired private RepositoryService repositoryService; /** * 通過模型ID,生成模型BPMN20.xml * @param guid 模型id,即model.id * @return * @throws Exception */ @Override public ResultDTO genXml(String guid) throws Exception { /**通過ID獲取模型 **/ Model modelData = repositoryService.getModel(guid); byte[] bytes = repositoryService.getModelEditorSource(modelData.getId()); if (bytes == null) { return ResultDTO.failureCustom("模型數據為空,請先設計流程并成功保存,再進行發布。"); } JsonNode modelNode = new ObjectMapper().readTree(bytes); BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode); if (model.getProcesses().size() == 0) { return ResultDTO.failureCustom("數據模型不符要求,請至少設計一條主線流程。"); } /** 設置名稱 **/ model.getMainProcess().setName(modelData.getName()); /** 設置 targetNamespace **/ if(StringUtils.isNotBlank(modelData.getCategory())) { model.setTargetNamespace(modelData.getCategory()); } byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model); String xml = new String(bpmnBytes, "UTF-8"); return ResultDTO.success(xml); } }
運行效果如下:
{% asset_img res1.gif 導出效果 %}
對于flowable已經部署的流程,可根據流程定義(ProcessDefinition.id),調用flowable 的RepositoryService來導出其bpmn20.xml。
@RestController @Slf4j public class ProcessController { @Autowired private MyProcessService processService; /** * 通過processDefinition.id和resType導出流程XML或圖片資源 * @param id processDefinition.id * @param resType 取值 “image/png”或“text/xml” * @param response * @throws Exception */ @GetMapping(value = "/res/exp") @ApiOperation("通過processDefinition.id和resType導出流程XML或圖片資源") public void resourceRead(@RequestParam("id") String id,@RequestParam("resType") String resType, HttpServletResponse response) throws Exception { /** resType取值 “image/png”或“text/xml” **/ InputStream resourceAsStream = processService.resourceRead(id,resType); byte[] b = new byte[1024]; int len = -1; while ((len = resourceAsStream.read(b, 0, 1024)) != -1) { response.getOutputStream().write(b, 0, len); } } }
@Service public class MyProcessServiceImpl implements MyProcessService { @Autowired private RepositoryService repositoryService; @Override public InputStream resourceRead(String id, String resType) throws Exception { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult(); String resourceName = ""; if (resType.equals("image/png")) { resourceName = processDefinition.getDiagramResourceName(); } else if (resType.equals("text/xml")) { resourceName = processDefinition.getResourceName(); } InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName); return resourceAsStream; } }
運行效果如下:
到此,相信大家對“Springboot怎么整合Flowable6.x導出bpmn20”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。