camunda流程版本的控制和使用

本文详细阐述了在CamundaBPM平台中,如何管理和控制流程定义的版本,包括流程实例与不同版本的关联,以及启动流程实例时选择特定版本的方法,以及版本标签的使用和查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、流程定义的版本控制

从本质上讲,业务流程是长期运行的,流程实例可能会持续数周或数月。同时,流程实例的状态将存储到数据库中。但是,即使仍有正在运行的实例,您也可能需要更改流程定义。

流程引擎支持此功能:

  1. 如果重新部署更改的流程定义,则会在数据库中获得新版本。
  2. 正在运行的流程实例将继续在启动它们的版本中运行。
  3. 新的流程实例将在新版本中运行 - 除非显式指定。
  4. 在特定限制内支持将流程实例迁移到新版本。

您可以在流程定义表中看到不同的版本,并且流程实例链接到以下版本:

2、流程定义KEY与 ID

Key:Key是XML中流程定义的唯一标识符,因此它的值是从XML中的id属性中读取,本示例的流程key为:Process_15r7d3m

<bpmn:process id="Process_15r7d3m" name="UserTask Flow1" isExecutable="true" camunda:historyTimeToLive="180">

Id:Id是数据库act_re_procdef表的主键通常由流程定义key、版本和自动生成Id组合而成格式为:流程定义key:版本:自动生成Id。流程定义模型存储在act_re_procdef表里:

3、使用流程哪个版本

启动流程实例时可以按流程模板的key或者按id启动。

  • Key:它使用启动最新部署的流程定义版本的实例。
  • 按 id:它使用数据库 ID 启动已部署流程定义的实例。通过使用它,您可以启动特定版本

默认和推荐的用法是使用startProcessInstanceByKey并始终使用最新版本:

processEngine.getRuntimeService().startProcessInstanceByKey("invoice");// will use the latest version (2 in our example)

如果要专门启动旧流程定义的实例,请使用流程定义查询查找正确的ProcessDefinitionid,然后使用startProcessInstanceById:

ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery()
    .processDefinitionKey("invoice")
    .processDefinitionVersion(1).singleResult();
processEngine.getRuntimeService().startProcessInstanceById(pd.getId());

使用BPMN调用子流程 CallActivities 时,您可以配置使用的版本:

<callActivity id="callSubProcess" calledElement="checkCreditProcess"
  camunda:calledElementBinding="latest|deployment|version"
  camunda:calledElementVersion="17"></callActivity>

<callActivity id="callSubProcess" calledElement="checkCreditProcess"
  camunda:calledElementBinding="versionTag"
  camunda:calledElementVersionTag="ver-tag-1.0.1"></callActivity>

选项有

  • latest:使用最新版本的流程定义(与startProcessInstanceByKey一样)。
  • deployment:使用与调用流程版本匹配的版本中的流程定义。如果它们部署在一个部署中,则这有效 - 因为它们总是一起进行版本控制。
  • version:指定在 XML 中硬编码的版本。
  • versionTag:指定versionTag在XML中硬编码的 。

4、版本标签如何使用

可以使用版本标签属性标记流程定义。这可以通过将 camunda:versionTag 扩展属性添加到流程中来完成:

<bpmn2:process camunda:versionTag="1.5-patch2" ..

现在将提供一个 versionTag 字段,您可以获取该字段:ProcessDefinition

ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery()
    .processDefinitionKey("invoice")
    .processDefinitionVersion(1).singleResult();
pd.getVersionTag();

或者获取包含指定版本的所有已部署流程定义的列表:

List<ProcessDefinition> pdList = processEngine.getRepositoryService().createProcessDefinitionQuery()
    .versionTag("1.5-patch2")
    .list();

您还可以使用查询一系列版本:versionTagLike

List<ProcessDefinition> pdList = processEngine.getRepositoryService().createProcessDefinitionQuery()
    .versionTagLike("1.5-%")
    .list();

下面的示例演示如何启动最新流程流程实例 版本标记的定义:

ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery()
    .processDefinitionKey("invoice")
    .versionTag("1.5-patch2")
    .orderByVersion().
    .desc()
.listPage(0,1);

processEngine.getRuntimeService().startProcessInstanceById(pd.getId());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大龄码农有梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值