Hallo,
I was wondering if it's possible to create a rule that can only be
activated once. So if at a certain point the LHS is matching, it will be
fired and deactivated immediately, so the rule never ever gets fired for
the object it has updated, no matter if the LHS will matches after a few
updates()'s at a later time.
The only way I can achieve this, is by manually evaluating in the LHS if
the certain object has the certain values I am gonna set in the RHS, so
if it has, I don't fire the rule. But this takes some unnessery time and
I was wondering if it couldn't be more easier/faster.
Example:
----------------------------------------------------
$product : Product(title matches "(?i).*SOMEWORD.*", $productClasses :
productClasses)
$activated : Boolean(booleanValue == false)
from accumulate($productClass : ProductClass(
schema.code == "DROOLS", code == "012345" ) from $productClasses,
init(boolean activated = false;),
action( activated = true;),
result( activated ) )
then
Set the schema and code of the product
update($product)
----------------------------------------------------
So in the example above I am actually iterating over all the
productClasses of the product and checking if they have the right codes.
If I actually could just fire the rule on all the products
whose title matches "(?i).*SOMEWORD.*", and deactivate the rule for the
instance of the $product, I wouldn't have to accumulate over the list of
productClasses of the product to see if the rule
was fired before for this particulare product.
The "no-loop" attribute doesn't work here, because it gets ignored when
another rule updates the product. So when this rule has fired, and
updated the product, some other rule gets activated and updates the
product, and than this rule gets fired, because the LHS still matches.
Any help is welcome,
Waruzjan