Drools-如何检查决策表中是否存在事实
我正在使用Drools 5.5.0,我有一个决策表,如下所示: 当我运行规则引擎时,我一次只插入一个Drools-如何检查决策表中是否存在事实,drools,xls,Drools,Xls,我正在使用Drools 5.5.0,我有一个决策表,如下所示: 当我运行规则引擎时,我一次只插入一个SecurityContext,一次插入一个JSONWrapper 单从这个表来看,我的所有规则都不会被炒鱿鱼(不过它们都会被评估)。我相信这是因为对于第二个条件,每个角色/规则的单元格都是空白的 这就是我想要的,在DRL中: package com.acme.security.rules.widget; import com.acme.test.RuleTableTest.SecurityC
SecurityContext
,一次插入一个JSONWrapper
单从这个表来看,我的所有规则都不会被炒鱿鱼(不过它们都会被评估)。我相信这是因为对于第二个条件,每个角色/规则的单元格都是空白的
这就是我想要的,在DRL中:
package com.acme.security.rules.widget;
import com.acme.test.RuleTableTest.SecurityContext;
import com.acme.test.RuleTableTest.JSONWrapper;
rule "widget_accessibility_store_manager"
when
$sc : SecurityContext()
$output : JSONWrapper()
eval($sc.hasRole("Store Manager"))
then
$output.setFeatureVisibility("feature1", "yes");
$output.setFeatureVisibility("feature2", "yes");
$output.setFeatureVisibility("feature3", "yes");
$output.setFeatureVisibility("feature4", "yes");
$output.setFeatureVisibility("feature5", "yes");
end
这条规则很好
如何在决策表中设置一个只检查对象是否存在的条件,而不受任何其他约束?(就像在我的DRL中一样)我需要这个对象,这样我就可以在操作语句中将它用作输出。为了简单起见,我还尝试将列中每个规则的单元格留空。在右侧和侧面创建“输出对象”会更方便,您可以插入它或将其传递给全局集合 包含仅存在事实的条件的有点做作的变通方法如下所示:
CONDITION
$output : JSONWrapper
/*$param*/
mark below to force inclusion
x
请注意,您可以垂直连接单元格。我知道现在对于原始海报来说已经太晚了,但面对类似的问题,我的解决方案是在该对象中查找一个肯定不会为null的值。例如:
rule "widget_accessibility_store_manager"
when
$sc : SecurityContext(role != null)
$output : JSONWrapper(featureVisibility!=null)
eval($sc.hasRole("Store Manager"))
then
$output.setFeatureVisibility("feature1", "yes");
$output.setFeatureVisibility("feature2", "yes");
$output.setFeatureVisibility("feature3", "yes");
$output.setFeatureVisibility("feature4", "yes");
$output.setFeatureVisibility("feature5", "yes");
end
然后你的excel文件看起来像这样:
CONDITION
$output : JSONWrapper
/*$param*/
mark below to force inclusion
x
如果这些对象上没有强制参数,甚至可以跳过内部参数并检查SecurityContext及其本身是否为null。或者,您可以检查“exists SecurityContext”。这太愚蠢了,Drools不会以更明显的方式在决策表中做一些在DRL中很容易做到的事情。然而,我认为您的解决方案更为理想,因为在我的描述单元中,我使用了“下面的标记强制包含”这样的措辞,因此很明显,如果没有任何内容,规则就不会被取消。好主意。