Edson,
Thanks for the tip - you are right - 'return' keyword should not be used -
got to this one by trial & error just before I saw your reply :). The
problem is that the only 'public' docs available on the new functionality
(Wiki 3.1 release notes:
http://wiki.jboss.org/wiki/Wiki.jsp?page=3.1M1ReleaseNotes) gives the
example of 'accumulate' keyword where 'return' keyword IS used in the
'result' section! So, I guess this needs to be updated?..
Interestingly, "eval ($count < 4)" DOES work correctly and as expected! So,
I guess that's an extra feature? :)
Thanks for the example on how to avoid eval altogether - already tried it
and it works like a charm! Nice functionality! Would it be worth it to
include this in Wiki?
Thanks,
Vlad
-----Original Message-----
From: rules-users-bounces(a)lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Edson Tirelli
Sent: 06 March 2007 16:19
To: Rules Users List
Subject: Re: [rules-users] what's wrong with this rule?...
Vlad,
You should not use the "return" keyword and the ";" inside the result
block as it is implicit. Also, remember that anything inside eval() is
pure java code, so you cant do $count < 4 if $count is an Integer object.
Finally, try to always avoid eval() when writing rules.
Try something like:
*rule* "FG.23C"
*when*
*exists*
Record( $psc : psc == "323",
pa == "7[0-9]*",
sa == "F39040"
|== "F38010"
|== "F38090" )
$count : Integer( intValue < 4 ) *from* *accumulate *(
Record( psc == "323",
pa *matches* "8[0-9]995",
sa *matches* "F390[4-8][2-5]" ),
init ( *int* count = 0; ),
action( count += count; ),
result( *new* Integer(count) )
)
*then*
System.out.println( "rule FC.23C has failed" );
System.out.println();
*end*
**
Please, let me know if it works.
[]s
Edson
Olenin, Vladimir (MOH) wrote:
Hi,
I have the following rule:
*rule* "FG.23C"
*when*
*exists*
Record( $psc : psc == "323",
pa == "7[0-9]*",
sa == "F39040"
|== "F38010"
|== "F38090" )
$count : Integer() *from* *accumulate *(
Record( psc == "323",
pa *matches* "8[0-9]995",
sa *matches* "F390[4-8][2-5]" ),
init ( *int* count = 0; ),
action( count += count; ),
result( *return* *new* Integer(count); )
)
*eval* ($count < 4 )
*then*
System.out.println( "rule FC.23C has failed" );
System.out.println();
*end*
* *
And for some reason I can't compile correctly: I'm getting the
following error:
org.drools.rule.InvalidRulePackage: Rule Compilation error This method
must return a result of type Integer Syntax error on token "(", ;
expected Syntax error on token ")", delete this token
at org.drools.rule.Package.checkValidity(_Package.java:367_)
at
org.drools.common.AbstractRuleBase.addPackage(_AbstractRuleBase.java:244_)
at moh.ohfs.rules.RulesTest.readRule(_RulesTest.java:70_)
at moh.ohfs.rules.RulesTest.main(_RulesTest.java:22_)
All brackets seem to be matching.... This happens on 3.1M build.
Thanks,
Vlad
------------------------------------------------------------------------
_______________________________________________
rules-users mailing list
rules-users(a)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(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users