返回介绍

6.3. 流程定义的版本

发布于 2023-09-17 23:40:35 字数 2341 浏览 0 评论 0 收藏 0

BPMN并没有版本的概念。这其实很好,因为可执行的BPMN流程文件很可能已经作为开发项目的一部分,保存在版本管理系统仓库中了(例如Subversion,Git,或者Mercurial)。但是,作为部署过程的一部分,引擎会创建流程定义的版本。在部署时,Flowable会在保存至Flowable数据库前,为ProcessDefinition指定版本。

对于业务存档中的每个流程定义,为了初始化keyversionnameid参数,会执行下列步骤:

  • XML文件中的流程定义id属性用作流程定义的key参数。

  • XML文件中的流程定义name属性用作流程定义的name参数。如果未给定name属性,会使用id作为name。

  • 当每个key的流程第一次部署时,指定版本为1。对其后所有使用相同key的流程定义,部署时版本会在该key当前已部署的最高版本号基础上加1。key参数用于区分流程定义。

  • id参数设置为{processDefinitionKey}:{processDefinitionVersion}:{generated-id},其中generated-id是一个唯一数字,用以保证在集群环境下,流程定义缓存中,流程id的唯一性。

以下面的流程为例

<definitions >
  <process name="My important process" >
  ...

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

idkeynameversion
myProcess:1:676myProcessMy important process1

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

idkeynameversion
myProcess:1:676myProcessMy important process1
myProcess:2:870myProcessMy important process2

当调用runtimeService.startProcessInstanceByKey("myProcess")时,会使用版本2的流程定义,因为这是这个流程定义的最新版本。

如果再创建第二个流程,如下定义并部署至Flowable,表中会增加第三行。

<definitions >
  <process name="My important process" >
  ...

表数据类似:

idkeynameversion
myProcess:1:676myProcessMy important process1
myProcess:2:870myProcessMy important process2
myNewProcess:1:1033myNewProcessMy important process1

请注意新流程的key与第一个流程的key不同。即使name是相同的(我们也可以修改它),Flowable也只用id属性来区分流程。因此新的流程部署时版本为1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文