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

Drools-如何检查决策表中是否存在事实

涂溪叠
2023-03-14

我正在使用Drools 5.5.0,我有一个决策表,如下所示:

当我运行规则引擎时,我一次只插入一个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中一样)我需要这个对象,以便我可以将其用作操作语句中的输出。为了简单起见,我还试图将列中每个规则的单元格留空。

共有2个答案

宋经赋
2023-03-14

我知道现在对于原始海报来说为时已晚,但面对类似的问题,我的解决方案是在该对象中寻找一个肯定不会为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文件会如下所示:

如果这些对象上没有强制参数,甚至可以跳过内部参数并检查SecurityContext及其本身是否为null。或者,您可以检查“exists SecurityContext”。

龚凯泽
2023-03-14

在右侧和侧面创建“输出对象”会更方便,您可以插入它或将其传递给全局集合。

在某种程度上,人为地将仅存在事实的条件包括在内的变通方法如下所示:

CONDITION
$output : JSONWrapper
/*$param*/
mark below to force inclusion
x

请注意,您可以垂直连接单元格。

 类似资料:
  • 我有一个关于如何评估Drools决策表的条件的问题。我原以为条件是从左到右计算的,如果它检查给定规则的最左边的列为false,它将不会检查其余的条件。 这对我来说很重要的一个原因是将范围最窄的条件放在最左边的概念。这意味着对象会更快地启动,而不是大多数满足广泛条件的对象首先并继续检查附加条件。 然而,这不是我在单元测试中看到的行为,我将在下面概述。 这个例子很简单,并不是为了演示范围的早期缩小。

  • 我在excel电子表格中有一个drools决策表,其中有两条规则。(此示例已大大简化,我正在使用的示例有更多规则。) 我的目标是让规则自上而下地触发,随后的规则可能取决于早期规则对事实/对象所做的更改。 这个问题有解决办法吗?任何帮助都将不胜感激,谢谢!

  • 问题内容: 我正在通过.NET应用程序中的ODBC驱动程序连接到Hive。是否存在查询以确定表是否已存在? 例如,在MSSQL中,您可以查询表,而在Netezza中,您可以查询表。 任何援助将不胜感激。 问题答案: 您可以通过两种方法进行检查: 1.)如@dimamah所建议,只需在此处添加一点,对于这种方法,您需要 2.)第二种方法是使用HiveMetastoreClient API,您可以在其

  • 目前,我的drools决策表如下所示: 现在我想让这个决策表看起来像。drl文件中的下一个: 那么如何修改决策表来实现我的目标呢? 那就是如何在决策表文件中使用“exists”关键字? 提前感谢!

  • 我是boto3的新用户,我正在使用DynamoDB。 我浏览了dynamodbapi,没有找到任何方法告诉我是否已经存在一个表。 处理这个问题的最佳方法是什么? 我应该尝试创建一个新表并使用try-catch包装它吗?

  • 有人能帮我调试Drools中的决策表吗。对于我们的项目,我们正在创建一个包含1000多条规则的决策表。每当他们在规则中出现错误时,谁的电子表格不工作,也不显示准确的错误在哪里。