04-20.eri-test 在camunda流程上执行Groovy脚本

今天,我遇到了一个具体问题:我有一个使用Camunda进程的Java Web应用程序。 在过程的某个时刻,序列流上有一个条件表达式,如下所示:

$ {变量.contains('string')}

但是现在我需要比较变量是否以“ astring”开头。 以来variable是一个集合集合,我必须找到一种方法来迭代itens并检查字符串的开头。 由于找不到使用表达语言的方法,因此我找到了使用Groovy中的脚本进行处理的方法。

因此,我已将Camunda的条件类型更改为“脚本”,并将脚本格式更改为“常规”,以指示需要将条件评估为常规脚本。

真好 但是我从来没有在Groovy中写过一行!

To test it first, I've used the page https://groovyconsole.appspot.com/, so I could test all my conditions.

我还必须更改我的应用程序。 在应用程序的某个时刻,我向用户显示下一个用户任务,评估流程的表达式。 我当时使用的是Camunda的ExpressionFactory。 因此,我在SequenceFlow对象上添加了一个检查,以检查条件是否是用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<String, Object> 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
  

就是这样!

--
Integrating Groovy in a Java application: http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html

from: https://dev.to//liviasilvasantos/executing-groovy-script-on-a-camunda-process-482c

你可能感兴趣的:(java)