BPMN 流程的状态是如何定义的?

How is the state of a BPMN process defined?

假设一个 BPMN 流程描述了活动、网关、开始和结束事件。如下:

每个步骤都由 BPMN 引擎管理。在某一时刻,我们如何判断进程的状态是什么?活动似乎定义了一些体现为动作的状态(例如评估请求)。我对么 ?

此外,如果我们假设 activity 代表状态,那么如果我们要浏览专门的后续应用程序,我们如何获得下一个可能状态的列表?

是否应该以更 工作流 为导向的方式对流程进行建模,以表达那些 state/actions 可能性?我的直觉是事件也可用于管理状态和可能的相关操作。

由于我不确定您对过程状态的确切理解是什么,所以我将首先尝试对其进行定义。我猜你知道代币的概念,见 discussion in the Camunda forum:

A token is a BPMN concept that represents a state within a process instance. It does not have any variables or any message.

您现在可以将进程的状态定义为在给定时间存在多少令牌以及给定activity中当前有多少令牌的统计信息或事件。

可以从您最喜欢的 BPMN 引擎中提取此统计信息(例如在 Camunda 的 Cockpit 中可以看到彩色小气泡)。有了这些统计数据,您原则上可以生成对下一个可能状态的预测,即确定每个 activity 中下一个时间实例中可能有多少令牌的场景。

状态在 BPMN 中有不同的含义,它可能意味着: 1 - 流中的令牌在哪里? 2 - 流程 运行 是否正确? 3 - 或者,通过表单中的特定变量(字段)。 如果你指的是第三种情况,这在流程中很常见,你必须在你的数据模型中定义一个字段作为枚举(取决于引擎)并手动或自动更改它在表单中的值。

显然,BPMN 相当抽象的 Petri 网式标记流语义并没有捕获业务流程的真实语义。由于学术压力团体,它只是人为地强加于 BPMN。一个真正有意义的语义必须是指拥有它的业务系统中流程的信息上下文。

当然,作为流程(类型)所有者的业务系统在 运行 流程的任何时候都处于某种复杂的动态信息状态,其中的某些部分构成了进程的上下文,因此可以被视为其状态。

事实上,进程的(信息)状态本质上是由进程(events/activities 的)使用或影响的对象的所有 属性 值槽给出的。除了这些"global variables",一个进程的状态还包括

  1. (辅助)过程变量的值,
  2. 信息,哪些活动已经开始(并且正在进行)。

看看Imixs-Workflow project。它是一个面向事件的工作流引擎,而不是 BPM 引擎中常见的面向任务的设计。

这种工作流引擎中的每个任务都在您的流程模型中定义了一个状态。工作流引擎保持此状态,直到触发事件。事件定义从一种状态到另一种状态的转换。

您可以找到如何在事件驱动的工作流模型中对不同场景建模的示例 here