我有一个简单规则,其中我在 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/