java - Drools 从 session 中获取相同类型的对象

标签 java drools

我有一个简单规则,其中我在 session 中插入了两个字符串类型的变量。现在我需要获取变量。

相同的代码:

rule "Header Account Null Check"
    dialect "java"
    ruleflow-group "TB:Header Account Null Check"
    when
        cAccount : AccountPair( headerAccount == null )     
    then
        String error=new String();
        String validateMsg=new String();
        error="2528";
        validationMsg="Header Account must not be null"
        modify( cAccount ) {
                setErrorCode( "2528" )
        }
        insert(error);
        insert(validateMsg);
        System.out.println("Header Account null check called");
end

query "fetch validation variables"
    #conditions
    s:String();
end

Java 代码:

Collection<Object> myfacts = kSession.getObjects( new ClassObjectFilter(String.class) );

检查myfacts后,我得到了两个值。

现在的问题是有两个 String.class 类型的变量,我需要知道哪个值是 error 的值,哪个值是 validationMsg 的值,以便我们执行下一个任务。

与输入相同,如果我们从 session 中添加两个字符串变量,现在我需要在这些变量上添加条件。所以同样的问题也会发生。到目前为止,我们通过将变量声明为全局变量来解决输入变量问题。我还需要更改此策略,因为这对于声明全局变量来说不是一个好的决定。

请帮帮我。

最佳答案

这应该是非常明显的:如果您有多个 String 对象,您将无法区分,除非它们的值具有某些特征。 (在您的情况下,错误字符串是数字,而另一个不是。)但不建议以此为基础构建应用程序。

因此您必须将标识附加到字符串值。为此,您可以创建一个包含字符串名称字符串值的对象。你的 RHS 变成:

  insert( new Result( "error", "2528" ) );
  insert( new Result( "message", "Header Account must not be null" ) );
  modify( cAccount ) {
      setErrorCode( "2528" )
  }
  System.out.println("Header Account null check called");

您可以对多个输入使用相同的原理。

关于java - Drools 从 session 中获取相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545549/

相关文章:

带有滑动效果的JavaFX Switch场景

java - 如何在数学任务中使用我的输入

java - 输出说明

java - Drools 管道问题

java - 在单个数组中添加浮点值和字符串值,并使用它来写入 .CSV 文件

java - 在这种情况下如何在drools中使用collect()

drools - 流口水可以循环吗?

java - 使用 ConsequenceExceptionHandler 触发规则时记录异常

drools - Drools vs JBPM吗?差异,利弊

tomcat - 以低权限用户身份运行tomcat应用程序?