[rules-users] Smart Templates

Wolfgang Laun wolfgang.laun at gmail.com
Wed Jun 1 05:31:26 EDT 2011


There is a way, provided the required information is available at the time
the rule is created.

There is a detailed section in the Expert manual explaining how to call
template expansion with either a Collection of Map objects or a Collection
of JavaBean objects. Taking beans, you would have

ServiceBean( String name, String value )
String getName
String getValue
String getType(){
   if( "AAA".equals( value ) ) return "Type1";
   if( "XYZ".equals( value ) ) return "Type2";
   ...
}

You create a collection of such Objects, and call the expander for a
template like this:

rule "DC_@{row.rowNumber}"
when
    $service: Service(name == "@{service}", value == "@{value}")
    $riskType: RiskType()
then
    $riskType.setName("@{type}");
    $riskType.setAtt(0,"@{value}");
end

-W



2011/6/1 ChrisMu <christopher.mullard at credit-suisse.com>

> So in essence, there's no way to use a function to insert a string literal
> into a rule from a template?
>
>  ------------------------------
> *From:* FrankVhh [via Drools] [mailto:[hidden email]<http://user/SendEmail.jtp?type=node&node=3009838&i=0>]
>
> *Sent:* 31 May 2011 17:20
> *To:* Mullard, Christopher
> *Subject:* RE: Smart Templates
>
> But then that would call the service.getType() method when the rule is
> run wouldn't it?
> -> Yes
>
> I'm trying create explicit, simple rules to avoid doing extra work when
> running data through them.
> -> OK, in essence, I like that :-)
>
> How would you use a rule to set the value within another rule?
> -> I am not sure that I follow you here...
> If you want to avoid to execute the getType()-service at rule execution,
> then you would need to add an attribute name to your object, and call
> getType() before creating the rules.
>
> Alternatively, you can insert an intermediate value whose value will be set
> by another rule and then use this intermediate value in your DC rules.
>
> When
> Service(value = "AAA")
> Then
> String name = "Type1";
> insert(name);
>
> Something like this... but make sure not to create a loop :-)
>
> Regards,
> Frank
>
>  ChrisMu wrote:
> But then that would call the service.getType() method when the rule is
> run wouldn't it?
>
> I'm trying create explicit, simple rules to avoid doing extra work when
> running data through them.
>
> How would you use a rule to set the value within another rule?
>
> Thanks
> Chris
>
> ________________________________
>
> From: FrankVhh [via Drools]
> [mailto:[hidden email]<http://user/SendEmail.jtp?type=node&node=3006773&i=0>]
>
> Sent: 31 May 2011 16:48
> To: Mullard, Christopher
> Subject: Re: Smart Templates
>
>
> Hi,
>
> The way I see it, this is the way your template should look like. I do
> not see the need to use eval() at all.
>
> rule "DC_0"
> when
>     $service: Service(name == "@{service}", value == "@{value}")
>     $riskType: RiskType()
> then
>     $riskType.setName($service.getType("@{value}"));
>     $riskType.setAtt(0,"@{value}");
> end
>
> I am assuming that RiskType is already inserted in WM, but you could
> just as well create a new object in the then-part of the rule.
>
> In stead of using the java-function to determine the name, you might
> actually just as well create an other rule that sets the name according
> to the value, thus putting the entire decision logic in rules.
>
> Hope this helps.
>
> Regards,
> Frank
>
>
>
>         ChrisMu wrote:
>         Hi,
>
>          I'm trying to get a template (.drt) to generate 2 rules (.drl)
> from 2 datasets but by doing a little bit more work than direct
> substitution.
>
>         Data (service,value):
>         DC, AAA
>         DC, XYZ
>
>         Idea for the template - if value is of type1 then create Type
> object with 'Type1' as name. If value is of type2, use 'Type2' as name:
>
>         rule "DC_@{row.rowNumber}"
>         when
>             Service(name == "DC")
>         then
>             Type.setName(eval(Service.getType(@{value})))
>             Type.setAtt(0,@{value})
>         end template
>
>         eval(Service.getType(@{arg0})) should take 'AAA' or 'XYZ' etc as
> arg and return a string Type1/Type2 etc.
>
>         This would then generate 2 rules that look like:
>
>         rule "DC_0"
>         when
>             Service(name == "DC", value == "AAA")
>         then
>             RiskType.setName("Type1")
>             RiskType.setAtt(0,"AAA")
>
>         rule "DC_1"
>         when
>             Service(name == "DC", value == "XYZ")
>         then
>             RiskType.setName("Type2")
>             RiskType.setAtt(0,"XYZ")
>
>         ...is this possible at all? I'm trying to avoid the eval step
> being done in the actual rule (.drl) .
>
>         Thanks
>
>         Chris
>
>
>
> ________________________________
>
> If you reply to this email, your message will be added to the discussion
> below:
> http://drools.46999.n3.nabble.com/Smart-Templates-tp3006479p3006589.html
>
> To unsubscribe from Smart Templates, click here
> <http://drools.46999.n3.nabble.com/template/NamlServlet.jtp?macro=unsubs
> cribe_by_code&node=3006479&code=Y2hyaXN0b3BoZXIubXVsbGFyZEBjcmVkaXQtc3Vp
> c3NlLmNvbXwzMDA2NDc5fDE5NzczMDY1MzE=> .
>
> ===============================================================================
>
> Please access the attached hyperlink for an important electronic
> communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ===============================================================================
>
>
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
> http://drools.46999.n3.nabble.com/Smart-Templates-tp3006479p3006773.html
> To unsubscribe from Smart Templates, click here.
>
>
> ==============================================================================
> Please access the attached hyperlink for an important electronic
> communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>
> ==============================================================================
>
>
> ------------------------------
> View this message in context: RE: Smart Templates<http://drools.46999.n3.nabble.com/Smart-Templates-tp3006479p3009838.html>
> Sent from the Drools: User forum mailing list archive<http://drools.46999.n3.nabble.com/Drools-User-forum-f47000.html>at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110601/83840771/attachment.html 


More information about the rules-users mailing list