dmn中的元素

dmn中的元素

      决策表是DMN规范的核心元素。 它们是实现业务与IT一致的手段。 它们非常直观:左侧列包含条件和输入值(输入input),右侧列包含结果(输出output)。 每行对应一个规则。 如果满足左侧条件,则将右侧结果会传回。

     决策表应始终保持业务的可读性。 技术术语(例如,针对某些类型的数据的映射)隐藏在后台。 条件可以用FEEL表达语言表达。

      Business-IT-Alignment名词解释:决策表具有被大多数业务用户轻松理解的巨大优势,但是合适的决策引擎可以直接执行表。 因此,在这一领域中实现业务与IT的一致性非常容易。 充分利用它!

      让我们看一个例子。 假设您要做出一个非常重要的决定:您要煮什么饭。。 有什么投入? 好吧,这可能取决于一年中的时间,并且可能会导致产生一个如图6.2所示的决策表。 (是的,整个春季吃芦笋可能会很乏味,但我们只是开始使用DMN。)

决策表

图6.2:一个简单的决策表。

       即使您愿意接受单调的用餐计划,也无法用六个月的肉类菜肴招待客人,尤其是其中一些可能是素食主义者。 我们将在决策表中添加另一个输入列。 多列始终通过AND(并且)链接,因此必须满足所有条件。 尽管如果将单元格留空,引擎不会考虑该条件。因此,在图6.3的示例中,春季总是会有芦笋。万岁!

决策表可以包含多个输入列。 条件由AND链接。

图6.3:决策表可以包含多个输入列。 条件由AND链接。

     仔细看看桌子。 结果,有两个新规则来提供面食。 这些规则之间的唯一区别是季节。 这个非常好用和容易理解,但是我们可以使用逗号分隔符来压缩它。 逗号在单元格中表示“或”。 因此,图6.4中的表具有相同的内容,但更易于掌握。

在单个单元格中,可以用逗号分隔不同的条件。 因此,条件通过OR链接。

图6.4:在单个单元格中,可以用逗号分隔不同的条件。 因此,条件通过OR链接。

      到目前为止,在比较中我们只限于相等比较(=)。 也可以使用其他算术比较操作,我们可以在表中显式使用它们。 假设您想提供干熟的牛排,但您只能为有限的客人提供。 图6.5显示了相应的决策表。 干熟的牛排最多只能容纳三位客人,而大批的牛排则便宜些。

比较不限于相等。

图6.5:比较不限于相等。

      还有一种使表格更易于阅读的方法。 DMN使链接单元成为可能,并且链接的所有单元都具有相同的条件,因此图6.6给出了一个整齐的版本。 这里的差异似乎很小,但是在较大的表中,它可以大大提高可读性。

可以链接单元以提高可读性。

图6.6:可以链接单元以提高可读性。

   您想定义合适的配菜吗? 这很简单,因为DMN允许根据需要提供任意数量的结果列。 图6.7显示了决策表。

可能有几个结果列

图6.7:可能有几个结果列。

       您可能已经使用了最后几个示例,想知道为什么我们经常在表中写对与错,而不是是或否,或者为什么我们将季节和餐食用引号引起来。 它是为了容纳FEEL表达语言; 始终必须将决策表转换为有效的FEEL。 让我们仔细看看。

     BPMN-Tooling:由于DMN决策表可以执行,因此必须将它们转换为正确的FEEL,因此表需要包含有效的表达式。 工具可以通过提供视图(例如,为了业务IT协调而隐藏某些FEEL特性)来提供很多帮助。 因此,它可能会帮助您找到一个在仍在后台存储true和false的同时显示yes和no的工具。

6.2.2决策表中的表达式

 

决策表被转换为FEEL表达式

图6.8:决策表被转换为FEEL表达式。

我们使用FEEL在表格中定义表达条件。 更准确地说,表格在后台转换为FEEL,如图6.8所示。 决策表的以下元素存在:

1、输入表达式在列标题中定义。 在自动化过程中,必须在这里引用变量,或者使用复杂的表达式(计算)。 您可以隐藏技术表达式,以使列标题在技术上仍然可读。

2、 输入条目是单个单元格。 通常,您输入具体值(文学)在那里。 根据标准,尽管制造商扩展可能使您无法在单元格中使用计算或函数调用。

3、输出表达式是结果的列标题。 通常,这是结果变量的名称。

4、 输出条目是结果单元格。 它通常包含特定值(文字),但原则上也可以是表达式。 因此允许进行计算或函数调用。

     最好是再看一些示例,并专注于决策表中的常见构造。 有关FEEL的更多详细信息(顺便说一句,也可以在决策表之外应用)将在后续文章中介绍。

       在上一节中,我们熟悉了简单的比较,但是如果您想为6、7或8位客人烹饪菠菜,会发生什么呢? 您可以使用逗号(6,7,8),尽管在处理较大的值范围时这很烦人。 这就是FEEL识别范围的原因,这使得图6.9中的表格成为可能。

使用[..]表示范围。

图6.9:使用[..]表示范围。

     实际上,我们在这里隐藏了更多的感觉。 NOT功能会否定条件,这意味着我们仅在春季不吃宽面条时才吃。

    我们说逗号充当“或”链接;它可以在任意条件下使用。 一个迷信的数学家甚至在春季只有几个客人就可以吃绿芦笋,如图6.10所示。

条件之间的复杂OR链接可以用逗号分隔。

图6.10:条件之间的复杂OR链接可以用逗号分隔。

        您应该特别注意逻辑链接提供的可能性。 决策表中可以表达的内容是有限制的,老实说,我们已经遇到了所有限制。 例如,您可能无法通过AND在一个单元格中链接条件。 相反,您将不得不在列之间拆分条件。图6.11显示了如何拆分范围[6..8]。它还显示了NOT功能的另一个示例。

两个条件之间的AND链接只能使用两列。

图6.11:两个条件之间的AND链接只能使用两列。

     如果您想找出排除对象,则需要将它们显示在方括号内。 换句话说,您不能写: not(“spring”), not(“summer”)

     因为它总是不是春天或夏天。

     最后,我们要提到的是,FEEL还可以识别其他类型的数据,例如时间,日期和持续时间。 这意味着您可以轻松地表达自己想要在新年前夜吃火锅的事实。 如图6.12所示。

FEEL还可以识别其他类型的数据

图6.12:由于使用了日期数据类型,因此我们可以在除夕来品尝火锅!

       如您所见,我们需要检查冬季规则,以免除夕。这与点击政策有关。 当前,我们正在使用唯一的匹配策略,该策略由表格最左侧列的标题中的U指示。 该表的确切一条规则(即一行)必须对应。 我们不能吃火锅和炖牛肉。 根本是不允许的。 这似乎不公平,但这显然是表格所表达的。 让我们仔细看看计算策略的使用。

 
 技术支持:盘古BPM工作流平台

相关教程