在 drl 文件中使用 declare 语句

Using declare statement in drl files

我在 DRL 文件中声明一个 SensorMode 对象

declare SensorMode
  modeOffset: Integer
end

我已经使用

将值设置为 modeOffset
FactType factType=kbase.getFactType("com.yob.pestway.
valueobjects",  "SensorMode");
Object nc = factType.newInstance(); 
factType.set(nc, "modeOffset",sensorDataVO.getModeOffset());

我需要在下面的规则中使用 modeOffset,它给我一个错误,说 $mode.modeOffset 不可见。

rule "Difference in offsets"
dialect "java"
no-loop true
when
    $mode:SensorMode();
    $snrData : SensorDataVO(getWeightOffset().size()>0,
    $initOffset:getInitialOffset());
then
    System.out.println("---modeOffset---"+$mode.modeOffset);
    update($snrData);
end

能不能给个建议

两种选择:

rule "Difference in offsets"
dialect "java"
no-loop true
when
    $mode:SensorMode( $mo: modeOffset );
    //...
then
    System.out.println("---modeOffset---"+ $mo);
    //...
end

或者:

rule "Difference in offsets"
dialect "java"
no-loop true
when
    $mode:SensorMode();
    //...
then
    System.out.println("---modeOffset---"+ $mode.getModeOffset() );
    //...
end

dialect "mvel" 可能是第三个选项,但这可能取决于您使用的 Drools 版本。