工作流引擎支持的脚本

盘古BPM支持与JSR-223兼容脚本引擎实现的脚本编写。当前,我们正在测试Groovy,JavaScript,JRuby和Jython的集成。要使用脚本引擎,必须将相应的jar添加到类路径。

JavaScript是Java Runtime(JRE)的一部分,因此可以直接使用。

下表概述了支持脚本执行的BPMN元素。

使用脚本任务

通过BPMN 2.0脚本任务,您可以将脚本添加到BPM流程(有关更多信息,请参阅 BPMN 2.0参考

以下过程是一个带有Groovy脚本任务的简单示例,该任务汇总了数组的元素。

<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"

                   targetNamespace="http://pangu.org/example">

  <process id="process" isExecutable="true">

    <startEvent id="start"/>

    <sequenceFlow id="sequenceFlow1" sourceRef="start" targetRef="task"/>

    <scriptTask id="task" name="Groovy Script" scriptFormat="groovy">

      <script>

        <![CDATA[

        sum = 0

 

        for ( i in inputArray ) {

          sum += i

        }

 

        println "Sum: " + sum

        ]]>

      </script>

    </scriptTask>

    <sequenceFlow id="sequenceFlow2" sourceRef="task" targetRef="end"/>

    <endEvent id="end"/>

  </process></definitions>

要开始该过程,inputArray必须有一个变量。

Map<String, Object> variables = new HashMap<String, Object>();

variables.put("inputArray", new Integer[]{5, 23, 42});

runtimeService.startProcessInstanceByKey("process", variables);

使用脚本作为执行监听器

除了Java代码和表达语言,盘古BPM还支持将脚本作为执行监听器执行。有关执行监听器的一般信息,请参见相应部分

要将脚本用作执行侦听器,pangu:script必须将一个元素添加为该元素的子pangu:executionListener元素。在脚本评估期间,变量execution是可用的,它对应于DelegateExecution接口。

以下示例显示了如何将脚本用作执行侦听器。

<process id="process" isExecutable="true">

  <extensionElements>

    <pangu:executionListener event="start">

      <pangu:script scriptFormat="groovy">

        println "Process " + execution.eventName + "ed"

      </pangu:script>

    </pangu:executionListener>

  </extensionElements>

 

  <startEvent id="start">

    <extensionElements>

      <pangu:executionListener event="end">

        <pangu:script scriptFormat="groovy">

          println execution.activityId + " " + execution.eventName + "ed"

        </pangu:script>

      </pangu:executionListener>

    </extensionElements>

  </startEvent>

  <sequenceFlow id="flow1" startRef="start" targetRef="task">

    <extensionElements>

      <pangu:executionListener>

        <pangu:script scriptFormat="groovy" resource="org/pangu/bpm/transition.groovy" />

      </pangu:executionListener>

    </extensionElements>

  </sequenceFlow>

 

  <!--

    ... remaining process omitted

  --></process>

使用脚本作为任务侦听器

与执行监听器类似,任务监听器也可以实现为脚本。有关任务监听器的一般信息,请参见相应部分

要将脚本用作任务监听器,pangu:script必须将一个元素添加为该元素的子pangu:taskListener元素。在脚本内部,变量task是可用的,它对应于DelegateTask接口。

以下示例显示了如何将脚本用作任务侦听器。

<userTask id="userTask">

  <extensionElements>

    <pangu:taskListener event="create">

      <pangu:script scriptFormat="groovy">println task.eventName</pangu:script>

    </pangu:taskListener>

    <pangu:taskListener event="assignment">

      <pangu:script scriptFormat="groovy" resource="org/pangu/bpm/assignemnt.groovy" />

    </pangu:taskListener>

  </extensionElements></userTask>

使用脚本作为条件

作为表达语言的替代,盘古BPM允许您在conditionExpression条件序列流中使用脚本 。为此,必须language将conditionExpression元素的属性 设置为所需的脚本语言。脚本源代码是元素的文本内容,与表达语言一样。指定脚本源代码的另一种方法是定义外部源,如脚本源部分所述

以下示例显示了脚本作为条件的用法。Groovy变量status是脚本内部可用的流程变量。

<sequenceFlow>

  <conditionExpression xsi:type="tFormalExpression" language="groovy">

    status == 'closed'

  </conditionExpression></sequenceFlow>

<sequenceFlow>

  <conditionExpression xsi:type="tFormalExpression" language="groovy"

      pangu:resource="org/pangu/bpm/condition.groovy" /></sequenceFlow>

 技术支持:盘古BPM工作流平台

相关教程