更新全局整数变量

时间:2015-03-09 15:18:16

标签: global drools

我正在修改规则1中的某个值的全局整数变量。 我需要在其他一些规则中得到这个修改后的值,比如规则2。

global Integer deviceCapacity; 

rule "Rule 1"
dialect "java"
no-loop true
when
    $snrData : SensorDataVO(getWeightOffset().size()>0,
    $initOffset:getInitialOffset());
then
    for(Integer iOff:$snrData.getWeightOffset()){
        $snrData.getOffsetChngesInterval().add(iOff-$initOffset);
        insert (new NotificationVO(iOff-$initOffset));
    }
    deviceCapacity=$snrData.getDeviceCapacity();
end


rule "Rule 2"
dialect "java"
no-loop true
when
    $mstData : MasterDataVO();
    $notification:NotificationVO((getOffsetWeight()/4).
    equals($mstData.getRodentWeight()));
then
    System.out.println("Abhijeet--"+deviceCapacity);
end

我无法访问规则2中更新的deviceCapacity值,因为我想使用deviceCapacity值代替“4”,并希望这样做直到deviceCapacity变为0(deviceCapacity--)。 请帮忙!

1 个答案:

答案 0 :(得分:1)

您只能使用API​​更改存储在DRL全局中的对象引用的值:

then
//...
kcontext.getKieRuntime().setGlobal( "deviceCapacity",
                                    $snrData.getDeviceCapacity() );
end

显然,这很难看,并且在编译时没有检查过。您可以考虑编写包装器

class IntWrapper {
    private int value;
    // getter, setter
}

global IntWrapper deviceCapacity; 

然后你可以做

deviceCapacity.setValue( $snrData.getDeviceCapacity() );

或者让int value公开......

相关问题