flowable DMN规则引擎几种类型解释_04

文章目录

          • 单一命中
            • 第一个(FIRST)
            • 唯一(UNIQUE)
            • 优先级(PRIORITY)
            • 任何(ANY)
          • 多重命中
            • 输出顺序(OUTPUT ORDER)
            • 规则顺序(RULE ORDER)
            • 采集(COLLECT)

项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
视频地址:https://www.bilibili.com/video/av79774697/
*业务场景:
往往在我们实际业务中,规则异常重要,比方说输入一批数据得到某些结果数据,从而来简化我们的BPMN流程图,
*

flowableDMN规则引擎几种类型解释

单一命中
第一个(FIRST)

可以匹配多个(重叠)具有不同输出条目的规则。返回规则顺序中的第一次命中(返回后停止评估)。

唯一(UNIQUE)

没有重叠的可能,所有规则都是互斥的。只能匹配到一条规则。
如果多个会报错
可以利用设置解决这个问题
dmnEngine.getDmnEngineConfiguration().setStrictMode(false);

优先级(PRIORITY)

具有不同的输出条目的多个规则可以匹配。此策略返回具有最高输出优先级的匹配规则。输出优先级在输出值的有序列表中按优先级递减的顺序指定。当禁用strict mode且未定义输出值时,结果是最后一个有效规则。(违规将以验证消息的形式出现)

任何(ANY)

可能会有重叠,但如果所有匹配规则显示每个输出的输出条目相等,就可以使用任何匹配。如果输出条目不相等,则命中策略不正确,结果将为空并标记为failed。当禁用strict mode时,结果是最后一个有效规则。(违规将以验证消息的形式出现)

多重命中
输出顺序(OUTPUT ORDER)

按输出优先级递减的顺序返回所有命中规则。输出优先级在输出值的有序列表中按优先级递减的顺序指定。

规则顺序(RULE ORDER)

按规则顺序返回所有命中

1、叠加变量
${output1 + 10}
2、包含 任意都在
输入:
List inputVariable1 = Arrays.asList("test1", "test2", "test3");
processVariablesInput.put("collection1", inputVariable1);
输出:
test2 or test5 in collection1
${collection:containsAny(collection1, '"test2", "test5"')}
3、传入对象
输入:
Person customerOne = new Person();
customerOne.setName("test1");
customerOne.setAge(10L);
processVariablesInput.put("customerOne", customerOne);
输出:${collection:contains("test1", customerOne.name)}
4、json传入匹配 IN 两个并且都在
输入:
ArrayNode arrayNode1 = objectMapper.createArrayNode().add("test1").add("test2").add("test3");
processVariablesInput.put("arrayNode1", arrayNode1);
输出:"test1 and test2 in arrayNode1"
${collection:contains(arrayNode1, '"test1", "test2"')}
5、不包含 任意都不在
传入:
List inputVariable1 = Arrays.asList("test1", "test2", "test3");
processVariablesInput.put("collection1", inputVariable1);
表达式:test3 and / or test6 not in collection1
${collection:notContainsAny(collection1, '"test3", "test6"')}
6、不包含 not in 两个并且都不在
输入:
List inputVariable1 = Arrays.asList("test1", "test2", "test3");
processVariablesInput.put("collection1", inputVariable1);
输出:
test3 and test5 not in collection1
${collection:notContains(collection1, '"test3", "test5"')}

1、叠加变量
${output1 + 10}
2、包含 任意都在
输入:
List inputVariable1 = Arrays.asList(“test1”, “test2”, “test3”);
processVariablesInput.put(“collection1”, inputVariable1);
输出:
test2 or test5 in collection1
collection:containsAny(collection1,′“test2”,“test5”′)3、传入对象输入:PersoncustomerOne=newPerson();customerOne.setName(“test1”);customerOne.setAge(10L);processVariablesInput.put(“customerOne”,customerOne);输出:collection:containsAny(collection1,

“test2”,“test5”

)3、传入对象输入:PersoncustomerOne=newPerson();customerOne.setName(“test1”);customerOne.setAge(10L);processVariablesInput.put(“customerOne”,customerOne);输出:{collection:contains(“test1”, customerOne.name)}
4、json传入匹配 IN 两个并且都在
输入:
ArrayNode arrayNode1 = objectMapper.createArrayNode().add(“test1”).add(“test2”).add(“test3”);
processVariablesInput.put(“arrayNode1”, arrayNode1);
输出:“test1 and test2 in arrayNode1”
${collection:contains(arrayNode1, ‘“test1”, “test2”’)}
5、不包含 任意都不在
传入:
List inputVariable1 = Arrays.asList(“test1”, “test2”, “test3”);
processVariablesInput.put(“collection1”, inputVariable1);
表达式:test3 and / or test6 not in collection1
${collection:notContainsAny(collection1, ‘“test3”, “test6”’)}
6、不包含 not in 两个并且都不在
输入:
List inputVariable1 = Arrays.asList(“test1”, “test2”, “test3”);
processVariablesInput.put(“collection1”, inputVariable1);
输出:
test3 and test5 not in collection1
${collection:notContains(collection1, ‘“test3”, “test5”’)}
1、叠加变量
${output1 + 10}
2、包含 任意都在
输入:
List inputVariable1 = Arrays.asList(“test1”, “test2”, “test3”);
processVariablesInput.put(“collection1”, inputVariable1);
输出:
test2 or test5 in collection1
collection:containsAny(collection1,′“test2”,“test5”′)3、传入对象输入:PersoncustomerOne=newPerson();customerOne.setName(“test1”);customerOne.setAge(10L);processVariablesInput.put(“customerOne”,customerOne);输出:collection:containsAny(collection1,

“test2”,“test5”

)3、传入对象输入:PersoncustomerOne=newPerson();customerOne.setName(“test1”);customerOne.setAge(10L);processVariablesInput.put(“customerOne”,customerOne);输出:{collection:contains(“test1”, customerOne.name)}
4、json传入匹配 IN 两个并且都在
输入:
ArrayNode arrayNode1 = objectMapper.createArrayNode().add(“test1”).add(“test2”).add(“test3”);
processVariablesInput.put(“arrayNode1”, arrayNode1);
输出:“test1 and test2 in arrayNode1”
${collection:contains(arrayNode1, ‘“test1”, “test2”’)}
5、不包含 任意都不在
传入:
List inputVariable1 = Arrays.asList(“test1”, “test2”, “test3”);
processVariablesInput.put(“collection1”, inputVariable1);
表达式:test3 and / or test6 not in collection1
${collection:notContainsAny(collection1, ‘“test3”, “test6”’)}
6、不包含 not in 两个并且都不在
输入:
List inputVariable1 = Arrays.asList(“test1”, “test2”, “test3”);
processVariablesInput.put(“collection1”, inputVariable1);
输出:
test3 and test5 not in collection1
${collection:notContains(collection1, ‘“test3”, “test5”’)}

采集(COLLECT)

以任意顺序返回所有命中。我们可以添加运算符(+,<,>,#)来将一个简单函数应用于输出。如果没有运算符,则结果是所有输出条目的列表。

+(总和):决策表的结果是所有不同输出的总和。

<(最小值):决策表的结果是所有输出中的最小值。

‘>(最大值):决策表的结果是所有输出中的最大值。

#(计数):决策表的结果是不同输出的数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“我哥毕业1年,做Python挣了50W!”网友:吹得太少...

现状揭秘&#xff1a;Python岗位大厂50K起&#xff1f;程序员&#xff1a;心态崩了&#xff01;屠杀各种榜单&#xff0c;拿下语言排行榜的Python&#xff0c;薪酬真的如同网传开挂了吗&#xff1f;笔者在脉脉上发现了这样的一个信息&#xff1a;但Python真的这么火&#xff1f…

Nvidia GPU如何在Kubernetes 里工作

Nvidia GPU如何在Kubernetes 里工作 本文介绍Nvidia GPU设备如何在Kubernetes中管理调度。 整个工作流程分为以下两个方面&#xff1a; 如何在容器中使用GPUKubernetes 如何调度GPU如何在容器中使用GPU 想要在容器中的应用可以操作GPU&#xff0c; 需要实两个目标 容器中可…

C++多重继承师生类复盘

要求&#xff1a;做一个基类Data&#xff0c;数据成员name&#xff0c;派生类教师teacher和学生student继承Data的name数据成员&#xff0c;此外教师新增薪水sal数据成员&#xff0c;学生新增学号id数据成员&#xff0c;派生类研究生Postgard继承学生,新增系别dn数据成员&#…

mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务

什么是quartz&#xff1f;Quartz是一个完全由 Java 编写的开源任务调度框架。我们经常会遇到一些问题&#xff1a;想每个月27号&#xff0c;提醒信用卡还款&#xff1b;想每隔1小时&#xff0c;提醒一下&#xff0c;累了&#xff0c;站起来活动一下&#xff1b;想每个月定时发送…

flowable springboot 集成 flowableDMN_05

文章目录配置POM配置Config通过上述的配置&#xff0c;现在在spring容器中已经存在一些接口bean了项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base视频地址&#xff1a;https://www.bilibili.com/video/av79774697/*DMN集成&#xff1a;这里我们说的…

阿里云安全肖力:从RSA2019看安全技术发展的十个机遇

又一年RSA大会归来。每一年参会&#xff0c;总会有一些不同的感悟&#xff0c;或是发现全球安全行业的新趋势&#xff0c;或是找到志同道合的新伙伴&#xff0c;或是看到很多人也相信我们相信的安全技术新方向。今天在回国的航班上提笔写下我的感悟和判断&#xff0c;希望对安全…

华为组织架调整,CloudAI升至第四大BG,打通全球第一款集成5G模组的4K直播编码器网络通信服务;谷歌宣布与IBM合作……...

关注并标星星CSDN云计算 速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周两次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go goIntel 10nm Tiger Lake晶圆首曝&#xff1a;核心面…

编写C语言代码,实现以下功能:输入平面上两个点P1(x1,y1)和P2(x2,y2)的坐标,以这两个点为左上角和右下角可以确定一个矩形,输出这个矩形的周长。要求平面上点的坐标和矩形都用结构体来表示。

编写C语言代码&#xff0c;实现以下功能&#xff1a; 输入平面上两个点P1(x1,y1)和P2(x2,y2)的坐标&#xff0c;以这两个点为左上角和右下角可以确定一个矩形&#xff0c;输出这个矩形的周长。要求平面上点的坐标和矩形都用结构体来表示。 #define _CRT_SECURE_NO_WARNINGS 1 …

flowable DMN部署单独使用_06

文章目录配置规则部署使用项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base视频地址&#xff1a;https://www.bilibili.com/video/av79774697/DMN部署&#xff1a; dmn制定了规则之后&#xff0c;还需要部署好才能用DMN部署&#xff0c;独立使用 配…

SpringBoot使用SOFA-Lookout监控

本文介绍SpringBoot使用蚂蚁金服SOFA-Lookout配合Prometheus进行监控。 1.SOFA-Lookout介绍 上一篇已经介绍使用Prometheus进行暴露SpringBoot的一些指标进行监控&#xff0c;传送门&#xff0c;这一篇介绍如何使用SOFA-Lookout配合Prometheus。 SOFA-Lookout是蚂蚁金服开源的…

python迷宫小游戏大全_Python迷宫小游戏源代码、源程序

Python迷宫小游戏源程序包括两个文件maze.py和mazeGenerator.py&#xff0c;mazeGenerator.py实现迷宫地图的生成&#xff0c;程序运行截图&#xff1a;mazeGenerator.pyimport numpy as npimport randomimport copyclass UnionSet(object): """ 并查集实…

NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎

NoSQL最早起源于1998年&#xff0c;但从2009年开始&#xff0c;NoSQL真正开始逐渐兴起和发展。回望历史应该说NoSQL数据库的兴起&#xff0c;完全是十年来伴随互联网技术&#xff0c;大数据数据的兴起和发展&#xff0c;NoSQL在面临大数据场景下相对于关系型数据库运用&#xf…

编写C语言代码,实现以下功能:有N名学生,每个人的信息包括学号、姓名和语文、数学、英语、平均分等内容(用结构体表示 ),输出平均分排名倒数第2的学生信息。

编写C语言代码&#xff0c;实现以下功能&#xff1a; 有N名学生&#xff0c;每个人的信息包括学号、姓名和语文、数学、英语、平均分等内容&#xff08;用结构体表示 &#xff09;&#xff0c;输出平均分排名倒数第2的学生信息。 #define _CRT_SECURE_NO_WARNINGS 1 /*编写C语…

详谈ARM架构与ARM内核发展史

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 架构师技术联盟责编 | 阿秃1、ARM架构与ARM内核1.1 ARM架构与内核简述目前为止&#xff0c;ARM总共发布8种架构&#xff1a;ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7 、ARMv8&#xff0c;这是ARM架构指令集的多个v版…

DMN结合bpmn简化流程_07

项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base 视频地址&#xff1a;https://www.bilibili.com/video/av79774697/ DMN集成到BPMN中使用 简化流程&#xff0c;让我们的BPMN显得更加优雅 * DMN集成bpmn使用 新建决策树模板 注意一定要部署&…

阿里云RPA(机器人流程自动化)干货系列之一:认识RPA(上)

本文是阿里云RPA&#xff08;机器人流程自动化&#xff09;干货系列的开山之作&#xff0c;全面、详细的剖析了RPA的基本概念、给企业带来的价值点以及RPA的优劣势分析。 一、什么是RPA&#xff1f; 人类社会进入21世纪的第一个十年之后&#xff0c;全球企业大都面临着两个严峻…

linux pip3使用清华源_Linux实战016:Ubuntu搭建python开发环境

我们在安装Ubuntu系统的时候会自带安装python2.7和python3.6版本的Python解释器&#xff0c;直接执行"ptyhon"默认运行的是python2.7&#xff0c;只有执行"python3"时才会运行python3.6版本。Python解释器默认安装在/usr/bin目录下&#xff0c;但是Ubuntu并…

编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中

编写一个C程序&#xff0c;实现以下功能&#xff1a; 定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p)&#xff0c;该函数使用选择排序法按年龄由小到大排序。在主函数中输入10个学生的学号、姓名、年龄和身高&#xff0c;调用sort函数…

Spring Boot 最最最常用的注解梳理

文章目录一、注解(annotations)列表二、注解(annotations)详解三、JPA注解四、springMVC相关注解五、全局异常处理一、注解(annotations)列表 SpringBootApplication&#xff1a; 包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan让sprin…

在抖音上刷到AI程序员的工资条后,我笑了,别吹了!

2020年&#xff0c;程序员会怎么样&#xff1f;A与B &#xff0c;薪酬与前景程序员与远方2017年~2018年&#xff0c;是人工智能大火的时候。你会发现&#xff0c;跟朋友聊天不谈人工智能&#xff0c;聊天的bigger都上不去。作为一个前景明朗的朝阳行业&#xff0c;高薪吸引&…