use*_*188 2 java drools jbpm mvel
嗨我想禁用其他一些drools规则,当另一组drools规则触发时,你会怎么做?
假设我有一个议程组"Daily",它有两组drools规则集A有规则"Default-1","Default-2","Default-3"set B有规则"Custom-1"," Custom-2","Custom-3"
当议程组"每日"聚焦,并且当前事实与自定义模式匹配时,我想要"自定义-1"和/或"自定义-2"和/或"自定义-3"仅触发; 否则,只有"Default-1"和/或"Default-2"和/或"Default-3"触发.
问题是,Default-1/2/3总是被触发.我需要一种方法在Custom-1/2/3中禁用它们.首先,我将Custom-1/2/3中的显着性级别设置为高于Default-1/2/3.然后我尝试使用激活组.但是,如果我将它们全部设置为同一个激活组,则六个规则中只有一个会触发,这不是我想要的.
我不允许更改.java模块,它每次都会加载所有规则.我只能更改.drl drools规则.
谢谢.
您可以尝试使用标记对象解决您的问题.假设你定义了一个Marker类:
public class Marker {
String uniqueIdentifier;
//getter and setter, etc
}
Run Code Online (Sandbox Code Playgroud)
(drools允许您在*.drl代码中定义新类而不依赖于*.java)
然后使自定义组在默认组之前运行(显着性将起作用,定义流也可以工作)并"标记"这些对象通过在内存中插入新的Marker事实来触发自定义规则,如下所示:
when
SomeObject($unique: someIdentifier)
//normal conditions
then
insert(new Marker($unique))
//normal action
Run Code Online (Sandbox Code Playgroud)
并且默认规则仅对未触发自定义规则的对象起作用:
when
SomeObject($unique: someIdentifier)
not Marker(uniqueIdentifier = $unique)
//normal conditions
then
//normal action
Run Code Online (Sandbox Code Playgroud)
另外,为了防止泄漏,您可能需要第3(最后)组规则来清理:
when
SomeObject($unique: someIdentifier)
$marker : Marker(uniqueIdentifier = $unique)
then
retract($marker)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |