Реализация чуть более сложных условий для потока в 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));

Но как я могу сделать то же самое в состоянии потока?


person Mehran    schedule 30.08.2015    source источник


Ответы (1)


Если у вас есть переменная процесса с именем deadLine, которая является объектом java.util.Date, вы можете написать:

${deadLine.after(now())}

Это работает, потому что Camunda предоставляет функцию now в контексте выражения [1].

Есть несколько других способов оценить сложную логику принятия решений, например:

  • вызвать bean-компонент Spring или CDI, который кодирует решение в Java
  • Используйте задачу сценария/службы или прослушиватель выполнения перед оценкой условия, которое выполняет логику принятия решения и сохраняет результат в логической переменной процесса.

Я рекомендую прочитать это: http://docs.camunda.org/7.3/guides/user-guide/#process-engine-expression-language-variables-and-functions-available-inside-expression-language

person thorben    schedule 31.08.2015