Quantcast

[rules-users] Using 'from {x}.field' in DSL

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

[rules-users] Using 'from {x}.field' in DSL

Sandjaja, Dominik
Using 'from {x}.field' in DSL

I have the following Drools DSL "sentence":

    [when]The field {field} in the module {module} contains value {value}=$a : {module} ( {field} != null)

          String( this.equalsIgnoreCase("{value}") ) from $a.{field}

where the `field` is a `Set` of Strings.

Now, if I have two of these sentences in one rule, it obviously won't work as the variable `$a` occurs twice. So I wanted to improve the rule to make the variable, well, variable:

    [when]The field {field} in the module {module} contains value {value} as {a}={a} : {module} ( {field} != null)

          String( this.equalsIgnoreCase("{value}") ) from {a}.{field}

This doesn't work, I can't use the part `{a}.`, that breaks.

So, my questions are: Is there either a way to rewrite the rules or a way to allow the `{variable}.` notation to work? Alternatively, is there a `contains` operator which works case insensitive?

Thanks in advance

Dominik


_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: [rules-users] Using 'from {x}.field' in DSL

laune
Have you checked the expanded DRL? What does this line look like?

-W

On 12 June 2012 17:06, Sandjaja, Dominik <[hidden email]> wrote:

I have the following Drools DSL "sentence":

    [when]The field {field} in the module {module} contains value {value}=$a : {module} ( {field} != null)

          String( this.equalsIgnoreCase("{value}") ) from $a.{field}

where the `field` is a `Set` of Strings.

Now, if I have two of these sentences in one rule, it obviously won't work as the variable `$a` occurs twice. So I wanted to improve the rule to make the variable, well, variable:

    [when]The field {field} in the module {module} contains value {value} as {a}={a} : {module} ( {field} != null)

          String( this.equalsIgnoreCase("{value}") ) from {a}.{field}

This doesn't work, I can't use the part `{a}.`, that breaks.

So, my questions are: Is there either a way to rewrite the rules or a way to allow the `{variable}.` notation to work? Alternatively, is there a `contains` operator which works case insensitive?

Thanks in advance

Dominik


_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users



_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: [rules-users] Using 'from {x}.field' in DSL

Sandjaja, Dominik

There is no expanded DRL. If I take that line into the DSL, I can’t even validate the DSL and if I have the line in it, I can’t select any DSL statements for rules in Guvnor.

 

BTW, I am using Drools and Guvnor 5.4.0.

 

Von: [hidden email] [mailto:[hidden email]] Im Auftrag von Wolfgang Laun
Gesendet: Dienstag, 12. Juni 2012 17:31
An: Rules Users List
Betreff: Re: [rules-users] Using 'from {x}.field' in DSL

 

Have you checked the expanded DRL? What does this line look like?

-W

On 12 June 2012 17:06, Sandjaja, Dominik <[hidden email]> wrote:

I have the following Drools DSL "sentence":

    [when]The field {field} in the module {module} contains value {value}=$a : {module} ( {field} != null)

          String( this.equalsIgnoreCase("{value}") ) from $a.{field}

where the `field` is a `Set` of Strings.

Now, if I have two of these sentences in one rule, it obviously won't work as the variable `$a` occurs twice. So I wanted to improve the rule to make the variable, well, variable:

    [when]The field {field} in the module {module} contains value {value} as {a}={a} : {module} ( {field} != null)

          String( this.equalsIgnoreCase("{value}") ) from {a}.{field}

This doesn't work, I can't use the part `{a}.`, that breaks.

So, my questions are: Is there either a way to rewrite the rules or a way to allow the `{variable}.` notation to work? Alternatively, is there a `contains` operator which works case insensitive?

Thanks in advance

Dominik


_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users

 


_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: [rules-users] Using 'from {x}.field' in DSL

laune
There is a bug in the DSL parser: after '=', a couple of variable
references merely separated by a period isn't recognized.

As a workaround, use this:

[when][]The field {field} in the module {module} contains value
{value} as {abc} =
     {abc}x : {module} ( {field} != null) String(
this.equalsIgnoreCase("{value}") ) from {abc}x.{field}

-W


On 12/06/2012, Sandjaja, Dominik <[hidden email]> wrote:

> There is no expanded DRL. If I take that line into the DSL, I can't even
> validate the DSL and if I have the line in it, I can't select any DSL
> statements for rules in Guvnor.
>
>
>
> BTW, I am using Drools and Guvnor 5.4.0.
>
>
>
> Von: [hidden email]
> [mailto:[hidden email]] Im Auftrag von Wolfgang
> Laun
> Gesendet: Dienstag, 12. Juni 2012 17:31
> An: Rules Users List
> Betreff: Re: [rules-users] Using 'from {x}.field' in DSL
>
>
>
> Have you checked the expanded DRL? What does this line look like?
>
> -W
>
> On 12 June 2012 17:06, Sandjaja, Dominik <[hidden email]>
> wrote:
>
> I have the following Drools DSL "sentence":
>
>     [when]The field {field} in the module {module} contains value
> {value}=$a : {module} ( {field} != null)
>
>           String( this.equalsIgnoreCase("{value}") ) from $a.{field}
>
> where the `field` is a `Set` of Strings.
>
> Now, if I have two of these sentences in one rule, it obviously won't
> work as the variable `$a` occurs twice. So I wanted to improve the rule
> to make the variable, well, variable:
>
>     [when]The field {field} in the module {module} contains value
> {value} as {a}={a} : {module} ( {field} != null)
>
>           String( this.equalsIgnoreCase("{value}") ) from {a}.{field}
>
> This doesn't work, I can't use the part `{a}.`, that breaks.
>
> So, my questions are: Is there either a way to rewrite the rules or a
> way to allow the `{variable}.` notation to work? Alternatively, is there
> a `contains` operator which works case insensitive?
>
> Thanks in advance
>
> Dominik
>
>
> _______________________________________________
> rules-users mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: [rules-users] Using 'from {x}.field' in DSL

Sandjaja, Dominik
Hello Wolfgang, hello everybody,

Nice one, thanks for the idea! This one works for now, but is there a way to automatically assign random variable names to the RHS of the DSL? So the user won't have to explicitly set a variable in the DSL which is only needed for internal purposes.

Thanks
Dominik

-----Ursprüngliche Nachricht-----
Von: [hidden email] [mailto:[hidden email]] Im Auftrag von Wolfgang Laun
Gesendet: Dienstag, 12. Juni 2012 19:46
An: Rules Users List
Cc: Edson Tirelli
Betreff: Re: [rules-users] Using 'from {x}.field' in DSL

There is a bug in the DSL parser: after '=', a couple of variable references merely separated by a period isn't recognized.

As a workaround, use this:

[when][]The field {field} in the module {module} contains value {value} as {abc} =
     {abc}x : {module} ( {field} != null) String(
this.equalsIgnoreCase("{value}") ) from {abc}x.{field}

-W


On 12/06/2012, Sandjaja, Dominik <[hidden email]> wrote:

> There is no expanded DRL. If I take that line into the DSL, I can't
> even validate the DSL and if I have the line in it, I can't select any
> DSL statements for rules in Guvnor.
>
>
>
> BTW, I am using Drools and Guvnor 5.4.0.
>
>
>
> Von: [hidden email]
> [mailto:[hidden email]] Im Auftrag von Wolfgang
> Laun
> Gesendet: Dienstag, 12. Juni 2012 17:31
> An: Rules Users List
> Betreff: Re: [rules-users] Using 'from {x}.field' in DSL
>
>
>
> Have you checked the expanded DRL? What does this line look like?
>
> -W
>
> On 12 June 2012 17:06, Sandjaja, Dominik
> <[hidden email]>
> wrote:
>
> I have the following Drools DSL "sentence":
>
>     [when]The field {field} in the module {module} contains value
> {value}=$a : {module} ( {field} != null)
>
>           String( this.equalsIgnoreCase("{value}") ) from $a.{field}
>
> where the `field` is a `Set` of Strings.
>
> Now, if I have two of these sentences in one rule, it obviously won't
> work as the variable `$a` occurs twice. So I wanted to improve the
> rule to make the variable, well, variable:
>
>     [when]The field {field} in the module {module} contains value
> {value} as {a}={a} : {module} ( {field} != null)
>
>           String( this.equalsIgnoreCase("{value}") ) from {a}.{field}
>
> This doesn't work, I can't use the part `{a}.`, that breaks.
>
> So, my questions are: Is there either a way to rewrite the rules or a
> way to allow the `{variable}.` notation to work? Alternatively, is
> there a `contains` operator which works case insensitive?
>
> Thanks in advance
>
> Dominik
>
>
> _______________________________________________
> rules-users mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users

_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: [rules-users] Using 'from {x}.field' in DSL

laune
On 13/06/2012, Sandjaja, Dominik <[hidden email]> wrote:
> Hello Wolfgang, hello everybody,
>
> Nice one, thanks for the idea! This one works for now, but is there a way to
> automatically assign random variable names to the RHS of the DSL? So the
> user won't have to explicitly set a variable in the DSL which is only needed
> for internal purposes.

This is one thing I've occasionally missed, too, in my experiments
with DSLs. It wouldn't be too difficult to add, and patch/pull
requests are always welcome with the Drools team.

If at least one of the variables differs between repeated uses of the
DSL phrase, you might consider using this text (if its characters are
always suitable!) as part of the binding variable name, e.g.

 [when][]The field {field} in the module {module} contains value {value}=
      {value}Obj : {module} ( {field} != null) String(
this.equalsIgnoreCase( "{value}" )  ) from {value}Obj.{field}

BTW, consider defining a custom operator which would let you write the
much simpler pattern
   Module( field spells "value" )
You can make a trivial clone from the implementation of "contains",
shouldn't take more than 5 minutes ;-)   Some hints can be found at
http://members.inode.at/w.laun/drools/CustomOperatorHowTo.html

Cheers
-W


>
> Thanks
> Dominik
>
> -----Ursprüngliche Nachricht-----
> Von: [hidden email]
> [mailto:[hidden email]] Im Auftrag von Wolfgang Laun
> Gesendet: Dienstag, 12. Juni 2012 19:46
> An: Rules Users List
> Cc: Edson Tirelli
> Betreff: Re: [rules-users] Using 'from {x}.field' in DSL
>
> There is a bug in the DSL parser: after '=', a couple of variable references
> merely separated by a period isn't recognized.
>
> As a workaround, use this:
>
> [when][]The field {field} in the module {module} contains value {value} as
> {abc} =
>      {abc}x : {module} ( {field} != null) String(
> this.equalsIgnoreCase("{value}") ) from {abc}x.{field}
>
> -W
>
>
> On 12/06/2012, Sandjaja, Dominik <[hidden email]> wrote:
>> There is no expanded DRL. If I take that line into the DSL, I can't
>> even validate the DSL and if I have the line in it, I can't select any
>> DSL statements for rules in Guvnor.
>>
>>
>>
>> BTW, I am using Drools and Guvnor 5.4.0.
>>
>>
>>
>> Von: [hidden email]
>> [mailto:[hidden email]] Im Auftrag von Wolfgang
>> Laun
>> Gesendet: Dienstag, 12. Juni 2012 17:31
>> An: Rules Users List
>> Betreff: Re: [rules-users] Using 'from {x}.field' in DSL
>>
>>
>>
>> Have you checked the expanded DRL? What does this line look like?
>>
>> -W
>>
>> On 12 June 2012 17:06, Sandjaja, Dominik
>> <[hidden email]>
>> wrote:
>>
>> I have the following Drools DSL "sentence":
>>
>>     [when]The field {field} in the module {module} contains value
>> {value}=$a : {module} ( {field} != null)
>>
>>           String( this.equalsIgnoreCase("{value}") ) from $a.{field}
>>
>> where the `field` is a `Set` of Strings.
>>
>> Now, if I have two of these sentences in one rule, it obviously won't
>> work as the variable `$a` occurs twice. So I wanted to improve the
>> rule to make the variable, well, variable:
>>
>>     [when]The field {field} in the module {module} contains value
>> {value} as {a}={a} : {module} ( {field} != null)
>>
>>           String( this.equalsIgnoreCase("{value}") ) from {a}.{field}
>>
>> This doesn't work, I can't use the part `{a}.`, that breaks.
>>
>> So, my questions are: Is there either a way to rewrite the rules or a
>> way to allow the `{variable}.` notation to work? Alternatively, is
>> there a `contains` operator which works case insensitive?
>>
>> Thanks in advance
>>
>> Dominik
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> [hidden email]
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>
>>
> _______________________________________________
> rules-users mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/rules-users
>
> _______________________________________________
> rules-users mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/rules-users
>

_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
Loading...