Реализация немного более сложных условий для потока в Камунде
Как я могу реализовать более сложное выражение в состоянии потока? Простые условия, такие как:
${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