|
脚本任务 描述 脚本任务时一个自动节点。当流程到达脚本任务, 会执行对应的脚本。图形标记 脚本任务显示为标准BPMN 2.0 任务(圆角矩形), 左上角有一个脚本小图标。XML内容脚本任务定义需要指定script和scriptFormat。 <scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy"> <script> sum = 0 for ( i in inputArray ) { sum += i } </script></scriptTask>scriptFormat的值必须兼容 JSR-223。 (java 平台的脚本语言)。默认Javascript 会包含在JDK 中,不需要额外的依赖。 如果你想使用其他(JSR-223 兼容)的脚本引擎, 需要把对应的jar 添加到classpath 下,并使用合适的名称。 比如,hams 单元测试经常使用groovy , 因为语法比java 简单太多。注意,groovy 脚本引擎放在groovy-all.jar 中。在2.0 版本之前, 脚本引擎是groovy jar 的一部分。这样,需要添加如下依赖: <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.x.x<version></dependency>脚本中的变量 到达脚本任务的流程可以访问的所有流程变量,都可以在脚本中使用。 实例中,脚本变量'inputArray'其实是流程变量 (整数数组)。 <script> sum = 0 for ( i in inputArray ) { sum += i }</script>也可以在脚本中设置流程变量,直接调用 execution.setVariable("variableName", variableValue)。 默认,不会自动保存变量(注意:hams 5.12之前存在这个问题)。 可以在脚本中自动保存任何变量。 (比如上例中的sum),只要把scriptTask的autoStoreVariables属性设置为true。 然而,最佳实践是不要用它,而是显示调用execution.setVariable(), 因为一些当前版本的JDK 对于一些脚本语言,无法实现自动保存变量。 参考这里获得更多信息。<scriptTask id="script" scriptFormat="JavaScript" hams:autoStoreVariables="false">参数默认为false,意思是如果没有为脚本任务定义设置参数, 所有声明的变量将只存在于脚本执行的阶段。如何在脚本中设置变量的例子: <script> def scriptVar = "test123" execution.setVariable("myVar", scriptVar)</script>注意:下面这些命名已被占用,不能用作变量名: out, out:print, lang:import, context, elcontext。 脚本结果 脚本任务的返回值可以通过制定流程变量的名称,分配给已存或一个新流程变量, 使用脚本任务定义的'hams:resultVariable'属性。 任何已存的流程变量都会被脚本执行的结果覆盖。 如果没有指定返回变量名,脚本的返回值会被忽略。 <scriptTask id="theScriptTask" name="Execute script" scriptFormat="juel" hams:resultVariable="myVar"> <script>#{echo}</script></scriptTask>上例中,脚本的结果(表达式'#{echo}'的值) 在脚本完成后,会设置到'myVar'变量中。
|