工作流引擎流程版本控制
流程版本控制
流程定义的版本控制
业务流程本质上是长期运行的。该流程实例可能持续数周或数月。同时,流程实例的状态存储到数据库中。但是,即使仍然有正在运行的实例,您迟早也可能要更改流程定义。
这由流程引擎支持:
1、如果重新部署更改的流程定义,则会在数据库中获得新版本。
2、正在运行的流程实例将继续以其开始使用的版本运行。
3、新流程实例将在新版本中运行-除非明确指定。
4、在某些限制内,支持将流程实例迁移到新版本。
您可以在流程定义表中看到不同的版本,流程实例与此链接:
多租户
如果您使用带有租户标识符的多租户,则每个租户都有自己的流程定义,这些定义的版本与其他租户无关。有关详细信息,请参见多租户部分。
使用哪个版本
启动流程实例时
1、通过关键:它启动的一个实例最新部署的版本与关键流程定义的。
2、By id:它使用数据库ID启动已部署的流程定义的实例。通过使用此功能,您可以启动特定版本。
默认和推荐的用法是startProcessInstanceByKey始终使用最新版本:
processEngine.getRuntimeService().startProcessInstanceByKey("invoice");// will use the latest version (2 in our example)
如果要专门启动旧流程定义的实例,请使用“流程定义查询”找到正确的ProcessDefinition ID并使用startProcessInstanceById:
ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery()
.processDefinitionKey("invoice")
.processDefinitionVersion(1).singleResult();
processEngine.getRuntimeService().startProcessInstanceById(pd.getId());
使用BPMN CallActivities时,可以配置使用哪个版本:
<callActivity id="callSubProcess" calledElement="checkCreditProcess"
pangu:calledElementBinding="latest|deployment|version"
pangu:calledElementVersion="17"></callActivity>
或者
<callActivity id="callSubProcess" calledElement="checkCreditProcess"
pangu:calledElementBinding="versionTag"
pangu:calledElementVersionTag="ver-tag-1.0.1"></callActivity>
选项是
1、最新:使用最新版本的流程定义(与一样startProcessInstanceByKey)。
2、部署:在与调用过程的版本匹配的版本中使用过程定义。如果将它们部署在一个部署中,则此方法有效-因为它们总是一起进行版本控制(有关更多详细信息,请参见处理应用程序部署)。
3、版本:指定在XML中进行硬编码的版本。
4、versionTag:指定以XML硬编码的versionTag。
流程定义的键与ID
您可能已经发现流程定义表中存在两个不同的列,具有不同的含义:
1、关键字:关键字是XML中流程定义的唯一标识符,因此可以从XML中的id属性读取其值:
<bpmn2:process id="invoice" ...
·
2、ID:ID是数据库主键和通常由键,版本和生成的ID组合而成的人工键(请注意,ID可能会缩短以适合数据库列,因此无法保证ID为以这种方式构建)。
版本标签
可以使用版本标记属性标记流程定义。这可以通过将 pangu:versionTag 扩展属性添加到流程中来完成:
<bpmn2:process pangu:versionTag="1.5-patch2" ..
现在ProcessDefinition将提供您可以获取的versionTag字段:
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")
.latest()
.singleResult();
processEngine.getRuntimeService().startProcessInstanceById(pd.getId());
版本标签
版本标记仅用于标记,不会影响startProcessInstanceByKey 或startProcessInstanceById行为。
流程实例迁移
默认情况下,当部署新的流程版本时,在先前版本上运行的流程实例不受影响。 流程实例迁移可用于将流程实例迁移到新版本。
技术支持:盘古BPM工作流平台
相关教程
- 2020-05-07
- 2020-05-06
- 2020-05-05
- 2020-04-29
- 2020-04-28
- 2020-04-27
- 2020-04-26
- 2020-04-25
- 2020-04-24
- 2020-04-23