如何在流的条件下实现更复杂的表达式?简单的条件如下:
${i > 0}
既方便又很棒,但有时我需要做一些更复杂的事情,例如:
${deadLine.after(now)}
假设
deadLine
是流程实例中已定义的Date
类型的对象,并且now
表示new Date()
。如何在流的条件下实现此类表达式?在Java中,我可以:ExpressionFactory factory = new ExpressionFactoryImpl();
SimpleContext context = new SimpleContext(new SimpleResolver());
factory.createValueExpression(context, "${deadLine}", java.util.Date.class).setValue(context, new java.util.Date());
factory.createValueExpression(context, "${now}", java.util.Date.class).setValue(context, new java.util.Date());
ValueExpression expr1 = factory.createValueExpression(context, "${deadLine.after(now)}", boolean.class);
System.out.println("Result = " + expr1.getValue(context));
但是在流的情况下我该怎么做?
最佳答案
假设您有一个名为deadLine
的过程变量,它是一个java.util.Date
对象,则可以编写:${deadLine.after(now())}
这是有效的,因为Camunda在表达式上下文[1]中提供了函数now
。
还有其他几种评估复杂决策逻辑的方法,例如:
调用使用Java编写决策的Spring或CDI bean
在评估执行决策逻辑并将结果存储在布尔过程变量中的条件之前,请使用脚本/服务任务或执行侦听器
我建议阅读以下内容:http://docs.camunda.org/7.3/guides/user-guide/#process-engine-expression-language-variables-and-functions-available-inside-expression-language