脚本任务

概览

脚本任务(script task) 是指当流程到达该任务时,执行一个 Groovy 脚本。

通常,当我们需要初始化流程变量时,会使用脚本任务, 设置默认值、计算表达式, 或者执行一些其他的逻辑,类似这种只需一小段代码即可完成的所有操作。

但脚本并不限于上述内容。脚本中可以实现实现任何业务逻辑,取决于具体需求。

Jmix BPM 仅支持 Groovy 脚本。但原始的 Flowable 产品也支持 JavaScript。 因此,从外部源导入流程模型时要小心。

图形表示法

脚本任务在图中显示为典型的 BPMN 2.0 任务(圆角矩形),矩形左上角有一个小的“脚本”图标。

script task
XML 表示

脚本任务通过指定 scriptscriptFormat 属性定义。

<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  — 脚本内容

属性

脚本任务具有以下特定属性:

  • scriptFormat:扩展属性,配置脚本的语言(仅 Groovy)。

  • script:: 脚本内容,在子元素 script 中定义的字符串。

  • resultVariable:可选属性,如果存在该属性,则会在执行上下文中存储指定名称的变量 其中包含脚本计算的结果。

script task properties

如需编辑脚本,可以双击脚本控件使用 Script editor 编辑:

script editor

脚本内容不能为空,否则会在流程部署时出错。

脚本中的变量

流程到达脚本任务时,execution 中的所有可访问的流程变量都可以在脚本中使用。 在此示例中,脚本变量 'inputArray' 实际上是一个流程变量(整数数组)。

<script>
    sum = 0
    for ( i in inputArray ) {
        sum += i
    }
</script>

也可以在脚本中设置流程变量,只需调用

execution.setVariable("variableName", variableValue)

默认情况下,不会自动存储任何变量。

脚本结果

脚本任务的返回值可以分配给已有流程变量或新的流程变量。 指定目标变量时,可以在脚本任务属性面板的 Result variable 字段中设置。

当脚本任务执行时,脚本的返回值会自动分配给指定的流程变量。 如果变量不存在,Flowable 将创建一个与 Result variable 字段同名的新变量。

通过使用 Result variable 字段,可以将脚本任务的结果集成到流程变量中, 以便能在整个流程的执行过程中存储、操作和访问数据。

在脚本中,可以使用 'return' 运算符。例如:

def a = "abc"
return a

如果脚本中没有 'return',则将使用最后一行的结果,在下面的示例中,结果为 “JMIX”。

String a = "abc".toUpperCase()
String b = "jmix".toUpperCase()

关于 Groovy

Apache Groovy 是一种功能强大的、类型可选的动态语言,具有静态类型和静态编译功能, 适用于 Java 平台,旨在通过简洁、熟悉且易于学习的语法提高开发人员的工作效率。