Springboot整合Flowable6.x导出bpmn20

这篇具有很好参考价值的文章主要介绍了Springboot整合Flowable6.x导出bpmn20。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目源码仓库文章来源地址https://www.toymoban.com/news/detail-417781.html

BPMN2.0(Business Process Model and Notation)是一套业务流程模型与符号建模标准,以XML为载体,以符号可视化业务,支持精准的执行语义来描述元素的操作。
Flowable诞生于Activiti,是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义,可以十分灵活地加入你的应用/服务/构架。

本文给出两种从flowable导出流程定义bpmn20.xml的方式。

导入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>

从流程模型导出流程定义bpmn20.xml

通过流程编辑器制作的流程模型(如下图所示), 可以通过模型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 导出效果 %}
Springboot整合Flowable6.x导出bpmn20

从流程定义导出流程定义bpmn20.xml

对于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

项目源码仓库

到了这里,关于Springboot整合Flowable6.x导出bpmn20的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【案例实战】SpringBoot整合EasyExcel实现列表导出功能

    这篇文章会给大家实操一个关于列表导出成excel表格的功能,相信大家在日常工作中也会遇到列表导出的需求,看完本篇文章那么你就可以轻松的去整合列表导出的功能。 本次使用的导出工具是阿里巴巴开源的EasyExcel,关于EasyExcel我这里简单的介绍一下: 我们知道Java解析、

    2024年02月08日
    浏览(49)
  • SpringBoot整合easyExcel实现CSV格式文件的导入导出

    目录 一:pom依赖 二:检查CSV内容格式的工具类 三:Web端进行测试 四:拓展使用 使用hutool工具类来进行导出功能

    2024年02月02日
    浏览(46)
  • SpringBoot整合EasyExcel,Excel导入导出就靠它了

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了如何在SpringBoot项目中整合EasyExcel,实现Excel快捷导入导出,解析Excel导入导

    2024年02月16日
    浏览(33)
  • SpringBoot整合Easyexcel实现将数据导出为Excel表格的功能

    本文主要介绍基于SpringBoot +MyBatis-Plus+Easyexcel+Vue实现缺陷跟踪系统中导出缺陷数据的功能,实现效果如下图: EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。 本文

    2024年02月14日
    浏览(42)
  • 【SpringBoot系列】SpringBoot整合Kafka(含源码)

    前言 在现代的微服务架构中,消息队列已经成为了一个不可或缺的组件。 它能够帮助我们在不同的服务之间传递消息,并且能够确保这些消息不会丢失。 在众多的消息队列中,Kafka 是一个非常出色的选择。 它能够处理大量的实时数据,并且提供了强大的持久化能力。 在本

    2024年02月05日
    浏览(41)
  • Spring Boot 整合流程引擎 Flowable,so easy

    为啥想写 flowable 呢?原因很简单,因为最近在录的 tienchin 项目视频会用到,先写一篇文章和大家打打预防针,后面视频再细讲。 流程引擎,也算是一个比较常见的工具了,我们在日常的很多开发中都会用到,当然用的最多的就是 OA 系统了,但是在一些非 OA 系统中,我们也

    2024年02月07日
    浏览(38)
  • springboot项目实现excel导出

    项目中经常会有列表查询,然后导出excel的功能,以下是其中一种方法,简单写个Demo ,先看项目结构: pom.xml 其他依赖就不提了,主要就只这个依赖org.apache.poi.poi-ooxml 说明: poi是Apache旗下的一个开源项目,由Apache官方维护,poi有两个不同的jar包,分别是处理excel2003和excel2

    2024年02月08日
    浏览(49)
  • 【Springboot系列】SpringBoot整合WebSocket,既然如此简单(含源码)

    前言: 在当今互联网时代,实时通信已经成为了许多应用程序的基本需求。 而WebSocket作为一种全双工通信协议,为开发者提供了一种简单、高效的实时通信解决方案。 本文将介绍如何使用Spring Boot框架来实现WebSocket的集成,快速搭建实时通信功能。 什么是WebSocket? WebSocke

    2024年02月05日
    浏览(42)
  • 【Springboot系列】整合redis+jedis(含源码)

    Spring Boot集成Redis和Jedis客户端使用Redis有以下主要特点: ​ 👉简单易用只需要添加相关依赖和简单配置,就可以直接在Spring Boot应用中使用Jedis客户端操作Redis。这大大简化了使用Redis的难度。 ​ 👉自动配置Spring Boot会根据类路径中的Jedis版本自动配置JedisConnectionFactory。我们只

    2024年02月12日
    浏览(42)
  • SpringBoot整合Gateway 的Demo(附源码)

    Gateway模块 Gateway 的父pom.xml Gateway 的pom.xml 添加注册中心和配置中心配置 添加路由配置信息(放在配置中心) 服务模块 添加一个service服务 配置注册中心和配置中心 配置中心的配置文件内容 效果 不通过gateway访问 通过gateway访问 本文由博客一文多发平台 OpenWrite 发布!

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包