flowable支持的jdk版本_flowable 旧版流程定义兼容新流程

场景:flowable 正常使用的时候,每一版本的流程都是根据该版本的流程图进行执行的。然后 总有些不走寻常路的需求,比如:旧版本数据兼容新版本流程图。本章主要是对如何让旧流程兼容新流程的一种方法的描述

环境:

springboot:2.2.0.RELEASE

flowable:6.4.2

流程图示例场景:

3736dc1547a0

旧流程图

3736dc1547a0

新流程图

操作:希望旧流程图的待办数据可以按照新流程图进行执行。

实现思路分析:

调用完成任务的时候,会在内存初始化流程图,然后根据任务信息,找到对应流程图的那个指定节点,再按照流程图的线条继续往下执行。

从获取流程定义 bpmnXML 的 源码中可以发现,围绕几个核心类:

org.flowable.engine.impl.cmd.GetBpmnModelCmd

org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl

org.flowable.engine.impl.persistence.entity.DeploymentEntityImpl

org.flowable.engine.impl.persistence.entity.ResourceEntityImpl

根据上面的类,可以找到基本围绕下面这几张表

获取流程BpmnXML的方法

@Test

public void getBpmnXml(){

String processDefinitionId = "test-0901-2:1:8";

BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);

byte[] bytes = modelService.getBpmnXML(bpmnModel);

System.out.println();

System.out.println(new String(bytes));

}

表关系

3736dc1547a0

数据关系图

获取Bpmn数据

3736dc1547a0

ACT_GE_BYTEARRAY

3736dc1547a0

ResourceEntityImpl

调用基本Api (flowable 底层中util需要在 org.flowable.common.engine.impl.interceptor.Command 作用域下才有效 )

ProcessDefinitionEntity newProcessDefinitionEntity = CommandContextUtil.getProcessDefinitionEntityManager().findById(newProcessDefinitionId);

ResourceEntityManager resourceEntityManager = CommandContextUtil.getResourceEntityManager();

// 获取流

ResourceEntity newResourceEntity = resourceEntityManager

.findResourcesByDeploymentId(newProcessDefinitionEntity.getDeploymentId())

.stream()

.filter(ResourceEntity::isGenerated)

.collect(Collectors.toList()).get(0);

在上面获取到流程图的xml,需要对把新流程图的 ID 替换回旧流程的,再插入到数据库,从源码中可以找到2个工具类 :

org.flowable.bpmn.converter.BpmnXMLConverter

org.flowable.editor.language.json.converter.BpmnJsonConverter

通过这2个工具类就可以把流程图 在 BpmnModel 和 xml 中切换。

替换资源代码

InputStream newInputStream = new ByteArrayInputStream(newResourceEntity.getBytes());

BpmnModel newBpmnModel = bpmnXMLConverter.convertToBpmnModel(new InputStreamSource(newInputStream), true, true);

InputStream oldInputStream = new ByteArrayInputStream(oldResourceEntity.getBytes());

BpmnModel oldBpmnModel = bpmnXMLConverter.convertToBpmnM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值