我正在修改规则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--)。 请帮忙!
答案 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
公开......