[rules-users] check whether a key is present in global Map, i.e. mimicking containsKey() behavior

esstrata esstrata at yahoo.es
Tue Jul 5 05:51:17 EDT 2011


Hi,

  I found a possible cause from StatefulKnowledgeSession API:

/Also, it is a good practice to set your globals before inserting your facts
or starting your processes. Rules engines evaluate rules at fact insertion
time, and so, if you are using a global to constraint a fact pattern, and
the global is not set, you may receive a NullPointerException./

I did so and I no longer get the compilation error. However, 'eval'
construction is not working in LHS. I'm shifting to insert items from maps
into WM directly.

Cheers


esstrata wrote:
> 
> Hello,
> 
>   I'm using Drools 5.1.1 in a JavaSE 6 project.
> 
> I can't get running a rule where a value obtained from WM is check for
> existence as a key of a global Map.
> 
> I have a map of the type ProductTextCode -> Product, where keys are String
> and values Product
> /global Map productMap/
> 
> Then in a rule a I want a condition where each String in WM is tested
> against map keyset.
> /
> rule "Product ID not in products map"
>     dialect "mvel"  
>     when
>         $pid : String()		
>         => Here goes the condition <=
>     then
>         System.out.println("Invalid product id: " + $pid)
>     	retract ($pid)
>     end
> /
> 
> So far I've tried with productMap.containsKey($pid) but a get a MVEL error
> as it takes 'containsKey' as a property.
> 
> Please help. Thank you.
> 

esstrata wrote:
> 
> Hello,
> 
>   I'm using Drools 5.1.1 in a JavaSE 6 project.
> 
> I can't get running a rule where a value obtained from WM is check for
> existence as a key of a global Map.
> 
> I have a map of the type ProductTextCode -> Product, where keys are String
> and values Product
> /global Map productMap/
> 
> Then in a rule a I want a condition where each String in WM is tested
> against map keyset.
> /
> rule "Product ID not in products map"
>     dialect "mvel"  
>     when
>         $pid : String()		
>         => Here goes the condition <=
>     then
>         System.out.println("Invalid product id: " + $pid)
>     	retract ($pid)
>     end
> /
> 
> So far I've tried with productMap.containsKey($pid) but a get a MVEL error
> as it takes 'containsKey' as a property.
> 
> Please help. Thank you.
> 


--
View this message in context: http://drools.46999.n3.nabble.com/check-whether-a-key-is-present-in-global-Map-i-e-mimicking-containsKey-behavior-tp3137610p3140218.html
Sent from the Drools: User forum mailing list archive at Nabble.com.



More information about the rules-users mailing list