> Dan,
>
> This is a feature that is in our to-do list. Jess calls
> it "slot specific
> updates". We did not had the time yet to implement it
> though. :(
>
> []s
> Edson
>
> 2008/11/4 Dan Seaver <
dan.seaver@ge.com>
>
> >
> > Your understanding is very close to what I'm
> looking for. I don't mind
> > having
> > multiple rule activations in other areas of the
> ruleset when the Fact is
> > updated, I just don't want the current rule, the
> one with the update
> > statement, to be reactivated.
> >
> > Accumulate plus no-loop works fine for the specific
> case of updating
> > amounts, but I'd like to have something generic
> for more sophisticated
> > logic
> > that would be implemented in the "then"
> clause.
> >
> > Maybe if there was something that looked specifically
> at each property of
> > the update? In this case, the "when" clause
> is looking at the "name"
> > property and the "then" clause is updating
> the "amount" property. As the
> > "name" is not being changed, then the update
> wouldn't reactivate the rule.
> >
> >
> >
> > Greg Barton wrote:
> > >
> > > If you have the control fact that handles the
> "applied == false"
> > condition
> > > you wouldn't need to prevent reactivation of
> the rule. It would be
> > > handled by the condition.
> > >
> > > I'm thinking Edson's accumulate
> suggestion would be best, at this point.
> > >
> > > If I understand correctly, what you want is this:
> > >
> > > 1) One rule Fact/Charge activation per Charge
> instance, with no
> > > reactivation when the Fact is updated.
> > > 2) Other Fact dependent rule activations when the
> Fact is updated.
> > >
> > > The problem with making (1) happen is that
> you'd still have the matched
> > > Fact being updated once per Charge, which could
> lead to reactivation of
> > > the rules in (2) multiple times, which you may
> not want. If you use
> > > accumulate in the Fact/Charge rule, plus no-loop
> to prevent reactivation,
> > > you get the best of both worlds: single
> activation of the Fact/Charge
> > > rule, with a single update to notify other rules
> that the Fact has
> > > changed.
> > >
> > > I think what you're after is some kind of
> "modify group," where multiple
> > > calls to modify are counted as just one, and
> rules are notified when the
> > > group is closed out. I'm not sure how that
> would be implemented, because
> > > how do you know when the modifications are
> finished? A low priority
> > rule,
> > > possibly? Anyway, it doesn't exist in
> drools, afaik.
> > >
> > > You could do that kind of thing with an
> additional rule that tests for
> > the
> > > nonexistence of an unprocessed Charge, then does
> the update. Adding in
> > > the control fact for tracking Charges:
> > >
> > > rule "Update Amount"
> > > when
> > > amountFact : Fact(name ==
> "Amount")
> > > $charge : Charge()
> > > chargeTracker : ChargeTracker(charge ==
> $charge, applied == false)
> > > then
> > > Double amount = amountFact.getAmount();
> > > Double chargeAmount = charge.getAmount();
> > > amountFact.setAmount(amount +
> chargeAmount);
> > > chargeTracker.setApplied(true);
> > > update(charge);
> > > end
> > >
> > > rule "Close Facts After Charges
> Applied"
> > > no-loop false
> > > when
> > > amountFact : Fact(name ==
> "Amount")
> > > not ChargeTracker(applied == false)
> > > then
> > > update(amountFact);
> > > end
> > >
> > > You'd probablt also have to prevent the
> "Close Facts" rule from firing
> > > when there's just no ChargeTrackers in
> working memory, too.
> > >
> > > Give that a try.
> > >
> > > --- On Tue, 11/4/08, Dan Seaver
> <
dan.seaver@ge.com> wrote:
> > >
> > >> From: Dan Seaver <
dan.seaver@ge.com>
> > >> Subject: Re: [rules-users] Chart notation,
> update, and infinite loops
> > >> To:
rules-users@lists.jboss.org
> > >> Date: Tuesday, November 4, 2008, 1:55 PM
> > >> Greg,
> > >> 1) Yes, in this case I'm looking for the
> cartesian
> > >> join.
> > >> 2) No, I can't add a property to Charge
> as it's
> > >> part of our corp Object
> > >> Model.
> > >>
> > >> However, I could create a third object that
> manages whether
> > >> the Charge has
> > >> been processed which works just fine. Unless
> there is a
> > >> simpler strategy /
> > >> technique, I'll go with that.
> > >>
> > >> Do you know of any way to keep the rule from
> being put back
> > >> on the agenda
> > >> when amountFact is updated? I want other
> rules to know that
> > >> it's been
> > >> updated, just not the rule that made the
> change.
> > >>
> > >> Dan
> > >>
> > >>
> > >> Greg Barton wrote:
> > >> >
> > >> > 1) Do you want to apply all Charges in
> working memory
> > >> to all "Amount"
> > >> > Facts? I ask because the rule is a
> cartesian join
> > >> (i.e. no relation
> > >> > between matched objects) and that
> sometimes performs
> > >> in ways users don't
> > >> > expect. (i.e. all combinations of
> objects that match
> > >> the conditions are
> > >> > affected by the rule)
> > >> > 2) Can you add a property to the Charge
> object? Then
> > >> you could use a
> > >> > boolean named "applied" to
> prevent future
> > >> matches.
> > >> >
> > >> > Rule "Update Amount"
> > >> > when
> > >> > amountFact : Fact(name ==
> "Amount")
> > >> > charge : Charge(applied == false)
> > >> > then
> > >> > Double amount =
> amountFact.getAmount();
> > >> > Double chargeAmount =
> charge.getAmount();
> > >> > amountFact.setAmount(amount +
> chargeAmount);
> > >> > update(amountFact);
> > >> > charge.setApplied(true);
> > >> > update(charge);
> > >> > end
> > >> >
> > >> > If a charge could be applied to multiple
> Facts you
> > >> could maintain an
> > >> > "appliedTo" list of Facts in
> the Charge, and
> > >> check that instead of a
> > >> > simple boolean.
> > >> >
> > >> > --- On Tue, 11/4/08, Dan Seaver
> > >> <
dan.seaver@ge.com> wrote:
> > >> >
> > >> >> From: Dan Seaver
> <
dan.seaver@ge.com>
> > >> >> Subject: [rules-users] Chart
> notation, update, and
> > >> infinite loops
> > >> >> To:
rules-users@lists.jboss.org
> > >> >> Date: Tuesday, November 4, 2008,
> 11:50 AM
> > >> >> I'm trying to find a good
> technique for
> > >> updating
> > >> >> specific facts in working
> > >> >> memory. What I'm currently doing
> is something
> > >> like
> > >> >> this:
> > >> >>
> > >> >> Rule "Update Amount"
> > >> >> when
> > >> >> amountFact : Fact(name ==
> > >> "Amount")
> > >> >> charge : Charge()
> > >> >> then
> > >> >> Double amount =
> amountFact.getAmount();
> > >> >> Double chargeAmount =
> charge.getAmount();
> > >> >> amountFact.setAmount(amount +
> chargeAmount);
> > >> >> update(amountFact);
> > >> >> end
> > >> >>
> > >> >> The update statement causes an
> infinite loop.
> > >> >> I tried using no-loop, which works
> if there is 1
> > >> charge,
> > >> >> but not if there
> > >> >> are more than one.
> > >> >>
> > >> >> Any help with solutions or
> strategies would be
> > >> much
> > >> >> appreciated.
> > >> >> --
> > >> >> View this message in context:
> > >> >>
> > >>
> >
>
http://www.nabble.com/Chart-notation%2C-update%2C-and-infinite-loops-tp20327483p20327483.html
> > >> >> Sent from the drools - user mailing
> list archive
> > >> at
> > >> >> Nabble.com.
> > >> >>
> > >> >>
> _______________________________________________
> > >> >> rules-users mailing list
> > >> >>
rules-users@lists.jboss.org
> > >> >>
> > >>
>
https://lists.jboss.org/mailman/listinfo/rules-users
> > >> >
> > >> >
> > >> >
> > >> >
> _______________________________________________
> > >> > rules-users mailing list
> > >> >
rules-users@lists.jboss.org
> > >> >
>
https://lists.jboss.org/mailman/listinfo/rules-users
> > >> >
> > >> >
> > >>
> > >> --
> > >> View this message in context:
> > >>
> >
>
http://www.nabble.com/Chart-notation%2C-update%2C-and-infinite-loops-tp20327483p20329780.html
> > >> Sent from the drools - user mailing list
> archive at
> > >> Nabble.com.
> > >>
> > >>
> _______________________________________________
> > >> rules-users mailing list
> > >>
rules-users@lists.jboss.org
> > >>
>
https://lists.jboss.org/mailman/listinfo/rules-users
> > >
> > >
> > >
> > > _______________________________________________
> > > rules-users mailing list
> > >
rules-users@lists.jboss.org
> > >
>
https://lists.jboss.org/mailman/listinfo/rules-users
> > >
> > >
> >
> > --
> > View this message in context:
> >
>
http://www.nabble.com/Chart-notation%2C-update%2C-and-infinite-loops-tp20327483p20334594.html
> > Sent from the drools - user mailing list archive at
> Nabble.com.
> >
> > _______________________________________________
> > rules-users mailing list
> >
rules-users@lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/rules-users
> >
>
>
>
> --
> Edson Tirelli
> JBoss Drools Core Development
> JBoss, a division of Red Hat @
www.jboss.com
> _______________________________________________
> rules-users mailing list
>
rules-users@lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users