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

  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对象
            // 转为bpmnModelBpmnModel 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);// 转为bpmnModelBpmnModel 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 6研究01 - 流程文件的手动导入相关推荐

  1. ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介...

    ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...

  2. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  3. activity6快速部署流程文件

    前言 工作中用到了activity6,个人觉得activity作为一款优秀的开源工作流引擎框架,得到众多企业的追捧而且经历了这么多年依然生命力不减值得花时间好好研究,接下来将通过几篇文章好好说说act ...

  4. activiti5 流程文件中使用java 方法

    1.首先创建一个java类UserService.java,有一个方法 public String getUsers(){ return "123,456,789,147"; } ...

  5. blf文件用什么软件打开_如何用皕杰流程创建一个blf演示流程文件?

    1. 打开BIOS Studio.exe报表流程设计器,新建项目,命名为演示流程项目: 2. 在项目下新建目录,命名为演示流程: 3. 在目录下新建工作流程bfl文件,流程名称leaveFlow,显示 ...

  6. SAP QM 稳定性研究功能研习系列1 - 稳定性研究总流程

    SAP QM 稳定性研究功能研习系列1 - 稳定性研究总流程 如下图是SAP系统里标准的Stability Study Processing. 2,QM01创建一个QS类型(StabilStudy w ...

  7. Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹

    Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹 目录 实现步骤和结果 核心代码 实现步骤和结果 ...

  8. 2020 Vue 基于Element-UI开发 手动导入并使用Timeline组件(附组件文件)查看快递信息

    文章目录 1.引言 2.导入与配置 提供文件: 实现效果: 实现过程: 项目源码: 3.结束语 点击进入Vue❤学习专栏~ 1.引言 寒假是用来反超的!一起来学习Vue把,这篇博客是关于Timelin ...

  9. 《数据访问 - 第01章 文件 - 文件和流的概念》

    <数据访问 - 第01章 文件 - 文件和流的概念> 1.数据 在软件领域中,数据持久化方式包括: a)磁盘文件,在C#中使用文件流来进行数据的读写操作 b)数据库,在C#使用ADO.NE ...

最新文章

  1. WAMP 2.5 无法访问局域网的解决方法
  2. Winform-DataGridView
  3. Centos7.5源码编译安装nodejs
  4. 【Python CheckiO 题解】Days Between
  5. New(new 运算符)
  6. node中使用shell脚本
  7. ReactNative 启动js server报错:Metro Bundler can't listen on port 8081
  8. layoutSubview 总结
  9. CF438D The Child and Sequence
  10. 笔记本显示未连接录音服务器,电脑显示未安装音频设备怎么办?
  11. html制作手机预览效果,webstorm实现手机预览页面
  12. Oracle 同比环比
  13. 绘一幅人人出彩的教育画卷
  14. Android面试常见问题汇总
  15. 手机移动开发大作业 -- 仿淘宝app
  16. 人工智能欠缺对语言和情感的理解和处理能力
  17. 计算机网络笔记4 网络层
  18. python文件操作实现全文或单行替换
  19. 高等数学学习笔记——第三十二讲——泰勒公式
  20. 德语语法笔记——虚拟式

热门文章

  1. 2021-2022学年广州中学九年级第一学期期中考试英语试题
  2. Simpsons’ Hidden Talents (HDU-2594)
  3. 微平均 宏平均 微平均(准确率、召回率、f1-score相等) 以及 TP、TN、FP、FN的理解
  4. Activity 边边角角
  5. 山东大学软件学院数据结构练习题
  6. 软件测试英文项目,一个成功软件测试项目的经验(国外英文资料).doc
  7. osg学习(三十一)osg、Qt的image
  8. 甲骨文面试经历 Oracle Interview
  9. 第一章 无线通信收发机结构 杨远望 和习题
  10. mac手把手指导安装whistle