0

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

${i > 0}

方便且很棒,但有时我需要做一些更复杂的事情,例如:

${deadLine.after(now)}

假设是已经在流程实例中定义deadLine的类型的对象,并且意味着。如何在流的条件下实现这样的表达式?在 Java 中,我可以:Datenownew Date()

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

但是我怎样才能在流的条件下做同样的事情呢?

4

1 回答 1

2

假设您有一个名为对象的流程变量deadLinejava.util.Date您可以编写:

${deadLine.after(now())}

这是因为 Camundanow在表达式上下文[1]中提供了一个函数。

还有其他几种方法可以评估复杂的决策逻辑,例如:

  • 调用在 Java 中编码决策的 Spring 或 CDI bean
  • 在评估条件之前使用脚本/服务任务或执行侦听器执行决策逻辑并将结果存储在布尔流程变量中

我建议阅读:http ://docs.camunda.org/7.3/guides/user-guide/#process-engine-expression-language-variables-and-functions-available-inside-expression-language

于 2015-08-31T07:53:25.773 回答