如何在流的条件中实现更复杂的表达式?简单的条件如:
${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 或 CDI bean,用 Java 编写决策代码
- 在评估条件之前使用脚本/服务任务或执行监听器来执行决策逻辑并将结果存储在 boolean 流程变量中
关于java - 在 Camunda 中为流程实现更复杂的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294828/