camunda-bpmn-脚本任务(Script Task)

脚本任务是一个自动活动,当流程执行到脚本任务时,相关的脚本自动执行。

一、定义脚本任务

脚本任务通过指定脚本和脚本格式来定义。

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy">
  <script>
    sum = 0
    for ( i in inputArray ) {
      sum += i
    }
  </script>
</scriptTask>

       scriptFormat脚本属性的命名必须遵守Java平台的JSR-223规范。如果想要使用JSR-223脚本引擎,需要引入相关的jar包,并且使用恰当的名字(scriptFormat的名字)。
       脚本的源码必须附加在script子元素的文本内容里。脚本源代码可以指定为表达式或外部资源,详细请看用户指南相关章节
       关于流程引擎的脚本信息,参考用户只能脚本一章

二、支持的脚本语言(Supported Script Languages):

       camunda支持大多是兼容JSR-223的脚本引擎实现。比如Groovy, JavaScript, JRuby and Jython

三、脚本中的变量(Variables in Scripts):

       所有的流程变量都可以在脚本任务的脚本中进行访问,下面的例子,脚本变量inputArray事实上是一个流程变量:

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

也可以在脚本中设置流程变量,通过变量作用接口提供的setVariable(...)方法:

<script>
    sum = 0
    for ( i in inputArray ) {
      sum += i
    }
    execution.setVariable("sum", sum);
</script>
四、启用自动存储脚本变量(Enabling auto-storing of Script Variables):

       通过在流程引擎的配置上设置autoStoreScriptVariables为true。流程引擎会自动存储所有的全局脚本变量作为流程变量。这个默认行为在Camunda BPM7.0和7.1上只支持Groovy脚本。

使用这个特性,需要遵守下面两条:
       1.在流程引擎配置上设置autoStoreScriptVariables变量为true
       2.脚本变量不能定义成用关键字def作为前缀的脚本变量。例如:def sum = 0,这个变量sum不会被作为一个流程变量存储
       3.这个autoStoreScriptVariables只对Groovy脚本生效,其他脚本不能保证生效
注意:以下名称是保留字,不能用作变量名:out, out:print, lang:import, context, elcontext。

五、脚本结果(Script Results):

       脚本任务的返回值可以被分配给之前已经存在的或者新的流程变量,通过指定流程变量的名称,作为脚本任务定义的camunda:resultVariable属性的一个字面量。当脚本任务执行时,这个指定的流程变量名存在的其他的值都会被新的结果值重写。如果不指定流程变量名,脚本的结果值会被忽略掉。

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="juel" camunda:resultVariable="myVar">
  <script>#{echo}</script>
</scriptTask>

       在上面的例子中,脚本执行的结果(执行表达式 #{echo}的结果),在脚本执行完成后,将会被设置到名字叫myVar的流程变量中。

六、多实例结果变量(Result variables and multi-instance):

       camunda:resultVariable属性被用在多实例结构中,比如多实例子流程中,结果变量会被多次重写。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容