Рубрики
Без рубрики

Выполнение скрипта groovy в процессе camunda

Сегодня я столкнулся с конкретной проблемой: у меня есть веб-приложение на Java, в котором запущен процесс Camunda. В какой-то … С тегами todayilearned, java, groovy, camunda.

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