在DRL文件中完成Arraylist迭代后调用Drools Agenda

时间:2015-03-06 17:40:10

标签: iteration drools

我正在迭代DRL文件中的列表。我需要在完成循环后调用新议程。但是下面的代码将议程和#34; B称为C"对于所有迭代

rule "Difference in offsets"
dialect "java"
lock-on-active
when
    $notification : NotificationVO()
    wtOffset:Integer() from $notification.getWeightOffset();
then
    System.out.println("Hello loop1");
    $notification.getOffsetChngesInterval().
    add((wtOffset-$notification.getInitialOffset()));
    update($notification);
    drools.setFocus("B to C");

rule "Last activity"
   dialect "java"
   salience 2
    no-loop true
    auto-focus false
    agenda-group "B to C"
when
     $notification:NotificationVO
     ($notification.getOffsetChngesInterval()!=null)
then
    System.out.println("Rule2---"+
    $notification.getOffsetChngesInterval().size());
end

在上面的代码中,我想把议程组" B的重点放在C"只有在完成$ notification.getWeightOffset();。

的迭代之后

1 个答案:

答案 0 :(得分:0)

两条评论。 (1)需要充分利用规则属性。 (2)规则"抵消差异"实现一个过程范例:映射一个列表的元素以创建另一个列表。

那就是说,我会计算"更改间隔"在规则的右侧,当有更多"权重抵消" "改变间隔"。 (我猜这是一个很好的条件。)

rule "Difference in offsets"
dialect "java"
when
  $ntf: NotificationVO( weightOffset.size() > offsetChngesInterval.size(),
                        $initOff: initialOffset )
then
  for( Integer ioff: $ntf.getWeightOffset ){
    $ntf.getOffsetChngesInterval().add(ioff - $initOff );
  }
  update( $ntf );
  System.out.println( $ntf.getOffsetChngesInterval().size());
end