BPM 概念

在下面的章节中, 我们将探讨有助于理解 Jmix BPM 中嵌入的 Flowable 流程引擎的关键概念。 这些概念包括流程模型、流程定义、执行、流程实例、部署、token 和流程上下文。 每个概念在引擎的运行过程中都扮演着重要的角色,有助于业务流程的执行和管理。

流程生命周期

Jmix BPM 中的流程生命周期包括流程实例从启动到完成的各个阶段。因此,了解生命周期对于有效管理和控制业务流程至关重要。

proccess lifecycle

建模

生命周期从建模阶段开始, 其中,业务 流程模型 是使用 BPMN 2.0 表示法设计和定义的。 即,创建流程模型时需要指定模型中的业务流、任务、事件和决策点。 流程模型以 XML 格式表示。

除了 XML 模型之外,开发者还需要完成一些额外的工作才能创建真正可执行的业务流程:

  • 业务逻辑的实现

  • 用户界面(UI)表单的创建

  • 决策表的定义

  • 事件监听器以及错误处理

部署

建模完成后,流程模型需要部署至流程引擎。 此步骤中,会将 BPMN 模型和资源打包到可供执行的 部署对象 中。 部署对象可确保 流程定义 在引擎中正确注册。

启动

流程定义在部署之后, 就可以启动新的 流程实例 了。 每个实例都表示流程特定的一次执行过程,并且是唯一的。 流程实例启动时可以使用任意的变量和数据。

执行

流程实例在进行过程中,会在流程引擎管理下切换路线。引擎根据定义的流程模型控制业务流的走向,在任务、事件和网关之间切换。 在执行过程中,引擎可能会创建 执行 工件来处理并行路径、多实例活动或子进程,从而确保流程的所有方面都得到有效管理。

状态管理

在执行期间,流程实例还会在不同状态间切换,例如运行(running)或挂起(suspended)。 流程引擎可以有效地对这些状态进行动态管理,从而支持根据需要挂起或恢复流程。 此功能不仅能支持对流程实例进行管理,还扩展到管理流程定义。 使两者都能够根据需要挂起和激活。

完成

流程实例已完成是指,当流程中所有任务都已完成, 并且流程中没有剩余的激活元素,例如任务、事件、网关或子进程。 此时,引擎会完成流程的执行,实例将转换为结束状态。 然后,可以获取流程中的任何相关数据用于生成报告或审计。

终止

在某些情况下,流程实例可能会因错误或用户干预而提前终止。 引擎提供了正常处理此类终止的机制。 确保流程状态保持一致。

历史

Flowable 在整个生命周期中都会维护流程实例的历史记录,并捕获重要事件和状态变更。 历史记录对审计、报告和分析流程性能提供了非常有价值的数据。 可以查看过去的执行情况并研究流程的效率和有效性。

令牌

令牌(token)是 BPMN 中的一个关键概念,有助于理解和定义流程在执行过程中的行为。 令牌表示进程的当前状态, 也是流程在运行时行为的一种可视化体现。

启动流程时,会创建一个令牌,通常由启动事件启动。 该令牌随着流程流动, 按流程的顺序行进并与之遇到的流程元素进行交互。 当遇到并行网关时,令牌可以拆分为多个, 而遇到流程中的其他节点时,这些令牌还可以合并回来。 在到达结束事件时会消耗该令牌,表示流程实例的完成。

每个流程实例都有自己的令牌,用于跟踪该特定实例的状态。 多个流程实例可以同时运行,每个实例都维护自己的令牌。 当令牌遇到活动(activity)时,就开始流动, 并能与网关交互以确定接下来要走的路径。 请注意,令牌不能遍历消息流;只有消息可以沿消息流流动。

token simulation 1

在 BPMN 执行的上下文中直接对令牌进行访问(例如跟踪或操作流程令牌)的功能并不在 Flowable API 中显式提供。 相反,流程引擎的 API 主要侧重于管理流程实例、 任务和事件,而不是将令牌作为单独的实体开放。

业务键值

业务键值(business key)是一种根据业务特定标准对流程实例进行标识的方法, 而不是仅依赖系统生成的流程实例 ID。 业务键值支持将流程实例与特定业务实体或上下文相关联。

例如,一个业务键值可以是:

  • 订单号

  • 员工 ID

  • 合同号

  • 地址

  • 或其他信息。

当使用业务键值定义流程实例时,用户可以更容易理解业务上下文。

可以在流程启动事件的 input dialog form 中定义业务键值, 详情请参阅 这里。 在 Jmix view form 中,可以使用 ProcessFormContext 定义业务键值, 参阅 这里

此外,通过编程式的方式也可以设置或更改业务键值, 请参考:示例

流程上下文

流程上下文是在整个流程执行过程中使用的数据的集合。 包含所有相关的信息,包括流程变量、执行状态、 用户角色,以及流程管理和分支走向所需的任何其他数据。 此上下文是流程中决策和运行的基础, 以确保所有组件都可以访问正常运行所需的信息。

这是一个概念框架, 流程引擎不提供特定的对象或类来表示流程上下文。