java - 在 Camunda 中为流程实现更复杂的条件

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

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

最佳答案

假设您有一个名为 deadLine 的流程变量,它是一个 java.util.Date 对象,您可以编写:

${deadLine.after(now())}

这是可行的,因为 Camunda 在表达式上下文 [1] 中提供了一个函数 now .

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

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

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

关于java - 在 Camunda 中为流程实现更复杂的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294828/

相关文章:

java - 在Activiti Java Delegate内部启动进程并查询任务

java - Camunda:如何将变量从父进程传递到子进程。 (由事件启动)

java - 在 Cassandra java 驱动程序中获取 Select 查询的 LIMIT 值

process - 有没有办法将同一进程的不同实例分配给不同的camunda实例(工作站)?

uml - 图与模型 - 哪些信息不同?

java - 正在解析 'The process engine you are trying to access does not exist'

java - 如何查询预定进程(定时器事件)?

java - 一个应用程序中的两个单例 - 都具有不同的 @Scheduled 方法 - 一个类方法等待另一个?

Java-Calculator 多计算

java - 作为 Jenkins 构建的一部分运行 Spock 测试