工作流引擎流程版本控制

流程版本控制

流程定义的版本控制

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

这由流程引擎支持:

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工作流平台

相关教程