Реализация немного более сложных условий для потока в Камунде

Как я могу реализовать более сложное выражение в состоянии потока? Простые условия, такие как:

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

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

1 ответ

Решение

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

${deadLine.after(now())}

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

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

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

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

Другие вопросы по тегам