DMN:Decision Model and Notation

Camunda DMN 引擎(V7.13.0)支持部分 DMN 1.3,包括:

  • Decision Tables

用表表示决定逻辑;

  • Decision Literal Expressions

用表达式来表达决策逻辑;

  • Decision Requirements Graphs

建立决策之间的依存关系模型

  • Friendly Enough Expression Language (FEEL)

DMN’s 默认表达式语言

  • 或者使用 自定义扩展

Decision Tables

<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn"><decision id="dish" name="Dish"><decisionTable id="decisionTable"><!-- ... --></decisionTable></decision>
</definitions>

由三部分组成 inputs、outputs和rules

inputs:决策表可以具有一个或多个输入,也称为输入子句。 输入子句定义决策表输入的ID,标签,表达式和类型。

input子句由DecisionTable XML元素内的input元素表示。

outputs:决策表可以具有一个或多个输出,也称为输出子句。 输出子句定义决策表输出的ID,标签,名称和类型。

output子句由DecisionTable XML元素内的output元素表示。

rules:决策表可以具有一个或多个规则。 每个规则都包含输入和输出条目。 输入条目是条件,输出条目是规则的结论。 如果满足每个输入条目(条件),则满足规则,并且决策结果包含此规则的输出条目(结论)。

Hit Policy:规则由DecisionTable XML元素内的rule元素表示。

决策表具有命中策略,该策略指定了决策表的评估结果所包含的内容。

命中策略是在DecisionTable XML元素的hitPolicy属性中设置的。 如果未设置命中策略,则使用默认的命中策略UNIQUE。

在决策表的直观表示中,点击策略由点击策略的首字母指定。 Camunda DMN引擎支持以下命中策略:

Visual representation XML representation Description
U UNIQUE

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

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

A ANY

可以满足多个规则。 但是,所有满足的规则都必须生成相同的输出。 决策表结果仅包含满足的规则之一的输出。

如果满足多个规则并生成不同的输出,则将违反命中策略。

F FIRST 可以满足多个规则。 决策表结果仅包含第一个满足规则的输出。
R RULE ORDER 可以满足多个规则。 决策表结果按照决策表中规则的顺序包含所有满足的规则的输出。
C COLLECT 可以满足多个规则。 决策表结果包含所有满足规则的输出,并以任意顺序作为列表。

命中策略指定可以满足多少个决策表规则,以及哪些满足的规则包含在决策表结果中。 命中策略“UNIQUE”,“ANY”和“FIRST“将始终返回最多一个满足的规则。 命中策略“RULE ORDER”和“COLLECT”可以返回多个满意的规则。

COLLECT:

若使用COLLECT命中策略,输出列表没有排序。
此外,可以为“收集匹配”策略指定一个聚合器。 如果指定了聚合器,则决策表结果将仅包含一个输出条目。 聚合器将从所有满足的规则中生成输出条目。 请注意,如果将收集匹配策略与聚合器一起使用,则决策表只能具有一个输出。

在决策表的直观表示中,聚集器由点击策略后的标记指定。 Camunda DMN引擎支持以下聚合器:

Visual representation XML representation Result of the aggregation
+ SUM the sum of all output values
< MIN the smallest value of all output values
> MAX the largest value of all output values
# COUNT the number of output values

Decision Literal Expressions

<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn"><decision id="season" name="Season"><variable name="season" typeRef="string" /><literalExpression><text>calendar.getSeason(date)</text></literalExpression></decision>
</definitions>

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

该表达式设置在text元素内部,该文本元素是literalExpression XML元素的子元素。

决策文字表达式必须具有一个变量,该变量指定决策结果的名称和类型。 变量由决策XML元素内的variable元素表示。

<decision id="season" name="Season"><variable name="season" />
</decision>
<variable name="season" typeRef="string" />

Decision Requirements Graph

决策需求图(DRG)为决策领域建模,显示了其中涉及的最重要元素以及它们之间的依赖性。 建模的元素是决策,输入数据和知识来源。

DRG的可视化表示称为决策需求图(DRD)。

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

<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="dinnerDecisions" name="Dinner Decisions" namespace="http://camunda.org/schema/1.0/dmn"><decision id="dish" name="Dish"><!-- ... --></decision><decision id="beverages" name="Beverages"><!-- ... --></decision>
</definitions>

Decision:

决策需求图可以具有一个或多个决策。 决策具有在DRD中显示的名称和ID。 决策内部的决策逻辑必须是决策表或决策文字表达。

决策由定义XML元素内的Decision元素表示。

<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="dish" name="Desired Dish" namespace="party"><decision id="beverages" name="Beverages"><decisionTable id="decisionTable"><!-- ... --></decisionTable></decision>
</definitions>

Required Decisions:

一个决策可以具有一个或多个依赖的必需决策。

所需决策由informationRequirement XML元素内的requiredDecision元素表示。 它具有href属性,值以#开头,后跟所需决策的决策ID。

<decision id="beverages" name="Beverages"><informationRequirement><requiredDecision href="#dish" /></informationRequirement><!-- ... -->
</decision>

Input data:

输入数据表示被一个或多个决策用作输入的信息。

它由definitions元素内的inputData元素表示。

<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="dinnerDecisions" name="Dinner Decisions" namespace="http://camunda.org/schema/1.0/dmn"><inputData id="guestsWithChildren" name="Guests with children?" /><decision id="beverages" name="Beverages"><informationRequirement><requiredInput href="#guestsWithChildren" /></informationRequirement><!-- ... -->
</definitions>

请注意,输入数据没有执行语义,Camunda DMN引擎将忽略该输入数据。

Knowledge Source:

知识源表示决策的权限。

它由definitions元素内的KnowledgeSource元素表示。

<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="dinnerDecisions" name="Dinner Decisions" namespace="http://camunda.org/schema/1.0/dmn"><knowledgeSource id="cookbook" name="Men's Cookbook" /><decision id="dish" name="Dish"><authorityRequirement><requiredDecision href="#cookbook" /></authorityRequirement><!-- ... -->
</definitions>

请注意,知识源没有执行语义,因此Camunda DMN引擎将其忽略。


FEEL

决策模型和表示法(DMN)定义了一种友好的足够表达语言(FEEL)。 它可用于评估决策表中的表达式。


自定义拓展

以下属性是camunda名称空间http://camunda.org/schema/1.0/dmn的扩展属性。

historyTimeToLive

Description The attribute specifies the history time to live (in days) for the decision definition. It is used within History cleanup.
Type java.lang.Integer or java.lang.String
Possible Values Any non-negative integer number or string containing a time in days defined by the ISO-8601 date format.
Default Value null - means that decision definition history won't ever be removed during history cleanup run
DMN 1.3 Elements Decision

inputVariable

Description This attribute specifies the variable name which can be used to access the result of the input expression in an input entry expression.
Type java.lang.String
Possible Values The name of the variable as java.lang.String.
Default Value cellInput
DMN 1.3 Elements Input

versionTag

Description

The attribute specifies a version tag for the process definition.

Type java.lang.String
Possible Values Any value that has a meaning as version tag for the decision definition. Note: Sorting by versionTag is string based. The version will not be interpreted. As an example, the sorting could return v0.1.0, v0.10.0, v0.2.0.
Default Value
DMN 1.3 Elements Decision

Camunda DMN相关推荐

  1. camunda 流程执行追踪_Camunda BPM:基于DMN决策表的任务分配规则引擎 - Camunda团队博客...

    在涉及人员工作流程的业务流程中,任务分配逻辑可能变得非常复杂.例如,处理保险索赔或批准流程的其他变体可能需要许多或复杂的任务分配规则.决策模型和符号(DMN)决策表是管理这些规则的很好的工具之一. 示 ...

  2. Camunda入门(三) - BPMN、DMN、Form相关模型介绍(持续补充...)

    目录 1. BPMN介绍 1.1 Event - 事件 1.1.1 开始事件 1.1.2 中间事件 1.1.3 边界事件 1.1.4 结束事件 1.2 Tasks - 任务 1.2.1 Servcie ...

  3. 工作流activity_开源、强大的工作流引擎:camunda入门介绍

    原创不易,请多多支持!对Java技术感兴趣的童鞋请关注我,后续技术分享更精彩. 简介 Camunda is a Java-based framework supporting BPMN for wor ...

  4. camunda数据库表结构介绍

      Camunda bpm流程引擎的数据库由多个表组成,表名都以ACT开头,第二部分是说明表用途的两字符标识.笔者在工作中用的Camunda7.11版本共47张表.体验环境:http://www.yu ...

  5. Camunda流程引擎及表结构认识

    一.认识  Camunda Camunda 是一种轻量级的商业流程开源平台. 同类型的产品有 osworkflow.jbpm.activiti.flowable.其中:Jbpm4.Activiti.F ...

  6. Camunda入门(四) - 流程应用(支付流程)入门示例

    参考文章:Camunda入门(四) - 流程应用(支付流程)入门示例_罗小爬EX的博客-CSDN博客_camunda入门 1. 支付流程 - 场景设定 为了快速上手Camunda,结合Camunda官 ...

  7. Camunda流程引擎 Modeler (二)

    Camunda Modeler是Camunda官方提供的建模器: Modeler - 独立安装的建模器([windows.linux.mac] 一.下载camunda-modeler Download ...

  8. 三、Camunda工作流的表和用途说明(实践是检验真理的唯一标准)

    本人在工作中用的Camunda7.11版本共47张表. camunda工作流的表大体上分为 5 类: ACT_RE_*: 'RE'表示流程资源存储,这个前缀的表包含了流程定义和流程静态资源(图片,规则 ...

  9. camunda入门教程及实现原理

    1.camunda简介 1.介绍: Camunda是一种工作流引擎. Camunda BPM 是一个轻量级.开源灵活的工作流框架,是由Java开发的一个纯Java库.它的核心是一个在Java虚拟机内部 ...

最新文章

  1. 【Python学习笔记】注释,代码块,多行输出,忽略转义符的输出
  2. Java 门面模式 浅析
  3. WebForm(文件上传)
  4. MATLAB 长度和像素_MATLAB——单车道NaSch模型
  5. MySQL 实用语句集合
  6. 【2012百度之星资格赛】E:C++ 与Java
  7. Kafka设计解析(三):Kafka High Availability (下)
  8. 主动轮廓模型——Snake分割算法 matlab源码
  9. win10跳过计算机密码,Win10怎么取消开机密码?Win10如何跳过开机密码?
  10. CrossApp环境搭建
  11. 中国IT公司百强排名
  12. win32应用程序_winxp不是有效的win32应用程序解决方法
  13. python调用百度地图API 实现单点沿线轨迹运动
  14. redis数据库创建
  15. 国家卫生计生委医院管理研究所简介
  16. html ui组件,UI组件
  17. Python Web简介
  18. layer.open的按钮和右上角一个小×,点击事件,执行方法
  19. 计算机软件测试方法及应用实践论文,刍议计算机软件测试方法及应用实践原稿(全文完整版)...
  20. 在Android应用中实现查看“附近的人”的功能

热门文章

  1. MUV LUV UNLIMITED(ccpc 秦皇岛2019)
  2. 【PPT及视频资料】360互联网技术训练营第十六期——大数据与微服务之路
  3. 2021年行业主流的苹果手表充电器芯片及方案
  4. SQL Server数据库批量附加
  5. 学习大数据的第19天——正则表达式、枚举类
  6. 微信怎么加人不频繁?
  7. 如何将python代码生成exe小程序
  8. 宽带噪声语音信号增强matlab,基于声卡和Matlab平台的语音信号增强处理系统
  9. 两个python文件怎么联系在一起_一个连接两个文件的python脚本
  10. 数据结构与算法实验题 6.1 鼹鼠掘土挑战赛