search cancel

BG Log showing 1000s of these per day: "ODF-0022: Invalid expression. Re-evaluate the OBS Expression."

book

Article ID: 203318

calendar_today

Updated On:

Products

Clarity PPM SaaS

Issue/Introduction

This is just an example of one of the messages. The user changes, and we can't trace it to one business unit, process, user, or action.

ERROR 2020-11-06 03:02:57,973 [Event Handler pool-5-thread-2] niku.odf (clarity:admin:40709585__885B82A5-68D4-47BF-BBD8-7F0E3A5DA9EA:none) java.lang.RuntimeException: ODF-0022: Invalid expression. Re-evaluate the OBS Expression. at com.niku.odf.exprbuilder.ExprToWhereClauseConverter.handleFunction(ExprToWhereClauseConverter.java:1220) at com.niku.odf.exprbuilder.ExprToWhereClauseConverter.handleChildren(ExprToWhereClauseConverter.java:565) at com.niku.odf.exprbuilder.JEPOBSFunction.evaluate(JEPOBSFunction.java:120) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source) at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source) at org.nfunk.jep.EvaluatorVisitor.getValue(Unknown Source) at org.nfunk.jep.JEP.getValueAsObject(Unknown Source) at org.nfunk.jep.JEP.getValue(Unknown Source) at com.niku.odf.exprbuilder.ExpressionEvaluator.evaluateExpression(ExpressionEvaluator.java:463) at com.niku.odf.exprbuilder.ExpressionEvaluator.evaluate(ExpressionEvaluator.java:166) at com.niku.bpm.engine.exprevaluator.omp.OMPExpressionEvaluator.evaluateAutoStartCondition(OMPExpressionEvaluator.java:85) at com.niku.bpm.engine.exprevaluator.ExpressionEvaluator.evaluate(ExpressionEvaluator.java:125) at com.niku.bpm.eventmgr.ObjectEventHandler.processEventToAutoStartProcesses(ObjectEventHandler.java:230) at com.niku.bpm.eventmgr.ObjectEventHandler.fireEvent(ObjectEventHandler.java:63) at com.niku.bpm.eventmgr.messageserver.BaseEventHandler.fireEvent(BaseEventHandler.java:27) at com.niku.bpm.eventmgr.messageserver.BaseEventHandler.run(BaseEventHandler.java:77) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)

Environment

Release : 15.8.1

Component : CA PPM SAAS BUSINESS PROCESS MANAGEMENT

Resolution

One of the processes had a start condition on the OBS's and there were a couple that didn't exist. After removing those OBS's and re-validating a process errors stop.

Additional Information

Query to identify all processes with expressions that have an OBS on it on the steps post condition:

select bdp.process_code, ofe.expression from odf_filter_expressions ofe
join bpm_def_step_conditions bdsc on ofe.object_instance_id = bdsc.id 
join bpm_def_steps bds on bds.id = bdsc.step_id join bpm_def_stages bdst 
on bdst.id = bds.stage_id join bpm_def_process_versions bdpv on 
bdpv.id = bdst.process_version_id join bpm_def_processes bdp on 
bdp.id = bdpv.process_id where ofe.object_code = 'BPM_DEF_STEPS' 
and lower(ofe.expression) like '%obs%'

Query to identify processes with start condition that have an OBS:

select bdp.id, cc.name, bdp.process_code, ofe.expression 
from bpm_def_processes bdp, 
cmn_captions_nls cc,
bpm_def_process_versions bdpv, 
odf_filter_expressions ofe
where cc.table_name = 'BPM_DEF_PROCESSES'
AND bdp.id = cc.pk_id
AND cc.language_code = 'en'
AND bdpv.process_id = bdp.id
AND ofe.object_instance_id = bdp.id
AND ofe.object_code = 'BPM_DEF_PROCESS_VERSIONS'
and lower(ofe.expression) like '%obs%'