当前位置: 首页 > 知识库问答 >
问题:

Drools在StateLesskiesSession的列表输入中为每个项触发一个规则

孔海超
2023-03-14
kieStatelessSession.execute(inputList)

共有1个答案

华萧迟
2023-03-14

对于你试图实现的目标,Drools中没有开箱即用的支持。如果您希望您的规则为每个事实评估一次,您将需要自己编写代码。

一种方法是在处理一个输入时标记另一种类型的事实:

declare Marker
  fact : Object
end

//Bellow are the rules that should be coming from your decision table.
//Each rule will do whatever it needs to do, and then it will create a 
//Marker fact for the fact that was processed.
//These rules now include a "not" Conditional Element to avoid a fact to be
//evaluated more than once.

rule "Rule 1"
salience 100
when 
  $fact: Object(...)   //your conditions
  not Marker(fact == $fact)
then
  //...   Your logic
  insert(new Marker($fact)); 
end

...


rule "Rule 50"
salience 50
when 
  $fact: Object(...)   //your conditions
  not Marker(fact == $fact)
then
  //...   Your logic
  insert(new Marker($fact)); 
end

希望能有所帮助,

 类似资料:
  • 假设我有一个议程组“daily”,它有两组drools规则集A有规则“default-1”,“default-2”,“default-3”,集B有规则“custom-1”,“custom-2”,“custom-3” 当议程组“daily”变得集中,并且当前事实与自定义模式匹配时,我只希望“custom-1”和/或“custom-2”和/或“custom-3”触发;否则,只有“Default-1”和

  • null 我在上面试图指出的是,只有在执行第一个规则时,第二个规则才会执行。但是,正如我所理解的,规则的“如果”部分是在“然后”部分之前执行的,因此,第二条规则失败了。

  • 我必须在java方面这样做吗? 编辑:同时,非常欢迎针对Drools的教程/指南建议。

  • 因此,如果输入条件是TRUEFALSEFALSETRUEFALSE,那么有没有什么方法可以同时触发第一个规则和第二个规则,并在列表中返回结果,在本例中,第一个操作是APPROVERTWO和APPROVERFOUR。

  • 我对口水很陌生,从基础开始。这是一个设置; > 有一些规则文件 不同文件中的规则属于不同的议程组 所有规则都基于同一事实 在我的单元测试中,我获得了一个特定的“议程组”,设置焦点(

  • 我有一个多用途的传感器,每个传感器发送计步器数据。我有一个基于macAddress的规则文件,触发规则: My User只有一个字段,Steps事件有以下字段: 现在,当我为每个macAddress插入一个事件时,如果在过去一小时内使用该macAddress的用户的步骤数少于50,则规则将触发。因此,如果满足此条件,则该规则将为每个macAddress触发。但我希望规则只能为插入的步骤事件的mac