Сегодня я столкнулся с конкретной проблемой: у меня есть веб-приложение на Java, в котором запущен процесс Camunda. В какой-то момент процесса в потоке последовательности появляется выражение условия, которое выглядит следующим образом:
${${переменная.содержит(‘astring’)}
Но теперь мне нужно сравнить, начиналась ли переменная с ‘astring’. Поскольку variable представляет собой набор наборов, мне пришлось найти способ перебирать элементы и проверять начало строки. Поскольку я не смог найти способ сделать это с помощью языка выражений, я нашел способ сделать это с помощью скрипта в Groovy.
Поэтому я изменил тип условия в Camunda на ‘Script’, а формат сценария – на ‘groovy’, чтобы указать, что условие должно быть оценено как сценарий groovy.
Милый. Но я никогда не писал ни строчки на Groovy!
Чтобы сначала протестировать его, я использовал страницу https://groovyconsole.appspot.com/ , чтобы я мог проверить все свои условия.
Мне также пришлось изменить свое заявление. В какой-то момент в приложении происходит то, как пользователь выполняет следующую пользовательскую задачу, оценивая выражения процесса. Для этого я использовал ExpressionFactory от Camunda. Поэтому я добавил проверку в объект потока последовательности, чтобы проверить, было ли условие записано в groovy, и оценил его, что-то вроде:
if ("groovy".equalsIgnoreCase(sf.getConditionExpression().getLanguage())) {
//create a groovy engine
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
//added all the Camunda's variables at the groovy engine to evaluation
for (Map.Entry v : variables.entrySet()) {
if (v.getValue() != null) {
engine.put(v.getKey(), v.getValue());
}
}
try {
//evaluate the conditional expression
next = (Boolean) engine.eval(sf.getConditionExpression().getTextContent());
} catch (Exception e) {
next = false;
}
} else { // EL evaluations }
Кроме того, мне пришлось добавить зависимость maven:
org.codehaus.groovy groovy-all 2.4.5
И это все!
— Интеграция Groovy в Java-приложение: —
Оригинал: “https://dev.to/liviasilvasantos/executing-groovy-script-on-a-camunda-process-482c”