Camunda脚本任务可用在ServiceTask和线上,支持内部脚本Inline script和外部脚本External resource,支持JavaScript、groovy、Jython等常用脚本语言。

Activiti和Flowable不支持外部脚本,也不支持在线上指定脚本。

监听器也支持脚本,当在流程中增加脚本监听器只需要重新部署流程即可,不需要重启服务。即动流程图,不动Java代码。

一:JavaScript

1.1 bpmn

线上的脚步返回值条件必须是boolean。

Camunda ScriptTask_监听器


脚本返回值赋值给Result variable。

Camunda ScriptTask_scripttask_02

1.2 src/main/resources/test.js

var result1 = execution.getVariable("result1");
result1 - 1;

1.3 test

repositoryService.createDeployment()
        .name("ScriptTask流程")
        .addClasspathResource("bpmn/diagram_5.bpmn")
        .deploy();
identityService.setAuthenticatedUserId("huihui");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ScriptTaskProcess");
Task task = taskService.createTaskQuery()
        .processInstanceId(processInstance.getId())
        .singleResult();

Map<String,Object> variables = new HashMap<>();
variables.put("days", 10);

taskService.complete(task.getId(), variables);

1.4 result

Camunda ScriptTask_赋值_03

二:groovy

<dependency>
   <groupId>org.codehaus.groovy</groupId>
   <artifactId>groovy-all</artifactId>
   <version>3.0.9</version>
   <type>pom</type>
</dependency>
<dependency>
   <groupId>org.codehaus.groovy.modules.http-builder</groupId>
   <artifactId>http-builder</artifactId>
   <version>0.7.1</version>
</dependency>

Camunda ScriptTask_赋值_04


Camunda ScriptTask_重启_05