Hi,
I have two objects in my domain. Customer and Item objects. Each item has a
unique item code. The goal is to group item objects based on the item code.
So, as soon as I receive an item from a customer, I run my rule to find out
2 things: 1) If the customer already has an item with the same item code. If
so, I just update the item with the new quantity 2) If customer does not
have the item type, I create a new item of that type under that customer
object.
To differentiate between the incoming item and the one that is already
grouped, I have a IncomingItem and GroupedItem object type. Customer
contains a list of grouped items.
Customer, groupedItems and incomingItems are a part of my working memory. I
compare incoming Item against the grouped Item of customer to determine what
i need to do. Following are the two rules that does that for me:
rule "Item Exist"
salience 100
when
incomingItem : IncomingItem()
customer : Customer( $groupedItems: groupedItems ->
($groupedItems.containsKey(incomingItem.item)))
then
customer.updatedGroupedItem(incomingItem);
end
rule "Item Does Not Exist"
salience 90
when
incomingItem: IncomingItem()
customer : Customer( $groupedItems: groupedItems ->
($groupedItems.containsKey(incomingItem.item)
== false))
then
System.out.println("Executing No Matched Grouped Items Rule");
customer.addGroupedItem(new GroupedItem(...));
end
I tried the following steps:
1. I created a customer test object with two dummy grouped item objects with
unique item code ( item1 and item2).
2. I created two dummy incoming item objects with item code as 'item3'.
3. I populated my working memory with my customer, grouped item and incoming
objects and fired the rule.
I was expecting the following to happen:
Since 'item3' is not already present for this customer, the 'Item does not
exist' rule condition would get satisfied. My understanding so far was
right. A new groupeditem object of type 'item3' was created and added to
the customer.
Now, there was one more incoming item of the same type in the working
memory. I was expecting the 'item exist' rule to be executed. Because, the
groupeditem just got created as a result of the first object. But, that is
not the case. The 'Item does not exist' rule gets executed again.
Do I need to call modifyObject on my customer or something for the next item
object to correctly identify that a item of that type already exist for that
customer? Is this the right way to go about this peice of requirement.
Thanks in advance.
--
View this message in context:
http://www.nabble.com/Question-on-working-memory-and-its-working-tf2899258.html#a8100179
Sent from the drools - user mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email