Search code examples
droolsdeclare

Using declare statement in drl files


I am declaring a SensorMode object in the DRL file

declare SensorMode
  modeOffset: Integer
end

I have set the value to modeOffset using

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

I need to use the modeOffset in the following rule,It gives me an error saying $mode.modeOffset is not visible.

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

Can you please suggest


Solution

  • Two alternatives:

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

    Or:

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

    It's possible that dialect "mvel" is a third option, but this may depend on the Drools version you are using.