流程转换

流程转换实现流程的控制结构。当一个流程活动结束后,流程引擎通过离开流程活动后的流程转换转到下一个流程活动。最简单的一种形式是当一个流程活动结束后,顺序执行下一个流程活动。

除了一直顺序执行所有的流程活动外,还有一种形式是让流程停留在某个流程转换的位置,直到某一标准符合后再继续执行。这个标准是一些条件、标识或者触发器。

条件

当一个流程活动结束后,它的输出转换用于决定该流程实例是否在处理完该流程转换后立即进入下一个流程活动。当只定义了一个条件(假设没有标识和触发器),该条件将由 odoo 进行判断,如果判断结果为 True ,流程实例将通过该流程转换。如果判断结果不为 True ,那么当关联的数据记录每次被修改后,该条件都将被重新判断,或者通过一个显式的方法调用来进行判断。

缺省情况下, condition 属性(例如:要进行判断的表达式)是简单的True或者通过计算结果为True。注意,条件可以包含许多行。

在条件计算的上下文环境,可以使用一些预定义的信息(包括 odoo 的safe_eval 环境信息):

  • 实体所有列的名称;
  • 数据记录的所有属性;

标识

除了条件之外,流程转换还可以使用一个标识名称。当指定了一个标识,该流程转换将暂停,即使条件判断结果为 True ,直到流程转换被唤醒。

为了唤醒一个定义了标识的流程转换,该标识必须被发送给该流程实例。通常的方式是通过用户交互界面的一个按钮发送该标识,使用 <button/> 元素定义一个按钮,设置其按钮的 name 属性为该标识名称。当点击该按钮后,标识将被发送到当前数据记录关联的流程实例。

备注:当标识发送到流程实例后,还需要进行条件判断。

触发器

当流程转换条件判断结果为 False,不能直接通过该流程转换(其后续的流程活动不能被立即执行)。可以通过触发器来触发该流程实例继续执行。当转换条件不符合时,触发器被记录到数据库中。后续可以唤醒流程实例重新判断转换条件。这种机制可以通过定位几个存储的触发器,而不用定位所有的触发器来唤醒流程实例。

触发器被记录在数据库中,通过实体名称和数据记录标识作为唯一标识,表示其引用的流程实例与这些数据记录相关。流程转换定义通过 trigger_model 属性设置实体名称,以及 trigger_expression 属性设置 Python 表达式用于确定与该实体相关的数据记录集合。这些数据记录集合的任意一条都可以唤醒与其相关的流程实例。

备注:每次重新判断转换条件都不影响已经确定的触发器。

results matching ""

    No results matching ""