为Camunda的流程实施更复杂的条件

时间:2015-08-30 08:49:42

标签: java bpmn camunda juel

如何在流的条件下实现更复杂的表达式?简单的条件如:

${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));

但是如何才能在流量条件下做同样的事情?

1 个答案:

答案 0 :(得分:2)

假设您有一个名为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