Springboot整合Flowable6.x導(dǎo)出bpmn20的步驟詳解
BPMN2.0(Business Process Model and Notation)是一套業(yè)務(wù)流程模型與符號(hào)建模標(biāo)準(zhǔn),以XML為載體,以符號(hào)可視化業(yè)務(wù),支持精準(zhǔn)的執(zhí)行語(yǔ)義來(lái)描述元素的操作。
Flowable誕生于Activiti,是一個(gè)使用Java編寫的輕量級(jí)業(yè)務(wù)流程引擎。Flowable流程引擎可用于部署B(yǎng)PMN 2.0流程定義,可以十分靈活地加入你的應(yīng)用/服務(wù)/構(gòu)架。
本文給出兩種從flowable導(dǎo)出流程定義bpmn20.xml的方式。
導(dǎo)入Maven依賴
<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>
從流程模型導(dǎo)出流程定義bpmn20.xml
通過(guò)流程編輯器制作的流程模型(如下圖所示), 可以通過(guò)模型ID(Model.id),調(diào)用flowable 的 RepositoryService 來(lái)生成bpmn20.xml。
@Service public class MyModelServiceImpl implements MyModelService { @Autowired private RepositoryService repositoryService; /** * 通過(guò)模型ID,生成模型BPMN20.xml * @param guid 模型id,即model.id * @return * @throws Exception */ @Override public ResultDTO genXml(String guid) throws Exception { /**通過(guò)ID獲取模型 **/ Model modelData = repositoryService.getModel(guid); byte[] bytes = repositoryService.getModelEditorSource(modelData.getId()); if (bytes == null) { return ResultDTO.failureCustom("模型數(shù)據(jù)為空,請(qǐng)先設(shè)計(jì)流程并成功保存,再進(jìn)行發(fā)布。"); } JsonNode modelNode = new ObjectMapper().readTree(bytes); BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode); if (model.getProcesses().size() == 0) { return ResultDTO.failureCustom("數(shù)據(jù)模型不符要求,請(qǐng)至少設(shè)計(jì)一條主線流程。"); } /** 設(shè)置名稱 **/ model.getMainProcess().setName(modelData.getName()); /** 設(shè)置 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); } }
運(yùn)行效果如下:
{% asset_img res1.gif 導(dǎo)出效果 %}
從流程定義導(dǎo)出流程定義bpmn20.xml
對(duì)于flowable已經(jīng)部署的流程,可根據(jù)流程定義(ProcessDefinition.id),調(diào)用flowable 的RepositoryService來(lái)導(dǎo)出其bpmn20.xml。
@RestController @Slf4j public class ProcessController { @Autowired private MyProcessService processService; /** * 通過(guò)processDefinition.id和resType導(dǎo)出流程XML或圖片資源 * @param id processDefinition.id * @param resType 取值 “image/png”或“text/xml” * @param response * @throws Exception */ @GetMapping(value = "/res/exp") @ApiOperation("通過(guò)processDefinition.id和resType導(dǎo)出流程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; } }
運(yùn)行效果如下:
到此這篇關(guān)于Springboot整合Flowable6.x導(dǎo)出bpmn20的文章就介紹到這了,更多相關(guān)Springboot整合Flowable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)布隆過(guò)濾器的方法步驟
布隆過(guò)濾器是可以用于判斷一個(gè)元素是不是在一個(gè)集合里,并且相比于其它的數(shù)據(jù)結(jié)構(gòu),布隆過(guò)濾器在空間和時(shí)間方面都有巨大的優(yōu)勢(shì)。下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)布隆過(guò)濾器的相關(guān)資料,需要的朋友可以參考下2018-11-11JVM內(nèi)存結(jié)構(gòu)劃分實(shí)例解析
這篇文章主要介紹了JVM內(nèi)存結(jié)構(gòu)劃分實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12- 本文給大家分享的是一則使用java編寫的文件管理器的代碼,新人練手的作品,邏輯上還是有點(diǎn)小問(wèn)題,大家?guī)兔纯窗伞?/div> 2015-04-04
Java?Web項(xiàng)目中解決中文亂碼方法總結(jié)(三種最新方法)
這篇文章主要介紹了Java?Web項(xiàng)目中解決中文亂碼方法總結(jié),本文給大家分享三種最新解決方法,需要的朋友可以參考下2022-06-06SpringMVC 參數(shù)綁定之視圖傳參到控制器的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringMVC 參數(shù)綁定之視圖傳參到控制器的相關(guān)知識(shí),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03基于javaWeb 項(xiàng)目SSM配置要點(diǎn)及可能遇到的問(wèn)題和解決方法
下面小編就為大家?guī)?lái)一篇基于javaWeb 項(xiàng)目SSM配置要點(diǎn)及可能遇到的問(wèn)題和解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Java基礎(chǔ)之Unsafe內(nèi)存操作不安全類詳解
Java是面向?qū)ο笳Z(yǔ)言,在使用Java編程時(shí),大多數(shù)情況下都不會(huì)直接操作內(nèi)存,而且Java也不提倡直接操作內(nèi)存,但是Java中到底有沒(méi)有可以直接操作內(nèi)存的工具類呢?有!Java中提供Unsafe類可以用來(lái)來(lái)直接操作內(nèi)存,文中詳細(xì)介紹了Unsafe內(nèi)存操作不安全類,需要的朋友可以參考下2021-06-06Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10最新評(píng)論