Edson Tirelli was heard to exclaim, On 12/05/06 04:14:
> JBRules is working correctly in this case.
> The syntax for any operator is always:
> [bindingVar :] <fieldName> <operator> <value>
OK. However, I still think that what I'm trying to do is reasonable. Using
the above syntax, I want to write:
[bindingVar :] <fieldName> memberOf <someCollection>
Is there any reason that this would be difficult or foolish to implement? Not
that I expect it to appear in the next release, I'm just wondering if it's
something that should be available someday.
> JBRules will try to find field "$things" in class Record, that
> obviously does not exists, returning the error saying it can't create
> the field extractor (on a side note, maybe we can improve the error
> message... suggestions welcome).
The parser error messages are often extremely confusing, but this is one of
the better ones.
> Unfortunatelly, I can't think of another way (based only on the
> information you provided) to do it, except this:
> collect( Record( num : number -> ( $rlis.contains(num) ) ) )
> Please note that if the container is the one changing it's contents,
> you should need to only modify the container, not each record object.
The docs for predicate constraints (3.17) say
"Functions used in a Predicate Constraint must return time constant results."
And this certainly isn't time constant. Or does drools pay attention to what
goes into the predicate, and re-evaluate it accordingly?
> Dirk Bergstrom wrote:
>
>>I have a container class that has a field that exposes a collection of record
>>numbers. In the working memory, I have a bunch of record objects, and one
>>container object. I want to write a rule that fires when it encounters a
>>container that has records matching some criteria. Here's what I thought
>>would work:
>>
>>1 when
>>2 Container( $things : things -> ( $things.size() > 0 ) )
>>3 $count : ArrayList( size > 0 ) from
>>4 collect( Record( $things contains number, otherfield == "somevalue" ) )
>>5 then
>>6 ...
>>
>>Unfortunately, that gets me an error:
>>
>> InvalidRulePackage: Unable to create Field Extractor for '$things'
>>
>>(I determined that the problem is in line 4)
>>
>>Seems to me that what I'm doing is reasonable, and ought to work. Is this a
>>bug, an oversight in drools, or is it in fact unreasonable?
>>
>>The following "works":
>>
>> collect( Record( num : number -> ( $rlis.contains(num) ) ) )
>>
>>But since the predicate is not time-constant (the list of things in the
>>Container will change), I'd have to modify() every Record every time I wanted
>>to re-run the rules. That would not be very performant...
>>
>>Note that this is actually unrelated to "collect" -- this doesn't work either:
>>
>>1 when
>>2 Container( $things : things )
>>3 Record( $things contains number )
>>4 then
>>
>>(I'm using trunk, revision 8056, updated this morning)
>>
>>
>>
>
>
--
Dirk Bergstrom [EMAIL PROTECTED]
_____________________________________________
Juniper Networks Inc., Computer Geek
Tel: 408.745.3182 Fax: 408.745.8905
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email