本主题仅适用于 IBM Business Automation Workflow Advanced 配置。

决策表

决策表是另一种可供您管理和修改的业务规则。 如果必须进行求值的条件数目保持一致,并且要在满足条件时发出特定的一组操作,那么通常使用决策表。

决策表与决策树类似,但它们是平衡的。 决策表始终具有相同数目的要进行求值的条件,并始终具有无论哪一组分支解析为 true 时都要执行的操作。 但是,在决策树中,某个分支中要进行求值的条件可能多于另一分支。

决策表以节点树形式构造,并由 TreeBlock 定义。 组成 TreeBlockTreeNodes 有所不同。 TreeNodes 可以是条件节点或操作节点。 条件节点是求值分支。 分支末端是操作节点,这些节点具有要在所有条件均求值为 true 时发出的相应树操作。 可以存在任意层的条件节点,但只能有一层操作节点。

决策表的图示

另外,决策表也可以具有可以在检查表中的条件之前发出的初始化规则。

DecisionTable 类提供支持以下内容的方法:

  • 检索树节点(条件节点和操作节点)的树块
  • 检索初始化规则实例
  • 检索初始化规则模板(如果已定义此模板)
图 1. DecisionTable 及相关类的类图

决策表包含不同的条件和操作节点。 每个条件节点 () 都有一个术语定义 () 和一到 n 个案例边缘 ()。 术语定义包含条件表达式的左操作数。 Case 边缘包含值定义,这些值定义是要在条件表达式中使用的不同右操作数。 例如,在表达式 (status == "gold") 中,项定义是“status”,“gold”将是 Case 边缘中的值定义。 对于条件节点中的所有案例边缘,它们共享术语定义,并且仅由值 () 不同。 继续该示例,条件节点中的另一个案例边缘可能具有值 "silver"。 此值也将在表达式中使用 (status == "silver")。 此行为的唯一例外情况是,为条件节点定义了 otherwise。 在定义了 otherwise 的情况下,没有值定义,这是因为,只有条件节点中的所有其他 Case 边缘都求值为 false 时,才会使用值定义。 虽然 otherwise 不是案例边缘,但它确实具有可检索的功能。

包含术语定义和具有值定义的案例边缘的条件节点

对于项定义,可以在客户机应用程序中检索和使用用户呈现方式。 项定义的表现方式通常只是左操作数(示例中的 status)的表示,而不包含任何占位符。 对于 case Edge ,可以使用模板来定义值定义 ()。 模板值定义实例 () 保存用于执行且可以修改的参数值。 如果尝试检索未使用模板定义的值模板定义,那么将返回空值。 即使未使用模板来定义值条件,也仍然可以在客户机应用程序中检索和使用用户呈现方式(如果在编辑时指定了模板)。

该类提供了支持以下内容的方法:
  • 检索树的根节点
  • 检索树块的条件项定义
  • 检索树块的操作项定义
树的根节点具有类型,从此处可以进行决策表的导航。 该类提供了支持以下内容的方法:
  • 确定某个节点是否 otherwise 子句
  • 检索当前树节点(条件节点或操作节点)的父节点
  • 检索包含当前树节点的树的根节点
该类提供了支持以下内容的方法:
  • 检索 Case 边缘
  • 检索项定义
  • 检索 otherwise Case
  • 检索条件节点的 Case 边缘的值条件模板
  • 对节点添加基于模板的条件值
  • 除去基于模板的条件值
该类提供了支持以下内容的方法:
  • 检索可用于值定义的值模板的列表
  • 检索子节点(条件节点或操作节点)
  • 检索与值定义相关联的模板定义的实例
  • 直接检索值定义,而不检索模板
  • 对定义设置值,以使用特定的模板实例定义
该类提供了支持以下内容的方法:
  • 检索对条件节点定义的值定义模板
  • 检索条件项的用户呈现方式
该类提供了支持以下内容的方法:
  • 检索条件节点的项定义
  • 从所有 Case 边缘检索条件节点的条件值定义
  • 检索方向(行或列)
该类提供了支持以下内容的方法:
  • 检索为值定义的特定模板实例表达式
  • 检索用户
该类提供了支持以下内容的方法:
  • 检索模板的系统标识
  • 检索模板的名称
  • 检索为模板定义的参数
  • 检索模板的呈现方式
该类提供了支持以下内容的方法:
  • 创建新的模板条件值实例
该类提供了支持以下内容的方法:
  • 检索模板实例的参数
  • 检索用于定义实例的模板 (对于决策表中的案例边缘)
图 2. TreeNode 及相关类的类图

对条件节点添加新的 Case 边缘时,新的 Case 边缘必须使用模板来定义值。 例如,如果需要添加新的“青铜色”案例边缘来检查“状态”,则需要使用适当的模板()来创建新的TemplateInstanceExpression, ,并将参数值设置为“青铜色”。

添加新的 Case 边缘时,还将自动对其添加子条件节点。 这个子条件节点将包含一些 Case 边缘,这些 Case 边缘基于已经在同一级别为条件节点定义的 Case 边缘定义。 如果在 Case 边缘中使用了模板或硬编码值,那么还将在子条件节点的 Case 边缘中使用这些模板或硬编码值。 自动添加的子条件节点还将自动创建自己的子条件节点。 这些子条件节点也将具有子条件节点,依此类推,直到所有级别的条件节点均重新创建完毕为止。

除了条件节点,决策表和更具体的树块,还包含操作节点级别 ()。 操作节点是叶节点,位于条件节点分支和案例边缘的末尾。 如果一系列 Case 边缘中的所有条件值都解析为 true,那么将到达操作节点。 操作节点将至少定义一个 action ()。 对于操作,将存在项定义和值定义。 就像条件节点一样,术语定义 () 在表达式的左边,值定义 () 在表达式的右边。 例如,对于要检查状态的不同条件节点,可能存在用于定义折扣的操作。 如果条件为 (status == "gold"),那么操作将是 (discountValue = 0.90)。 对于该操作,“discountValue”将是项定义,而“= 0.90”将是值定义。

树操作的项定义与其他操作节点中的其他树操作共享。 由于 Case 边缘的每个分支都将到达操作,因此将使用同一个项定义。 但是,各个树操作和操作节点的值定义可以不同。 例如,状态“gold”的 discountValue 可以是“0.90”;但是,状态“silver”的“discountValue”可以是“0.95”。

操作节点可以具有多个树操作,这些树操作具有不同的项定义和不同的值定义。 例如,如果正在确定出租汽车的折扣,那么除了设置 discountValue 以外,您还可能想指定特定的汽车档次。 因此,可以创建另一个树操作,以便在状态为“gold”时将“carSize”项设置为“full size”,并将“discountValue”设置为“0.90”。

可以从 template () 创建树操作中的值定义。 模板定义包含表达式 () ,该表达式具有表达式的参数。

除了更改参数以外,您还可以使用为树操作定义的另一个模板来创建新的值定义实例,然后使用这个新的值定义实例来修改整个值定义。

如果值定义不是通过模板创建的,那么不可更改。 对于客户机应用程序而言,如果在编辑时指定了用户呈现方式,那么可以在显示时使用该呈现方式。

对于树操作中的项定义,如果已指定用户呈现方式,那么该呈现方式也可由客户机应用程序使用。

对条件节点添加新的 Case 边缘并创建不同的子条件节点时,还将创建操作节点。 与根据已经为该级别定义的 Case 边缘的定义创建的子条件节点和 Case 边缘不同,操作节点不会自动继承现有设计。 仅在操作节点中创建空占位符。 必须使用 template () 通过为操作节点创建至少一个术语定义来完成操作定义。 在使用 a 设置树操作之前,树操作将具有为用户演示值和模板实例值指定的空值。

创建将产生新的 ActionNode 的新条件时,将在上一级父条件节点的现有操作右侧添加操作节点。 例如,如果对决策表添加状态“ruby”,并且存在特定折扣,那么将在“gold”、“silver”和“bronze”右侧添加用于检查状态的条件。 “ruby”的折扣的操作节点将添加到与 Case 边缘“gold”、“silver”和“bronze”相对应的操作节点右侧。

为操作节点设置新的树操作时,检查最低 Case 边缘处最右侧操作节点的算法将返回具有空树操作的操作节点。 另外,还可以检查树操作以确定其用户呈现方式值和模板实例值是否为空值。 获取树操作后,可以使用正确的 a 实例对其进行设置。

具有树操作的操作节点的图示
该类提供了支持以下内容的方法:
  • 检索已定义的树操作的列表
该类提供了支持以下内容的方法:
  • 检索为树操作定义的可用值模板的列表
  • 检索项定义
  • 检索为树操作定义的值模板实例
  • 检索值的用户呈现方式(如果未使用值模板)
  • 检查操作是否为 SCA 服务调用 (方法)
  • 将值模板实例替换为新实例
该类提供了支持以下内容的方法:
  • 检索项值定义的用户呈现方式
  • 检索可用于树操作的值模板的列表
  • 检查操作是否为 SCA 服务调用 (方法)
该类提供了支持以下内容的方法:
  • 检索模板的系统标识
  • 检索模板的名称
  • 检索为模板定义的参数
  • 检索模板的呈现方式
该类提供了支持以下内容的方法:
  • 根据模板定义创建新的值模板实例
该类提供了支持以下内容的方法:
  • 检索模板实例的参数
  • 检索用于定义实例的模板 (对于决策表中的树操作)
图 3。 TreeAction 及相关类的类图

决策表的初始化规则的定义与规则集中的规则遵循同一结构。 可以使用 template () 定义 init 规则。

如果在编写时未创建初始化规则,那么在部署此规则之后,便再无法添加此规则。

该类提供了支持以下内容的方法:
  • 检索规则的名称
  • 检索规则的用户呈现方式
  • 检索规则的填充了不同规则参数的用户呈现方式
该类提供了支持以下内容的方法:
  • 检索包含初始化规则的树块
该类提供了支持以下内容的方法:
  • 检索包含模板的决策表
图 4: DecisionTableRule 及相关类的类图