脚本任务
概览
脚本任务(script task) 是指当流程到达该任务时,执行一个 Groovy 脚本。
通常,当我们需要初始化流程变量时,会使用脚本任务, 设置默认值、计算表达式, 或者执行一些其他的逻辑,类似这种只需一小段代码即可完成的所有操作。
但脚本并不限于上述内容。脚本中可以实现实现任何业务逻辑,取决于具体需求。
|
Jmix BPM 仅支持 Groovy 脚本。但原始的 Flowable 产品也支持 JavaScript。 因此,从外部源导入流程模型时要小心。 |
脚本任务在图中显示为典型的 BPMN 2.0 任务(圆角矩形),矩形左上角有一个小的“脚本”图标。
脚本任务通过指定 script 和 scriptFormat 属性定义。
<scriptTask id="script-task" name="Script task"
scriptFormat="groovy" (1)
flowable:resultVariable="result"> (2)
<script>
printlnt "This is a script" (3)
return "OK"
</script>
</scriptTask>
| 1 | — 脚本类型(仅支持 Groovy) |
| 2 | — 结果变量(可选) |
| 3 | — 脚本内容 |
属性
脚本任务具有以下特定属性:
| 脚本内容不能为空,否则会在流程部署时解析出错。 |
脚本中的变量
流程到达脚本任务时,execution 中的所有可访问的流程变量都可以在脚本中使用。 在此示例中,脚本变量 'inputArray' 实际上是一个流程变量(整数数组)。
<script>
sum = 0
for ( i in inputArray ) {
sum += i
}
</script>
也可以在脚本中设置流程变量,只需调用
execution.setVariable("variableName", variableValue)
默认情况下,不会自动存储任何变量。
脚本中使用 bean
脚本中可以通过名称访问 bean。下面的 Groovy 脚本调用了 MyBean 的 doSomething 方法并将结果保存在执行上下文的变量中:
res = MyBean.doSomething()
execution.setVariable("doSomething", res)
| 调用 bean 的主要且推荐方式是使用 服务任务。如果需要同时使用 Groovy 逻辑和 Java bean,可以在脚本任务之前或之后的服务任务中调用 bean,然后通过流程变量进行通信。 |
脚本结果
脚本任务的返回值可以分配给已有流程变量或新的流程变量。 指定目标变量时,可以在脚本任务属性面板的 Result variable 字段中设置。
当脚本任务执行时,脚本的返回值会自动分配给指定的流程变量。 如果变量不存在,Flowable 将创建一个与 Result variable 字段同名的新变量。
通过使用 Result variable 字段,可以将脚本任务的结果集成到流程变量中, 以便能在整个流程的执行过程中存储、操作和访问数据。
在脚本中,可以使用 'return' 运算符。例如:
def a = "abc"
return a
如果脚本中没有 'return',则将使用最后一行的结果,在下面的示例中,结果为 “JMIX”。
String a = "abc".toUpperCase()
String b = "jmix".toUpperCase()