I changed variable names in the last minute to make more sense, the actual
eval statement is as following:
eval(((Boolean) $discard).booleanValue() == false)
I do have $discard bound in my rule, you still think above statement throw
compilation error. I don’t get any compilation errors. However at run time
it is not getting the right value (well.. what I think is a right value J )
-sridhar
sridhar123 wrote:
Here is my drl file: It seems LHS of all rules executed first irrespective
of salience or focus. What am i doing wrong? Appreciate your help.
rule "Eval Window"
salience 10
agenda-group "Eval Window"
// activation-group "Eval Window"
auto-focus true
when
$data : AirTravelPolicyData($reqDep : fareRequest.requestedDeparture,
$reqRet : fareRequest.requestedReturn,
$itr : itinerary,
$evalWindow : policySettings.evaluationWindow,
$depart : departureFlight.departure,
$retrn : returnFlight.departure
)
eval ((DateUtil.subtractHours((Date)$reqDep,
((Integer)$evalWindow).intValue()))
.before((Date)$depart))
then
// modify block sets $itr.discardable to true
modify($itr) {
setAsDiscardable()
}
// update ($data);
drools.setFocus("Eval carrier");
end
rule "Eval carrier"
salience 5
agenda-group "Eval carrier"
// activation-group "Eval carrier"
when
$data : AirTravelPolicyData($prefCarrier :
policySettings.preferredCarrier,
$carrier : departureFlight.carrier,
$discard : itinerary.discarded
)
// Eval Window rule changed discarded flag to true so this condition
should fail but it dose not ???
eval(((Boolean)$itr).booleanValue() == false)
then
// But.. when i print out the discard flag here it show as true.. In that
case how eval condiation is passed?
System.out.println("*********Current Itr in Eval carrier: " +
$discard );
end
Edson Tirelli-3 wrote:
>
> This is wrong:
>
> $data : MyFact( $anotherObj )
>
> Is the parser accepting it without any error???? If so, it is a bug.
> I can't even imagine what is the parsing result for such expression.
>
> This is also wrong:
>
> eval ($anotherObj.isDiscard() == true)
>
> There is no previous binding for "$anotherObj". Only possible scenario
> is
> you defined it as a global.
> So, whatever you are doing and seeing, I have no idea how you can
> execute
> rules.
>
> Can you show us the whole DRL file you are using? Can you show the
> snippet of code you are using to execute it?
>
> []s
> Edson
>
>
>
>
>
> 2008/5/13 sridhar123 <sridhar.peddinti(a)sabre.com>:
>
>>
>> It still dosen't work as desired. Here is my code:
>>
>> rule A
>> Salience 10
>> when
>> $data : MyFact( $anotherObj )
>> then
>> modify( $anotherObj ) {
>> setDiscard(true)
>> }
>>
>> rule B
>> Salience 5
>> when
>> eval ($anotherObj.isDiscard() == true)
>> then
>> ...
>>
>> It seems, all When conditions are executed first irrespective of
"then"
>>
>> I also tried with agenda group and having default focus on Rule A and in
>> Then section setting focus to Rule B - still the condition doesnt match.
>> When i inspect fact - after Rule A is executed, i see my flag is set to
>> true
>> - but not visible to Rule B.
>>
>> Do i need to write seperate drl files. Also, i am using eclipse 3.3 and
>> ruleflow seems buggy i can not add any rule flow groups. do i need to
>> use
>> 3.2. I am using Drools 4.0.4
>>
>> thank you
>>
>>
>>
>>
>>
>> Alessandro Lazarotti wrote:
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > rule A
>> > Salience 10
>> > when
>> > $anotherObject: MyFact(discard != true)
>> > then
>> > modify($anotherObj){
>> > setDiscard(true)
>> > }
>> >
>> >
>> > "Modify" update your fact in the current working memory.
>> >
>> >
>> >
>> > sridhar123 escreveu:
>> >
>> >
>> > It means, I can not fire all rules at once, I need to groups and
>> change
>> > focus in my java code?
>> >
>> > I couldn't find any docs or examples to properly use Salience - could
>> you
>> > please share an example (if you have one)
>> >
>> > thx
>> >
>> >
>> >
>> > Alessandro Lazarotti wrote:
>> >
>> >
>> > You need upate() the fact $anotherObj in Working Memory.
>> >
>> > sridhar123 escreveu:
>> >
>> >
>> > rule A
>> > Salience 10
>> > when
>> > $data : MyFact( $anotherObj )
>> > then
>> > $anotherObj.setDiscard(true)
>> >
>> > rule B
>> > Salience 5
>> > when
>> > eval ($anotherObj.isDiscard() == true)
>> > then
>> > ...
>> >
>> >
>> > I am trying to get Rule A executed before Rule B. So when condition in
>> > Rule
>> > B is valid. However i dont see "Saliene" has any effect. How else
i
>> can
>> > do
>> > the above?
>> >
>> > thank you
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > rules-users mailing list
>> > rules-users(a)lists.jboss.org
>> >
https://lists.jboss.org/mailman/listinfo/rules-users
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > rules-users mailing list
>> > rules-users(a)lists.jboss.org
>> >
https://lists.jboss.org/mailman/listinfo/rules-users
>> >
>> >
>>
>> --
>> View this message in context:
>>
http://www.nabble.com/Salience-not-working-tp17190028p17217969.html
>> Sent from the drools - user mailing list archive at
Nabble.com.
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
>
> --
> Edson Tirelli
> JBoss Drools Core Development
> Office: +55 11 3529-6000
> Mobile: +55 11 9287-5646
> JBoss, a division of Red Hat @
www.jboss.com
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>