有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Drools从会话中获取相同类型的对象

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

相同的代码:

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后,我得到了两个值

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

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

请帮帮我


共 (1) 个答案

  1. # 1 楼答案

    这应该是非常明显的:如果您有几个字符串对象,除非它们的值具有某些特征,否则您无法区分它们。(在您的例子中,错误字符串是数字,而另一个不是。)但不推荐基于此的应用程序

    因此,必须为字符串值附加标识。为此,可以创建一个包含String nameString value的对象。您的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");
    

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