卡蒙达-dmn

?DMN(决策模型和符号(DMN))是一个商业决策管理标准。

?目前,camunda的DMN引擎支持DMN1.3标准,包括决策表、决策文字表达式、决策需求图和feel(足够友好的表达式语言)。

决策表:将决策逻辑指定为一个表。

决策文字表达式:将决策逻辑指定为一个表达式。

决策需求图:相互依赖的决策建模。

Feel(足够友好的表达语言):DMN默认的表达语言。

?决策表表示一个决策逻辑,可以用DMN1.3中的表来描述。它包含输入、输出和规则。

?决策表在xml中由决策元素中的决策表元素表示:

?决策名描述了这个决策表提供的决策逻辑。它被设置为decision元素上的name属性。

?决策表名称描述了该决策表提供的决策逻辑。它被设置为decision元素上的name属性。

?决策Id是一种技术标识。它设置在决策元素的id属性上。当在camunda BPM平台上部署决策时,每个决策都必须有一个唯一的id。引擎使用id作为部署决策定义的决策关键字。

?决策表有一个或多个输入,也称为输入子句。Input子句定义了数字(id)、标签(label)、表达式(expression)和决策表输入类型(type)。

?可以通过双击决策表中每一列的列标题来编辑输入。

?xml中的输入子句由决策表中的输入元素表示:

输入编号是决策表输入的唯一标识。

输入标签是输入的简短描述。

输入表达式指定如何生成输入子句的值。这是一个将被DMN引擎解析的表达式。它通常很简单,引用一个在运行时可见的变量引用。

当DMN引擎解析输入表达式时,结果将被转换为指定的类型,支持的类型可以在用户指南中找到。注意:类型不是必需的,但建议设置它,因为它可以帮助我们理解可能的输入值,并提供类型安全的验证。

表达式语言可以指定输入表达式的语言。如果未指定,将使用定义元素中的全局表达式语言。如果没有设置全局表达式语言,则默认使用JUEL表达式语言。

当解析输入表达式并返回解析后的值时,该值将存储在一个变量中,该变量的名称是输入变量的名称。这个变量名也可以使用表达式。

?决策表可以有一个或多个输出,也称为输出子句。output子句定义了决策表的编号(id)、标签(label)、名称(name)和输出类型。

?xml中的输入子句由决策表中的输出元素表示。

Output number是决策表输出的唯一编号,由camunda平台用来关联已执行决策的历史输出。

输出标签时对输出的简短描述。输出标签不是必须的,但是推荐设置,因为它可以帮助我们理解决策。

输出名是指决策表执行结果的输出值。如果决策表有多个输出,所有输出都必须有唯一的名称。

当输出条目被DMN引擎执行时,执行结果被转换成这个指定的类型。有关支持的类型,请参见用户指南。类型不是必需的,但建议设置,因为它可以提供类型安全的输出值。

此外,该类型还可以用于将输出值转换为另一种类型,例如将80%的字符串类型转换为浮点数。有关详细信息,请参见用户定义的数据类型。

?一个决策表可以有多个规则。每个规则包含多个输入和输出条目。输入项是条件,输出项是规则的结果。如果每个输入项都被满足,那么这个规则被满足,并且决策结果包括这个规则的输出结果。

?在xml中,规则由decisionTable元素中的rule元素表示:

一个规则可以有一个或多个输入项,这个输入项是这个规则的条件。每个条目在文本元素中都包含一个表达式,如果这个条目被满足,那么这个表达式将被解析为true。

如果一个输入项与这个规则无关,并且表达式为空,那么表达式总是满足的,也就是说,它被解析为true。

如果使用FEEL表达式语言,那么空的输入项用-表示,其他表达式为空。

expressionLanguage可以用expressionlanguage属性指定。有关支持的表达式语言,请参见用户指南。如果没有设置表达式语言,将使用定义中设置的全局表达式语言。如果未设置全局表达式语言,将使用默认的感觉表达式语言。

一个规则可以有多个输出条目,这个条目是规则的结果。每个输出条目在文本元素中都包含一个表达式。

如果输出条目为空,则输出将被忽略,并且不是决策表结果的一部分。

请参见输入项表达式。

请参见输出条目的描述。

?决策表的命中策略指定了决策表的哪些结果。

?hitPolicy在decisionTable元素的hitpolicy属性中设置。如果未设置,则默认为唯一命中策略。

命中策略指定可以满足决策表的多少规则,以及哪些满足的规则将包括在决策表结果中。独特的,任何和第一次击中策略总是返回一个最满意的规则。规则顺序和收集命中策略将返回多个满足的规则。

只能满足一个规则或不满足任何规则。决策表的结果包含满足规则的输出项目。

如果满足多个规则,则违反唯一命中策略。

可以满足多个规则,然后所有满足的规则必须有相同的输出。这个决策表的结果将只包含一个符合规则的输出。

如果满足多个规则,并且生成不同的输出,这就违反了hit策略。

这是请假的决策表。如果你申请这个假期,或者申请人处于试用期,申请将被拒绝。否则,申请被批准。

可以满足多个规则。决策表结果只包含满足规则的第一个输出。

见上面的广告决策表。关于根据用户当前年龄决定显示哪个广告。例如,用户当前年龄为19岁。所有结果都匹配,但是因为这个点击策略是第一个点击策略,所以将显示汽车广告。

可以满足多个规则。决策表包含所有符合规则的输出,并根据决策表中规则的顺序进行排序。

看上面关于广告的决策,假设我们有一个年龄为19的用户。所有的规则都得到满足,所以所有的输出都将按照规则的顺序给出给决策表结果。它可以用于指示所显示广告的优先级。

满足多个结果。决策表包含以任意顺序满足条件的所有输出结果。

这个命中策略,输出列表是乱序的。所以如果年龄是19,广告可以任意。

此外,设置命中策略可以指定聚合器。如果指定了聚合器,决策表的结果将只包含一个输出条目。聚合器将从所有符合规则的输入条目中生成这个输出条目。注意,集合命中策略使用了一个聚合器,决策表只能有一个输出。

求和聚集器将所有满足的规则的输出相加。

这个决策表可以用来合计一个员工的奖金,比如这个员工在公司工作了3.5年。所以第一、第二、第三条规则都会满足,这个决策表的结果是600,所有输出的总和。

最小值聚合器可用于返回满足规则的所有最小输出值。看下图车险的例子。一辆车多年没出过事故,保险费用应该降低。

例如,如果输入值是3.5年,结果应该是98.83。虽然第一、第二和第三个规则都匹配,但第三个规则的输出值最小。

最大值聚合器可用于返回满足规则的所有最大输出值。

这个决定表代表了关于孩子零花钱数量的决定。根据孩子的年龄,零花钱的数量会增加。比如你输入一个9,第一个和第二个规则会匹配,第二个规则的输出大于第一个规则的输出,那么这个决策的输出就是5。一个9岁的孩子会得到5元的零花钱。

计数聚合器返回满足的条件数。

比如上面的奖金决策表,如果使用计数聚合器,输入值为4,满足第一、二、三条规则,那么这个决策表的结果是3,也就是说4年后决策表的结果是3工资奖金。

决策文字表达式表明决策逻辑可以描述为DMN1.3的表达式。它由一个文字表达式和一个变量组成。

在xml中,决策文本表达式可以由decision元素中的literalExpression元素表示:

该名称描述了由该文字表达式提供的决策逻辑。它是在决策元素的name属性中设置的:

这个数字是决策的技术数字,在决策元素的id属性中设置。

当部署到camunda BPM平台时,每个决策都应该有一个单独的编号。在部署决策定义时,引擎将此编号用作决策的关键字。

这个文字表达式指定了决策值是如何生成的。这是一个将由DMN引擎执行的表达式。它可以用作复杂的计算来调用提供决策逻辑的bean,或者组合输出需求决策的值。

该表达式是在xml的literalExpression元素的text元素中设置的。

可以通过literalExpression的expressionLanguage属性指定其expressionlanguage。有关支持的表达式语言,请参见用户指南。

如果未设置表达式语言,将使用在definitions元素上设置的全局表达式语言。

如果没有设置全局表达式语言,将使用默认的表达式语言JUEL。有关详细信息,请参见用户指南。

文字表达式必须由一个变量组成,name属性和type属性被指定为决策的结果。变量是在decision元素的variable元素中声明的。

变量名用于引用文字表达式的判定结果。它在xml中用name属性指定:

在variable元素中,可以用typeRef属性指定决策结果的类型。执行决策表达式后,结果将被转换为指定的类型。有关支持的类型,请参见用户指南。

请注意,该类型不是必需的,但建议使用。Should type可以提供类型安全的表达式结果。

决策需求图(DRG)模拟决策领域,并显示最重要的元素及其依赖性。建模的要素是决策、输入数据和知识来源。

DRG的视觉表现被称为决策需求图(DRD)。

在XML中,DRG由定义元素表示。

决策需求图可以有一个或多个决策。决策有名字和数字。决策逻辑必须在决策表或决策表达式中。

定义元素中决策的决策元素表示:

一个决策可以有一个或多个它所依赖的决策。例如,上图中对饮料的决定取决于对食物的决定。

必要的决策由informationRequirement元素中的requiredDecision元素表示。它有一个href属性和一个以#开头的值,这是必要决策的编号(依赖决策的id)。

输入数据代表一个或多个决策的输入信息。

注意:输入数据没有执行语义,将被卡蒙达DMN引擎忽略。

它由definitions元素中的inputData元素表示:

知识来源代表了制定决策的权威。

注意:知识源没有用于执行的语义,将被卡蒙达DMN引擎忽略。

它由definitions元素中的knowledgeSource元素表示:

DMN提供了一种足够友好的表达式语言,可以作为执行决策表中的表达式。

卡蒙达DMN引擎支持感觉输入条目。在输入项中表达的感觉项是一个简单的一元测试。这些简单的一元测试针对表达式测试输入值,如果满足测试,则返回true,否则返回false。表达式可以包含本节中描述的不同元素。

比较(比较):

FEEL的简单一元测试支持以下比较操作。请注意,equals操作是空的,而不是=。另外,不代表操作不!=,不代表运算需要逻辑否定。

范围:

有些感觉数据类型,如数字和日期类型,可以测试给定值是否属于某个范围。该范围包括起始值和结束值。您还需要指定起始值和结束值是否包含在范围内。

析取:

感觉简单的一元测试可以指定一个联合表达式。这个联合表达式可以是比较,也可以是范围。当至少有一个表达式为真时,测试结果为真。

逻辑否定:

FEEL简单的一元测试可以用not函数否定。这意味着如果包含的表达式返回true,测试将返回false。注意,只允许一个负运算符作为第一个运算符,并且它可以包含一个析取运算符。

合格名称:

感觉简单一元表达式测试可以通过指定名称来访问变量和对象的属性。

日期函数:

感觉简单的一元测试提供了创建时间类型值的函数。卡蒙达DMN引擎支持以下日期功能: