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

Implementing a little more complex conditions for a flow in Camunda

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

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

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

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

我推荐阅读这篇文章:http://docs.camunda.org/7.3/guides/user-guide/#process-engine-expression-language-variables-and-functions-available-inside-expression-language