It doesn't work...

I tried this rule using version 3.1M1

rule "orCondition"
   when
       myObj : (MyObject(field1 == "a", $field2 : field2, $field3 :
field3) or MyObject(field1 == "b", $field2 : field2, $field3 :
field3))    //correct column
       AnotherPattern( attr2 == $field2, attr3 == $field3 )
   then
       System.out.println("fields = "+ field2 + field3);
end

and I got this exception, that is the same exception received using 3.0.5 version:

Exception in thread "main" org.drools.rule.InvalidRulePackage: Duplicate declaration for variable '$field2' in the rule 'orCondition'
Duplicate declaration for variable '$field3' in the rule 'orCondition'.


I tried also the first solution proposed, for the 3.0.5 version:

rule "orCondition"
    when
        myObj : (MyObject(field1 == "a", $field2 : field2, $field3 :
field3) or MyObject(field1 == "b"))    //correct column
        AnotherPattern( attr2 == $field2, attr3 == $field3 )
    then
        System.out.println("fields = "+ field2 + field3);
end

..but I got this exception:

Exception in thread "main" org.drools.rule.InvalidPatternException: Required Declarations not bound: '$field2
    at org.drools.reteoo.ReteooBuilder.checkUnboundDeclarations (Unknown Source)
    at org.drools.reteoo.ReteooBuilder.addRule(Unknown Source)
    at org.drools.reteoo.ReteooBuilder.addRule(Unknown Source)
    at org.drools.reteoo.ReteooRuleBase.addRule(Unknown Source)
    at org.drools.common.AbstractRuleBase.addPackage(Unknown Source)
    at org.drools.jsr94.rules.admin.RuleExecutionSetImpl.<init>(Unknown Source)
    at org.drools.jsr94.rules.admin.LocalRuleExecutionSetProviderImpl.createRuleExecutionSet (Unknown Source)
    at org.drools.jsr94.rules.admin.LocalRuleExecutionSetProviderImpl.createRuleExecutionSet(Unknown Source)
    at org.drools.jsr94.rules.admin.RuleExecutionSetProviderImpl.createRuleExecutionSet(Unknown Source)

2007/3/13, Edson Tirelli <tirelli@post.com>:

    Francesco,

    You need to be careful when doing that, if you are using 3.0.x version.
    First thing is that both sides of your "or" must be perfectly
"balanced", i.e., the same classes in the same order. I didn't tried
that, but I think it works if you simply declare your binding once:

rule "orCondition"
    when
        myObj : (MyObject(field1 == "a", $field2 : field2, $field3 :
field3) or MyObject(field1 == "b"))    //correct column
        AnotherPattern( attr2 == $field2, attr3 == $field3 )
    then
        System.out.println("fields = "+ field2 + field3);
end

    This is a workaround for the 3.0.x versions.Try it and let me know plz.

    In 3.1M1 and later, all this is fixed and the correct is to declare
the variable in all logical branches:

rule "orCondition"
    when
        myObj : (MyObject(field1 == "a", $field2 : field2, $field3 :
field3) or MyObject(field1 == "b", $field2 : field2, $field3 :
field3))    //correct column
        AnotherPattern( attr2 == $field2, attr3 == $field3 )
    then
        System.out.println("fields = "+ field2 + field3);
end

   []s
   Edson


Francesco Campagnola wrote:

> Hi,
>
> I'd like to write a rule that contains an OR condition in the LHS, to
> match the presence in the working memory of an object with particular
> values of a specific field.  In the rest of LHS, i need to bind other
> values of the specific object matched. Is there a particular sintax to
> use for the binding?
>
> For example:
>
> rule "orCondition"
>     when
>         myObj : (MyObject(field1 == "a") or MyObject(field1 ==
> "b"))    //correct column
>
>         field2: myObj.getField2 ()    // how to correctly get
>         field3: myObj.getField3()    // those values?
>     then
>         System.out.println("fields = "+ field2 + field3);
>
> Thanks in advance, FC.
>
>------------------------------------------------------------------------
>
>_______________________________________________
>rules-users mailing list
> rules-users@lists.jboss.org
>https://lists.jboss.org/mailman/listinfo/rules-users
>
>


--
Edson Tirelli
Software Engineer - JBoss Rules Core Developer
Office: +55 11 3124-6000
Mobile: +55 11 9218-4151
JBoss, a division of Red Hat @ www.jboss.com


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users