【问题标题】:Implementing a little more complex conditions for a flow in Camunda在 Camunda 中为流实现更复杂的条件
【发布时间】:2015-08-30 08:49:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: java bpmn camunda juel


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多