一、流程定义的版本

  当部署流程定义时,数据库中的流程定义会是这个样子:

id key name version
myProcess:1:676 myProcess My important process 1

  如果我们现在部署同一个流程的更新版本(例如修改部分用户任务),且保持流程定义的id不变,那么流程定义表中会包含下面的记录:

id key name version
myProcess:1:676 myProcess My important process 1
myProcess:2:870 myProcess My important process 2

  当调用执行流程时,会使用版本2的流程定义,因为这是这个流程定义的最新版本。

二、流程部署方式

2.1 指定项目内资源文件部署

  比如在resources/下新建资源文件single-task.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitionsxmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:flowable="http://flowable.org/bpmn"targetNamespace="Examples"><process id="singleTask" name="The One Task Process"><startEvent id="theStart" /><sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" /><userTask id="theTask" name="my task" flowable:assignee="zhangsan" /><sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" /><endEvent id="theEnd" /></process></definitions>

  部署示例代码:

 // 资源路径
String path = "single-task.bpmn20.xml";
// 创建部署构建器
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
// 添加资源
deploymentBuilder.addClasspathResource(path);
// 执行部署
deploymentBuilder.deploy();
// 验证部署
long count = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").count();
// count等于1,则说明部署成功

  只要是在项目class目录下的资源,都可以用这种方式部署。

  这种方式一般用于开发测试阶段,真正的生产环境,是通过与web管理页面交互部署。

2.2 springboot自动部署

  在springboot环境下,resources/processes目录下的任何BPMN 2.0流程定义都会被自动部署。

2.3 接口方式

  实际生产中,我们需要接收前端传回来的流程定义数据,然后更新部署。

  下面我们省去前端访问接口参数的展示,仅演示后端处理代码。

// 从前端接收到的XML字符串
// 此处省去xml具体内容,可参考2.1的single-task.bpmn20.xml示例
// 注意将id定义为singleTask2,以便跟2.1的内容作出区别
String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><definitions...</definitions>";
// 创建部署构建器
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
// 执行部署
deploymentBuilder.addString("single-task2.bpmn20.xml", text).deploy();
// 验证部署
long count = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask2").count();
// count等于1,则说明部署成功

2.4 zip压缩包

  当我们需要一次同时部署多个资源时,可以通过zip压缩包的部署方式。

String fileName = "path/multi-task.zip";
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(fileName));repositoryService.createDeployment().name("multi-task.zip").addZipInputStream(inputStream).deploy();

补充:流程定义文件,需要由流程设计器生成。整合流程设计器,可参考:https://blog.csdn.net/JinYJ2014/article/details/122412601

三、流程管理

  业务系统的第一步,就是需要一个列表可以浏览和管理流程定义。

3.1 获取已部署流程列表

@Autowired
private RepositoryService repositoryService;public List getDeployList() {List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();return list;
}

3.2 读取流程图片

  显然,管理页面需要显示流程图片的功能。

  Flowable引擎会在流程部署时,自动生成流程图片。

  获取流程图片方法:

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").singleResult();String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);

注意:如果不需要或不希望在部署时生成流程图,可以在流程引擎配置中设置isCreateDiagramOnDeploy参数:

<property name="createDiagramOnDeploy" value="false" />

3.3 读取流程定义的XML

  管理界面可增加“显示流程定义代码”功能,即读取显示流程定义的XML内容。

// 根据processDefinitionId查询
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
// 读取资源流,resourceName为前端传回的资源名称
InputStream stream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
//读取到的资源流再返回到前端

3.4 删除部署

  一个流程定义不是通过流程定义ID删除,而是通过流程定义的部署ID删除。在执行删除时,会将和本次部署有关的资源一起删除。

repositoryService.deleteDeployment(deploymentId, true);

四、小结

  本篇介绍了流程定义的版本、部署及管理的使用方法。当然,在实际应用中,还有很多细节需要优化,比如流程定义部署时的去重,分页获取流程列表等等。

Flowable实战(三)流程部署管理相关推荐

  1. Camunda 实战 :流程部署和发起 (二)

    Camunda 实战 :流程部署和发起 上一篇我们讲述了Camunda是如何下载并安装的,这一篇我们来聊一聊Camunda 流程的部署和发起. 同样的先来放上我的电脑环境: macbook macos ...

  2. (经验总结)flowable工作流_01_流程实例管理

    文章目录 一.流程定义管理功能有哪些? 二.删除流程实例会删除哪些表中的数据? 三.流程实例做什么用? 四.流程定义涉及的表 一.流程定义管理功能有哪些? 类名:ApiFlowableProcessI ...

  3. flowable工作流-BPMN流程部署

    BPMN相关基础 在画流程图之前,首先需要了解BPMN的一些基础知识:开始.结束事件.用户任务.任务受让人.任务审核人.网关等一些基础知识,具体可以参考官方文档,介绍的很详细,也比较容易理解.BPMN ...

  4. flowable实战(二)flowable流程模型管理接口

    一.流程模型资源 流程定义文件:文件的命名必须是XXXXbpmn20.xml,注意命名规范,后面必须是bpmn20.xml. 流程定义图片:用BPMN2.0规范定义的各种图形描绘(BMPN2.0的符号 ...

  5. 基于全生命周期的主数据管理:MDM详解与实战学习03 第三章 主数据管理的关键技术

    第三章 主数据管理的关键技术 3.1 数据标准 3.1.1 数据标准的分类 3.1.2 物资类数据标准 1.国际标准 2.国内标准 3.1.3 产品数据标准 3.1.4 财务数据标准 3.2 信息分类 ...

  6. 《Activiti/Flowable 深入BPM工作流》-流程部署实现方式二

    <Activiti/Flowable  深入BPM工作流>                                     ----流程部署实现方式二 一. 问题 流程部署实现方式 ...

  7. 流程定义和部署管理——流程定义列表

    流程定义列表 spring mvc的请求相对路径为:workflow/process-list 注入RepositoryService,它管理发布资源的所有方法: protected Reposito ...

  8. 大数据虚拟化零起点-4基础运维第三步-部署vCenter Server Virtual Appliance 5.1

    在大数据虚拟化零起点基础运维第二步中,我们完成了vSphere5.1的安装.接下来,我们可以开始第三步--部署vCenterServer Virtual Appliance 5.1. 在开始部署之前, ...

  9. java中bpmn流程图_Java学习之BPMN知识以及Activiti的流程部署

    BPMN的介绍 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和 ...

最新文章

  1. clock函数返回负值~ (转)
  2. php bc函数库,PHP高精确度运算BC函数库实例详解
  3. .NET分布式缓存Memcached测试体验
  4. 对vector等STL标准容器进行排序操作
  5. Oracle多个服务各代表什么作用(转)
  6. 用 LaTeX 排版编程技术书籍的一些个人经验
  7. 最优化——线性规划中最大规划和最小规划之间的转换
  8. salad--8||9
  9. 高一数学集合知识点整理_高一数学知识点总结
  10. go获取项目内所有proto_gRPC学习之三:初试GO版gRPC开发
  11. 计算机应用基础自考,自考计算机应用基础
  12. mysql-查询二-分组与聚合
  13. linux设置板卡时间,嵌入式VS-RK3288板卡 Linux 修改BOOTDELAY介绍
  14. 全站 HTTPS 来了(转载)
  15. SpringBoot注册组件之@Configuration@Bean注解作用及注意点
  16. ubuntu22.04编译PBRT-v4
  17. 汉王考勤管理软件mysql数据库配置_汉王人脸通考勤管理软件
  18. 三大微分中值定理及泰勒中值定理证明
  19. STM32时钟简介及系统时钟频率的更改方式
  20. 网站域名服务器加密,网站域名利用https防劫持方法

热门文章

  1. Android禁止EditText输入特殊字符
  2. group by 用法
  3. tooth的用法_tooth是什么意思_tooth的翻译_音标_读音_用法_例句_爱词霸在线词典
  4. 种植牙的突出优点是什么?
  5. 近视手术:全飞秒 vs 半飞秒
  6. 思维导图是什么?思维导图原理及其作用
  7. windows c api手册
  8. 在word插入钢筋符号
  9. Delphi桌面精灵开发
  10. 优秀原型设计欣赏:交通类App原型制作分享-DiDi