Drools – 在决策表中使用“from”

我遇到了一些麻烦,我知道这个规则是以.drl格式工作,在决策表中工作。

这是我的规则在drlforms:

rule = "slider1" dialect "mvel" when $person: Person() ArrayList( size >= 2 ) from collect( TestResult( name in ("TestA","TestB"), result == "high" ) from $person.getLabResults() ) then $person.setString("It worked"); end 

以下是我在电子表格中尝试的内容:

 CONDITION ------------------- $person:Person() ------------------- ArrayList( size >= 1 ) from collect( TestResult( name in $param, result == 'high' ) from $person.getLabResults() ) ------------------- Lab Names ------------------- "TestA","TestB" 

当我尝试从电子表格运行规则时,出现以下错误:

 Error while creating KieBase[Message [id=1, level=ERROR, path=com/creo/drools/decisiontables/sample-decision-table.xls, line=11, column=0 text=[ERR 102] Line 11:53 mismatched input 'from' in rule "Young safe package 1"], Message [id=2, level=ERROR, path=com/creo/drools/decisiontables/sample-decision-table.xls, line=0, column=0 text=Parser returned a null Package]] 

似乎有些东西不能正确地使用from子句,但我不知道为什么。 我已经尝试了很多谷歌search,这是我能find的唯一的东西: http : //drools-moved.46999.n3.nabble.com/Question-on-excel-decision-table-with-quot-variable-Type-从信息收集QUOT-td1186138.html

有任何想法吗? 这让我疯狂,为什么这不会在电子表格中工作。

Drools电子表格编译器不能使用你想要的格式。 如果您阅读文档,则会说CONDITION下的单元格提供了CE模式,通常是一个类名称,下一个单元格指定了一个约束条件 ,即必须适合添加到上述模式中的一对括号之间的expression式。 占位符$param然后会被列的下面的单元格值重复replace。

添加缺less的括号,您的条件扩展到(无效的)DRL代码:

 $person:Person( ArrayList( size >= 1 ) from collect( TestResult( name in ("TestA","TestB"), result == 'high' ) from $person.getLabResults() ) ) 

这只会导致您报告的错误消息,由于错误的from

我有这个代码片断,如果你可以从任何地方导入类SpreadsheetCompiler,一个调用将显示生成的DRL,对或错。

 private void testSpreadsheet(String dtPath){ File dtf = new File( dtPath ); InputStream is; try { is = new FileInputStream( dtf ); SpreadsheetCompiler ssComp = new SpreadsheetCompiler(); String s = ssComp.compile( is, InputType.XLS ); System.out.println( "=== Begin generated DRL ===" ); System.out.println( s ); System.out.println( "=== End generated DRL ===" ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

如果你需要用testing结果列表生成很多规则,你应该看看Drools模板。 使用这种技术,可以将参数插入到任意规则文本中。 其他解决方法也可能是可行的,例如,DRL和电子表格规则的组合。