If you are expanding the template with data taken from anywhere
you have the option of processing that data before you pass it
to the expander. Section 2.5.2., Expanding a Template, explains
how to do this. This is the option you have for implementing
specific processing.

The problem with data in a spreadsheet is that it doesn't have
much of a data type along with it, so an entry such as x,y,z
could be any of these: one string value, a list of numbers, a list
of three string values, with quotes omitted, a list of enums, and so on.

-W



On 14/06/2013, Jason Allen <[email protected]> wrote:
> Thanks for the reply Wolfgang.
>
> I chose to use the template because I liked the idea of separating the rule
> definition from the rule data.  Just seemed intuitive to me.  Overall, I'm
> new to Drools, so not sure if that is the best choice or not.
>
> I think your approach works if my spreadsheet has all the items separated
> with commas and double quotes.  Because then it's just referring to the
> field as a simple string field, not an array of values.
>
> When the field is in the spreadsheet as: Austria, Germany, Switzerland it
> needs to be handled as an array, otherwise it will build the generated rule
> as: Country(name in (Austria, Germany, Switzerland)) and fail compile
> because it's missing the quotes.  If you use "@{country}) it will put
> ("Austria, Germany, Switzerland"), when you really need ("Austria",
> "Germany", "Switzerland")
>
> Maybe I'll just embed the double quotes in the spreadsheet and call it a
> day, instead of fighting the field as an array of values.
>
> If you have any other thoughts, let me know!
>
> Thanks,
> Jason.
>
>
> On Jun 14, 2013, at 1:33 PM, Wolfgang Laun <[email protected]> wrote:
>
>> In the spreadsheet (with class Country) you would have a column such as:
>> CONDITION
>> Country
>> name in ( $param )
>> Test whether name is one from a given set
>>  "Austria", "Germany", "Switzerland"
>>  "France", "Canada", "Belgium"
>>
>> This is the generated rule:
>>
>> rule "InTest_18"
>>      when
>>              $country: Country(name in ( "Austria","Germany","Switzerland" ))
>>      then
>>              System.out.println( "German is spoken" );
>> end
>>
>> You should be able to retrofit the template from this. (Why do you
>> need a template when you have a spreadsheet?)
>>
>> -W
>>
>>
>>
>> On 14/06/2013, Jason Allen <[email protected]> wrote:
>>> Hi All,
>>>
>>> I'm trying to determine if it's possible to process arrays of data using
>>> Rule Templates.  An example of what I'm trying to accomplish.
>>>
>>> Spreadsheet of rules, with one of the columns being valid colors.  Valid
>>> colors contains comma separated data and is variable length.
>>>
>>> For example
>>>
>>> It might contain: "Blue, Green, Red" or "Blue", or "Red, Green, Purple,
>>> Silver"  Any number of entries.
>>>
>>> I then need to process incoming fact values against this list of colors,
>>> using either CONTAINS or IN.
>>>
>>> For example:
>>>
>>> template header
>>> desc
>>> valid_colors[]
>>>
>>> package org.drools.examples.templates
>>>
>>> global com.sample.Product product;
>>>
>>> template "ColorTestTemplate"
>>>
>>> rule "ColorRule_@{row.rowNumber}"
>>> when
>>>     product1 : Product (Color in @{valid_colors});
>>> then
>>>     product1.setDesc("@{desc}");
>>> end
>>> end template
>>>
>>> I know the following doesn't work: product1 : Product (Color in
>>> @{valid_colors});
>>>
>>> However, I wanted to depict what I'm trying to accomplish.
>>>
>>> The challenge is with valid_colors being a variable length array, I
>>> can't
>>> refer to the individual values using constants i.e. valid_colors0,
>>> valid_colors1, valid_colors3, etc to build my array list.
>>>
>>> ie Color in ("@{valid_colors0}", "@{valid_colors1}", "@{valid_colors2}")
>>>
>>> Is there a way to iterate through a variable length array in a template?
>>>
>>> Any thoughts on how I could build an array list i.e. ("Blue", "Green",
>>> "Red") when the column contains a variable length array?
>>>
>>> Thanks in advance,
>>> Jason
>> _______________________________________________
>> rules-users mailing list
>> [email protected]
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> _______________________________________________
> rules-users mailing list
> [email protected]
> https://lists.jboss.org/mailman/listinfo/rules-users
>
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to