Activiti 6研究01 - 流程文件的手动导入

activiti部署时json与XML与BpmnModel之间的相互转换 如果使用的是activiti自带的前端设计器,画完图保存model时会生成两个主要参数,一个是json.xml【json串】,一个是svg.xml,一个是数据,一个是图片,样板参见: 链接:https://share.weiyun.com/XgJg85XC 密码:nhkjyq 那么保存的时候是json串,引擎认识的却是符合bpmn2.0规范的xml,所以在首次的部署的时候要将json串转换为BpmnModel,再将BpmnModel转换成xml保存进数据库,以后每次使用就直接将xml转换成BpmnMod 阅读详情

在某些场景下,需要进行流程定义文件的手动导入,此处分享一下我的大致流程及踩过的坑,希望对大家有所帮助。

  1. 读入文件(此处以上传文件为例)
            InputStream fileInputStream = file.getInputStream();
            XMLInputFactory xif = XMLInputFactory.newInstance();
            InputStreamReader in = new InputStreamReader(fileInputStream, "UTF-8");
            XMLStreamReader xtr = xif.createXMLStreamReader(in);
  1. 通过BpmnXMLConverter将xml内容转换为BpmnModel对象
            // 转为bpmnModel
            BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
  1. 建立Model,通过BpmnJsonConverter将BpmnXML对象转成Json对象并保存入仓库(若不需要建立Model,此步可跳过)
            Model model = createNewModel();
            ObjectNode objectNode = new BpmnJsonConverter().convertToJson(bpmnModel);
            repositoryService.addModelEditorSource(model.getId(), objectNode.toString().getBytes("utf-8"));
    /**
     * 创建新的模型
     *
     * @return
     */
    private Model createNewModel() {
        Model model = repositoryService.newModel();
        String modelKey = String.valueOf(CommonFunc.genID());
        ObjectNode modelNode = objectMapper.createObjectNode();
        modelNode.put(ModelDataJsonConstants.MODEL_NAME, modelKey);
        modelNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
        model.setName(modelKey);
        model.setKey(modelKey);
        model.setMetaInfo(modelNode.toString());
        repositoryService.saveModel(model);

        return model;
    }

  1. 将BpmnModel发布。
    此处需特别注意:如果希望记录下原始文件名,切记以.bpmn20.xml为后缀,否则发布不成功(数据库中会发现act_re_deployment表中已有数据,对应的act_ge_bytearray表中,xml文件记录也已插入,但是act_re_procdef表中却没有数据。关键是还没有异常)。
            String srcFileName = file.getOriginalFilename();
            // 此处保存上传文件的原始文件名,但必须是以.bpmn20.xml结尾,否则无法产生流程数据且不报错。
            if (!srcFileName.endsWith(".bpmn20.xml"))
                srcFileName += ".bpmn20.xml";
            Deployment deployment = repositoryService.createDeployment()
                    .name(String.valueOf(userID))	// deployment名称,此处用于保存导入用户ID
                    .addBpmnModel(srcFileName, bpmnModel)
                    .enableDuplicateFiltering()
                    .deploy();
  1. 若做了第3步,建议将DeploymentID与Model关联保存起来
            model = repositoryService.getModel(model.getId());
            model.setDeploymentId(deployment.getId());
            repositoryService.saveModel(model);

附导入流程文件完整代码段:

    @PostMapping("/ImportProcess")
    public void ImportProcess(@RequestAttribute("UserID") long userID, MultipartFile file) {
        if (file == null) {
            logger.error("No file upload.");
            throw new GlobalRuntimeException(ErrorInfo.NO_FILE_UPLOAD);
        }

        try {
            InputStream fileInputStream = file.getInputStream();
            XMLInputFactory xif = XMLInputFactory.newInstance();
            InputStreamReader in = new InputStreamReader(fileInputStream, "UTF-8");
            XMLStreamReader xtr = xif.createXMLStreamReader(in);
            // 转为bpmnModel
            BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);

            Model model = createNewModel();
            ObjectNode objectNode = new BpmnJsonConverter().convertToJson(bpmnModel);
            repositoryService.addModelEditorSource(model.getId(), objectNode.toString().getBytes("utf-8"));

            String srcFileName = file.getOriginalFilename();
            // 此处保存上传文件的原始文件名,但必须是以.bpmn20.xml结尾,否则无法产生流程数据且不报错。
            if (!srcFileName.endsWith(".bpmn20.xml"))
                srcFileName += ".bpmn20.xml";
            Deployment deployment = repositoryService.createDeployment()
                    .name(String.valueOf(userID))           // deployment名称,此处用于保存导入用户ID
                    .addBpmnModel(srcFileName, bpmnModel)
                    .enableDuplicateFiltering()
                    .deploy();

            model = repositoryService.getModel(model.getId());
            model.setDeploymentId(deployment.getId());
            repositoryService.saveModel(model);

            ProcessDefinition define = repositoryService.createProcessDefinitionQuery()
                    .deploymentId(deployment.getId())
                    .singleResult();
            logger.debug("Import process: {} - {}, deploy id: {}", define.getId(), define.getKey(), define.getDeploymentId());
        } catch (Exception ex) {
            logger.error("Import process has exception.\n", ex);
            throw new GlobalRuntimeException(ErrorInfo.IMPORT_PROCESS);
        }
    }
activiti流程导入导出 activiti流程导入导出 提示信息:根据modelId进行对应流程的导入导出 使用场景:我们在开发环境新建了一个流程之后,上到测试环境或者生产环境的时候能够更快速准确,不需要自己手动再画一遍流程图,还容易出错 文章目录activiti流程导入导出前言一、根据modelId导出xml流程文件二、根据xml流程文件导入流程总结 前言 没啥好说的,直接看代码吧 一、根据modelId导出xml流程文件 主要代码如下(示例): /** * 流程定义资源文件 */ @Data @NoArgsCon 阅读详情

相关推荐

2019最新Activiti6.0部署流程图到数据库

1.首先,创建流程图 2.创建方式: 在src下面右键 3.写上文件名然后ok 4.设计流程图 5.流程设计好之后,复制一份修改后缀,把bpmn后缀修改为xml后缀,使用快捷键SHIFT+F6 改好后缀名之后,选中文件,继续执行下一步使用快捷键CTRL+ALT+SHIFT+U会出现以下界面 以上bpmn文件和png文件创建好之后就开始代码的编写 部署有两种方式 1.部署单个流程定义文...

Java肖帝的博客 3688

Activity 流程模型导入导出

activity 学习记录

u011262757的博客 1170

Activiti6.0(九)整合自定义在线流程设计器(BpmnModel使用)

目录 一、前言 二、整合 一、前言 前面所有的例子都是先基于Activiti-app在线绘制流程图,然后导出为xml文件,最后作为外部资源被部署到数据库的,虽然该种方式功能很强大但是不太好集成,有些现有的在线流程编辑器也实在是过于复杂和丑陋,用户并不需要配置那么多东西。 因此将流程的设计过程交给用户时,用户肯定需要一个美观、简洁的流程设计器,那这玩意就由各公司自己寻找合适的开源工具或者自...

清茶的博客 7364

Activiti支持直接部署扩展名为bpmn的流程文件

在5.9及其之前的版本Activiti不支持直接部署“bpmn”为扩展名的流程,所以之前在这篇文章中讲解如何打包bar文件时要求把bpmn重名为bpmn20.xml再打包。 不是了bpmn结尾的流程定义文件之后启动流程时会提示对应的流程不存在,这是因为Activiti未能识别bpmn扩展名的文件,它不知道如何处理当然也就没有作为流程定义存储到数据,...

weixin_33779515的博客 708

Springboot集成activiti6.0踩坑实践

一、springboot2.0集成activiti6.0 1.1引入jar包 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency> 1.2配置myibatis,生成28张表

hanguofei的博客 1148

activiti 6.x 全帮助文档(官方版本)

Activiti官方工作流全文档。包括如何配置,快速入门,由浅入深,非常好。

怎么上传附件啊

第一次用这个东西,,,呵呵  如题

wy1109的专栏 402

activiti6.0 中文api

activiti6.0 中文api,

【弄nèng - Activiti6】Activiti6入门篇(八)—— 手动任务与接收任务

文章目录1. 手动任务与接受任务1.1 流程设计1.2 定义DeleGate类1.2 测试类1.3 运行1.3.1 启动任务1.3.2 查询任务1.3.3 查询执行流1.3.4 完成任务源码地址项目推荐 手动任务表示不需要任何程序或者流程引擎的驱动会自动执行的任务,当执行流到达该任务时,会自动离开,只是简单的记录相关流程历史。 接受任务总是等待外界的通知,流程才会向下执行。 *后台服务基于Sp...

司马缸砸缸了 1490

SAP LSMW保姆级操作文档

SAP LSMW(Legacy System Migration Workbench)是一个强大的工具,旨在简化旧系统数据向SAP系统的迁移过程。它允许用户通过多种方式导入数据,包括直接输入、批处理输入和BAPI。LSMW支持数据映射和转换,确保数据在迁移过程中保持一致性,减少手动输入的需求,从而提高效率,适用于新系统实施和数据更新项目。在日常运维过程中我们经常会遇到用户要求我们批量改一写数据,通常这些字段的信息有些SAP是提供程序可以批量进行更改的比如主数据的MM17、通用更改数据的MASS。

我小时候很黑的博客 4917

linux离线安装nginx

linux离线安装nginx

zhang_130914036的博客 9346

Activiti6(1)

3.新建模型后,会进入流程模型设计界面,在流程设计界面中,只需要普通的鼠标拖拉操作,即可完成流程模型的定义,Task App:用于管理整个 activiti-app 的任务,在该功能里面也可以启动流程。Idenity management:身份信息管理,可以管理用户、用户组等数据。可以包含多个流程模型,应用可发布给其他用户使用。

szh_28的博客 1258

转录组PCA分析3大常见误区:数据标准化、离群样本与批次效应处理

本文深入探讨转录组PCA分析中的三大常见误区:数据标准化、离群样本识别与批次效应处理。通过实战案例和R代码演示,揭示如何优化PCA结果以提升生物学解释力,特别关注数据标准化策略的选择和批次校正方法的应用,帮助研究者避免常见陷阱并获得可靠的转录组分析结果。

weixin_28362173的博客 372

activiti工作流核心java api使用,activiti退回、跳过、强制结束实现,BpmnModel模型操作,运行中流程图、获取流程变量、候选人操作

前言 本文会详细讲解

a771664696的博客 1万+

提示词工程中的上下文隔离

已经进入context的prompt是没有办法让大模型真正的忘记的,但是可以通过prompt技巧强约束模型的后续推理中“不再使用、不再提及、不再引用”某部分提示词,这其实是一种行为抑制(behavior suppression),并不是删除。

Criss@陈磊 233

YOLO11创新改进系列:卷积,主干 注意力,C3k2融合,检测头等创新机制(已更新110+)

本专栏提供详细的 YOLO11 教程,包括基础知识、源码解析、入门实践、算法改进和项目实战,适合发表YOLO11 学习者订阅。内容包含 100+多篇独家改进机制,适合发表论文,评分高达 96 分。订阅者将获得一键运行的改进文件及答疑交流群支持。 使用服务器的同学还可以私聊获取搭建好的运行环境。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1万+

Activiti入门01

学习Activiti所记录的一些笔记,有关于一些Activiti的相关配置

m0_51709496的博客 1166

生成模型实战 | StyleGAN详解与实现

StyleGAN 能够生成非常高分辨率人脸图像的关键在于,在增加分辨率的步骤中逐步增加生成网络和判别网络的复杂性,以便在每一步中,两个模型都可以很好地完成任务。我们学习了如何通过确保每个分辨率的特征由一个独立的输入(称为风格向量)来控制,从而操纵生成图像的风格,以及如何通过将图像之间的风格进行交换来操作不同图像的风格。

盼小辉丶的博客 7566

activiti获取流程图和bpmn文件保存到本地

activiti中文手册:http://www.mossle.com/docs/activiti/index.html

qq_22849235的博客 3937

[VT虚拟化驱动]利用EPT实现无痕HOOK

本章利用讲EPT无痕HOOK

吾无法无天的博客 1万+

2025目标检测新方向:弱监督目标检测的最新论文研究与应用

2025目标检测新方向:弱监督目标检测的最新论文研究与应用 ,人工智能,计算机视觉,大模型,AI,本文聚焦2025年弱监督目标检测新方向,阐述其基础概念,包括弱监督学习定义、标注形式及面临的定位不准等挑战。介绍最新论文研究的多种算法,如基于点标注的算法等,还涉及相关模型、应用领域,以及评价指标、数据集、实现工具框架,分析未来趋势与补充挑战及解决方案,为该领域研究提供全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

01、Activiti基础

一、工作流概述 1、工作流介绍:工作流、通过计算机对业务流程自动化执行管理 2、工作流框架:Activity5.13、JBPM4.4、OSWorkFlow、WorkFlow 3、具体应用:物流、人事管理系统、财务管理系统、等 4、工作流实现原理:当业务流程发生变更后、业务代码可以不发生改变、只需更新业务流程图。 二、Activiti概述 Alfresco软件在2010年5月17日宣...

一叶知秋 920

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

一、activiti6.0 本地部署流程

一、在官网中下载activiti6.0 1、官网地址:https://www.activiti.org/get-started 2、将下载好的文件解压,将解压出来的3个war包直接放入tomcat的webapps的目录中(提前下好tomcat,这里用的tomcat8.x) 3、tomcat直接启动。 二、填坑 1、修改activiti-app中的\webapps\activiti-app\WEB-INF\classes\META-INF\activiti-app目录下的a...

ATadpole的博客 1779

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Activiti7工作流(十二)Activiti7流程中的任务

有些情况下我们在 服务任务 处理完相关业务后在下一个节点中也需要服务任务执行的返回值,这时可以通过服务执行的返回值处理,具体通过为服务任务定义的activiti:resultVariable属性设置为流程变量,它可以是新的流程变量,也可以是已经存在的流程变量。当流程执行到达脚本任务时,会执行相应的脚本。在这个JavaDelegate类的execute()方法中,执行自定义业务逻辑发生异常时,抛出了BpmnError(加粗部分的代码),该构造函数的参数是业务错误代码,用于决定由哪个错误处理器来响应这个错误。

tigerhhzz的博客 1308

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

activiti前端画图转化_activiti在线画流程图

springboot2.2activiti6.0activiti-modeler 5.22.0注明:版本不一样会导致报错效果图代码分享:链接:https://pan.baidu.com/s/1mDzlm9SdPYAMl2lq0GFPJA提取码:1234pom文件4.0.0org.springframework.bootspring-boot-starter-parent2.2.0.RELEASEc...

weixin_39989384的博客 1425

activiti7执行流程详解

官方定义:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。我的理解:工作流就是针对程序的业务流程进行自动化管理、执行的流。让业务的执行过程根据我们预定义好的规则不断地触发和执行。它最明显的体现就是在项目中的一些审批操作,比如说员工请假、订单审核等等类似一种流的操作时业务在当前操作完成后自动的跳转进行下一操作。

yuqu1028的博客 2517
上一篇: 关于WPF的ComboBox中Items太多而导致加载过慢的问题
下一篇: Activiti 6研究02 - 使用Activiti与业务协同工作的一些约定
Python
博客等级 码龄26年 1973粉丝 1567原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值