Сегодня я столкнулся с конкретной проблемой: у меня есть веб-приложение на 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.Entryv : 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”