工作流引擎支持的脚本
盘古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工作流平台
相关教程
- 2020-05-08
- 2020-05-07
- 2020-05-06
- 2020-05-05
- 2020-04-29
- 2020-04-28
- 2020-04-27
- 2020-04-26
- 2020-04-25
- 2020-04-24