Reputation: 715
I've written a simple Rule that prints the name of a Person when the Age is greater than 18.
Following works:
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
then
if ($data.age > 18) {
System.out.println($data.name);
}
end
Following doesn't work. Why?
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
$data.age > 18
then
System.out.println($data.name);
end
Error Messsage:
[10,13]: [ERR 102] Line 10:13 mismatched input '>' in rule "PrintNameWhenAgeWhenGreaterThan18"
[0,0]: Parser returned a null Package
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge.
Java code:
final Map<String, Object> data = new HashMap<>();
data.put("name", "Joe");
data.put("age", new Integer(30));
kSession.insert(data);
kSession.fireAllRules();
I know that I should rather be creating and using a Person class. This is just an example where I am trying to figure out how to use Maps with MVEL dialect in Drools.
Drools Version: 6.3.0 MVEL Version: 2.2.6
Thanks!!
Possible Solutions: Looks like I need to use the eval statement, while evaluating a boolean expression?
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
eval($data.age > 18)
then
System.out.println($data.name);
end
Suggested by Shyam
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map(age > 18)
then
System.out.println($data.name);
end
Upvotes: 0
Views: 835
Reputation: 9368
Did you try?
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map( age > 18 )
then
System.out.println($data.name);
end
Upvotes: 1