[rules-users] Re: No OR syntax

Ronald R. DiFrango ron.difrango at gmail.com
Sat Jul 7 12:36:06 EDT 2007


OK, Ignore this one as well.  It looks like the syntax changed slight from
the blog entry.  The connector for the fields is || versus the single | in
the blog.

Thanks!

On 7/7/07, Ronald R. DiFrango <ron.difrango at gmail.com> wrote:
>
> And it looks like the != operator is not allowed either:
>
> rtvHeader : RtvHeader( status != "Matched" | != "Approval" )
>
> Does not work
>
> On 7/7/07, Ronald R. DiFrango <ron.difrango at gmail.com> wrote:
> >
> > OK, here is the problem:
> >
> > I currently have this:
> >
> > rtvHeader : RtvHeader( status != StatusConstants.MATCHED | !=
> > StatusConstants.APPROVAL )
> >
> > but if I switch it to use a quoted string value like the following:
> >
> > rtvHeader : RtvHeader( status == "Matched" | == "Approval" )
> >
> > It works...Is this a bug?
> >
> > On 7/7/07, Ronald R. DiFrango <ron.difrango at gmail.com> wrote:
> > >
> > > OK, this does not looked correct syntax or that it is supported.  Here
> > > is the exception I get:
> > >
> > > Exception in thread "main" java.lang.ExceptionInInitializerError
> > >     at com.circuitcity.rtvcrms.test.MainBasedTester.testRules (
> > > MainBasedTester.java:31)
> > >     at com.circuitcity.rtvcrms.test.MainBasedTester.main(
> > > MainBasedTester.java:23)
> > > Caused by: java.lang.RuntimeException: Failure loading the Rules
> > >     at com.circuitcity.rtvcrms.rules.RtvDecisionEngine .<clinit>(
> > > RtvDecisionEngine.java:48)
> > >     ... 2 more
> > > Caused by: org.drools.rule.InvalidRulePackage: [22,59]: unknown:22:59
> > > Unexpected token '|'[22,89]: unknown:22:89 mismatched token:
> > > [@162,707:707=')',<13>,22:89]; expecting type LEFT_PAREN[33,59]:
> > > unknown:33:59 Unexpected token '|'[33,89]: unknown:33:89 mismatched token:
> > > [@263,1112:1112=')',<13>,33:89]; expecting type LEFT_PAREN[44,59]:
> > > unknown:44:59 Unexpected token '|'[44,89]: unknown:44:89 mismatched token:
> > > [@364,1510:1510=')',<13>,44:89]; expecting type LEFT_PAREN[55,59]:
> > > unknown:55:59 Unexpected token '|'[55,89]: unknown:55:89 mismatched token:
> > > [@465,1924:1924=')',<13>,55:89]; expecting type LEFT_PAREN
> > >     at org.drools.rule.Package.checkValidity(Package.java:409)
> > >     at org.drools.common.AbstractRuleBase.addPackage(
> > > AbstractRuleBase.java:262)
> > >     at com.circuitcity.rtvcrms.rules.RtvDecisionEngine.<clinit>(
> > > RtvDecisionEngine.java:44)
> > >     ... 2 more
> > >
> > > And here is my rules:
> > >
> > > #created on: Jul 7, 2007
> > > package com.circuitcity.rtvcrms.rules
> > >
> > > #list any import classes here.
> > > import java.math.BigDecimal;
> > > import java.math.BigInteger;
> > >
> > > import com.circuitcity.rtvcrms.bw.Constants;
> > > import com.circuitcity.rtvcrms.bw.DocumentTypes;
> > > import com.circuitcity.rtvcrms.bw.StatusConstants;
> > >
> > > import com.circuitcity.rtvcrms.EffectivePrice ;
> > > import com.circuitcity.rtvcrms.RtvHeader;
> > >
> > >
> > > #declare any global variables here
> > >
> > > rule "Line Set Open #1"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.OPEN)
> > >         rtvHeader : RtvHeader( status == StatusConstants.MATCHED | ==
> > > StatusConstants.APPROVAL )
> > >     then
> > >         System.out.println("Line Set Open #1");
> > >         rtvHeader.setStatus (StatusConstants.PARTIALLY_MATCHED);
> > >         update(rtvHeader);
> > > end
> > >
> > > rule "Line Set Open #2"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.OPEN)
> > >         rtvHeader : RtvHeader( status != StatusConstants.MATCHED | !=
> > > StatusConstants.APPROVAL )
> > >     then
> > >         System.out.println("Line Set Open #2");
> > >         rtvHeader.setStatus (StatusConstants.OPEN);
> > >         update(rtvHeader);
> > > end
> > >
> > > rule "Line Set Matched #1"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.MATCHED)
> > >         rtvHeader : RtvHeader( status != StatusConstants.MATCHED | !=
> > > StatusConstants.APPROVAL )
> > >     then
> > >         System.out.println("Line Set Matched #1");
> > >         rtvHeader.setStatus (StatusConstants.PARTIALLY_MATCHED);
> > >         update(rtvHeader);
> > > end
> > >
> > > rule "Line Set Matched #2"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.MATCHED)
> > >         rtvHeader : RtvHeader( status == StatusConstants.MATCHED | ==
> > > StatusConstants.APPROVAL )
> > >     then
> > >         System.out.println("Line Set Matched #2");
> > >         rtvHeader.setStatus (StatusConstants.MATCHED);
> > >         update(rtvHeader);
> > > end
> > >
> > > rule "Line Set Approval #1"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.APPROVAL)
> > >         rtvHeader : RtvHeader( status == StatusConstants.MATCHED )
> > >     then
> > >         System.out.println("Line Set Approval #1");
> > >         rtvHeader.setStatus(StatusConstants.APPROVAL );
> > >         update(rtvHeader);
> > > end
> > >
> > > rule "Line Set Approval #2"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.APPROVAL)
> > >         rtvHeader : RtvHeader( status == StatusConstants.OPEN )
> > >     then
> > >         System.out.println("Line Set Approval #2");
> > >         rtvHeader.setStatus(StatusConstants.PARTIALLY_MATCHED );
> > >         update(rtvHeader);
> > > end
> > >
> > > rule "Line Set Approval #3"
> > >     salience -10
> > >     when
> > >         rtvDetailLine : DetailLine(rtvNumber != null, rtvNumber ==
> > > cmRtvNumber, lineNumber != null, status == StatusConstants.APPROVAL)
> > >         rtvHeader : RtvHeader( status != StatusConstants.OPEN )
> > >     then
> > >         System.out.println("Line Set Approval #3");
> > >         rtvHeader.setStatus(StatusConstants.PARTIALLY_MATCHED );
> > >         update(rtvHeader);
> > > end
> > >
> > >
> > > As another note, the JBoss Rules IDE is NOT reporting any errors with
> > > the syntax.
> > >
> > > On 7/7/07, Ronald R. DiFrango <ron.difrango at gmail.com> wrote:
> > > >
> > > > Answered my own question:
> > > >
> > > > MyObject (status == StatusConstants.MATCHED | ==
> > > > StatusConstants.APPROVAL)
> > > >
> > > > On 7/7/07, Ronald R. DiFrango < ron.difrango at gmail.com> wrote:
> > > > >
> > > > > All,
> > > > >
> > > > > If I remember correctly, in the 4.x version of Drools you were
> > > > > adding an or type syntax where you could compare a value against multiple
> > > > > values.  What is the new syntax for it?
> > > > >
> > > > > I am looking to do something logically like:
> > > > >
> > > > > MyObject (status in ("Open" or "Matched")
> > > > >
> > > > > Ron
> > > > >
> > > >
> > > >
> > >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070707/5af50094/attachment.html 


More information about the rules-users mailing list