83.2. 规则的日程组
日程安排小组是通过相同的日程安排规则属性,共同 开展的一系列
规则。安排按决策引擎日程表分组分组规则。在任何时候,只有一个组 专注于 执行某个规则,然后再在其他 schedule groups 中的规则之前。您可以利用 setFocus()
邀请您获取此表格小组的关注。您还可以使用 auto-focus
属性定义规则,以便下一次激活规则时,会自动将重点分配给分配给该规则的整个日程表组。
每次在 Java 应用程序中执行 setFocus()
调用时,决策引擎会将指定的日程表组添加到规则堆栈的顶部。默认日程小组 "MAIN"
包含不属于指定日程表组的所有规则,并且首先在堆栈中执行,除非另一个组有关注。
例如,以下 DRL 规则属于指定的索引组,它们按以下所示的顺序列在决策引擎堆栈中:
银行应用程序的 DRL 规则示例
rule "Increase balance for credits" agenda-group "calculation" when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $amount : amount ) then acc.balance += $amount; end
rule "Print balance for AccountPeriod" agenda-group "report" when ap : AccountPeriod() acc : Account() then System.out.println( acc.accountNo + " : " + acc.balance ); end
在本例中,必须首先执行 "报告"
日程中的规则,并且 "计算"
日程表组中的规则必须始终执行第二个。然后可以执行其他日程组中的任何剩余规则。因此,在执行其他规则之前,
组必须接收执行该顺序的焦点:
"报告
"和"计算"
设定日程组执行顺序的关注
Agenda agenda = ksession.getAgenda(); agenda.getAgendaGroup( "report" ).setFocus(); agenda.getAgendaGroup( "calculation" ).setFocus(); ksession.fireAllRules();
您还可以使用 clear()
方法,在每一机会执行前取消属于给定日程表组生成的所有激活:
取消所有其他规则激活
ksession.getAgenda().getAgendaGroup( "Group A" ).clear();