我对流口水有点新意。我的drl文件中有2个规则,即DateYYYYMMDD和TotalChargesAndTax。我使用以下语法从我的main方法执行2规则。
Command<?> syntacticValidation = new FireAllRulesCommand(
new RuleNameEqualsAgendaFilter("DateYYYYMMDD"));
Command<?> semanticValidation = new FireAllRulesCommand(
new RuleNameEqualsAgendaFilter("TotalChargesAndTax"));
List<Command> commands = new ArrayList<Command>();
commands.add(semanticValidation);
commands.add(syntacticValidation);
session.execute(CommandFactory
.newBatchExecution(commands));
但是当我运行我的应用程序时,只执行TotalChargesAndTax规则并跳过DateYYYYMMDD规则。如果我在ArayList中交换命令对象的位置,如下所示,
commands.add(syntacticValidation);
commands.add(semanticValidation);
然后执行DateYYYYMMDD规则并跳过TotalChargesAndTax规则。有没有办法执行规则并执行两个规则的后果?截至目前,只执行一个结果,具体取决于数组列表中的哪个命令。
答案 0 :(得分:1)
当您编写规则时,您无法说明必须触发哪条规则。规则引擎将根据您在知识会话中插入的事实/ pojos选择规则。我建议您不要使用议程过滤器来尝试强制执行规则。如果您插入的对象与规则条件侧(WHEN)匹配,则会自动执行多个规则。 如果您想分享您的规则,我们可以为您提供帮助。 干杯