[rules-users] Dynamic rule creation
Edson Tirelli
tirelli at post.com
Tue Mar 6 07:01:46 EST 2007
For cases like this, there are several ways of doing. I think the
simplest one is to assert the values you want to reason over as facts.
So, pretent the user is supposed to enter a "threshold" value for
your rule. Assert the threshold the user entered as a Threshold fact:
rule "somerule"
when
Threshold( $threshold : value )
foo : Foo ( level > $threshold )
then
// do something
end
So, in this case you don't need to generate any rule on the fly
(that is much heavier than simply asserting/modifying/retracting facts).
Just keep managing the user parameters as facts. This parameters can
come from user interface, databases, configuration files, etc...
There are other ways, but they require a lot more care (using
globals for instance). So, I strongly recomend the above for the case
you described.
[]s
Edson
seeker wrote:
>How can I create a rule on the fly ?
>
>I have some rules working, and I want the user let chance some values in the
>conditions.
>
>Say I have somthing like
>
>rule "somerule"
> when
> foo : Foo ( a : level -> ( a.floatValue() > 20.0) )
> then
> ...
>
>I want change the "20.0" afterwards to some other value. Is this possible ?
>What do I have to do for that?
>The drools javadocs are not that much helpful on that matter.
>
>Do I have to remove the rule, create a new one and insert it into the
>agendagroup ? Or can I modify a rule?
>What other things does somthing like this imply? (Do I have to reassert all
>facts or something?)
>
>The worst what I can think of is writing all rules including the modified
>one into a new file and start reading the rules-file, creating the
>workingmemory and building my facts once again.
>
>IS there another way?
>
>
--
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
More information about the rules-users
mailing list