Hi, I am trying to compare date in condition of rule. I set the date format
in system parameter.
System.setProperty("drools.dateformat", "dd/MM/yyyy");

When I get the date from the fact object directly, it works well.
           when
                $record: Record( startDate < "01/01/3000"  )

In my application, I need to get a map from fact objet, then use a key to
get the target object, then get "dateValue" from the target object. This
condition doesn't work. "dateValue" is a java.util.Date object.
           when
                $record: Record( fieldMap["STARTDATE"].dateValue < "01/01/3000" 
 )

Does anyone know how to make it works?

This is the error message.

org.drools.RuntimeDroolsException: Exception executing predicate
fieldMap["STARTDATE"].dateValue < "01/01/3000"
        at
org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:279)
        at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
        at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
        at 
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:190)
        at 
org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:145)
        at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1174)
        at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1123)
        at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:917)
        at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:251)
        at dti.drools.test.Test.oneRecordThousandTime(Test.java:81)
        at dti.drools.test.Test.main(Test.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)
Caused by: [Error: uncomparable values <> and <<01/01/3000>>]
[Near : {... Unknown ....}]
             ^
[Line: 1, Column: 0]
        at
org.mvel2.math.MathProcessor.doOperationNonNumeric(MathProcessor.java:230)
        at org.mvel2.math.MathProcessor._doOperations(MathProcessor.java:175)
        at org.mvel2.math.MathProcessor.doOperations(MathProcessor.java:79)
        at
org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:111)
        at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
        at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:104)
        at org.mvel2.MVEL.executeExpression(MVEL.java:1001)
        at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:91)
        at
org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:272)
        ... 15 more
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to
java.util.Date
        at java.util.Date.compareTo(Date.java:112)
        at
org.mvel2.math.MathProcessor.doOperationNonNumeric(MathProcessor.java:227)
        ... 23 more

--
View this message in context: 
http://drools-java-rules-engine.46999.n3.nabble.com/compare-date-in-map-in-rule-condition-tp2713827p2713827.html
Sent from the Drools - User mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to