Working memory breakdown: the from clause
We've seen how rule conditions are written. So far, all these conditions have filtered data that was inserted in our KieSession
(that is, inserted in the working memory). However, in some situations, we might need to check special conditions on collections that are different from the working memory, such as attributes of some objects, global variables, or subsets of the working memory itself that we can create dynamically. To be able to do so, Drools provides the from
clause, which we can be used to define a specific search space outside of the working memory.
The following rule is a simple example of how we can use the from
clause to look for specific attributes:
rule "For every notebook order apply points coupon" when $o: Order($c: customer, $lines: orderLines) OrderLine($item: item) from $lines Item(name == "notebook") from $item then insert(new Coupon($c, $o, CouponType.POINTS)); end
The previous rule looks...