工作流引擎表达语言(Expression Language)

表达语言(Expression Language)

盘古 BPM支持统一表达语言(EL),它是JSP 2.1标准(JSR-245)的一部分。为此,它使用开源的JUEL实现。要获取有关表达式语言用法的更多常规信息,请阅读官方文档。特别是提供的示例很好地概述了表达式的语法。

在盘古 BPM中,EL可在许多情况下用于评估类似脚本的小型表达式。下表概述了支持EL使用的BPMN元素。

表达式语言的用法

除了Java代码,盘古BPM还支持将表达式评估为委托代码。有关委派代码的一般信息,请参见相应的 部分

当前支持两种类型的表达式:pangubpm:expression和 pangubpm:delegateExpression。

用pangubpm:expression它可以评价值表达或以调用一个方法表达。您可以使用在表达式或Spring和CDI bean中可用的特殊变量。有关变量Spring以及CDI bean的更多信息,请参见相应的部分。

        pangubpm:expression="${myBean.ready}" camunda:resultVariable="myVar" />

该属性pangubpm:delegateExpression用于计算为委托对象的表达式。该委托对象必须实现JavaDelegateor ActivityBehavior 接口。

Conditions

条件

要使用条件序列流或条件事件,通常使用表达语言。对于条件顺序流,conditionExpression必须使用顺序流的元素。对于条件事件,condition必须使用条件事件的元素。两者都是这种类型tFormalExpression。元素的文本内容是要评估的表达式。

在表达式中,可以使用一些特殊变量来访问当前上下文。要查找有关可用变量的更多信息,请参见相应部分

下面的示例显示了将表达式语言用作序列流的条件:

      ${test == 'foo'}  

有关在条件事件上使用表达式语言的信息,请参见以下示例:

  ${var1 == 1}

inputOutput参数

使用pangubpm inputOutput扩展元素,您可以映射inputParameter或outputParameter表达语言。

在表达式中有一些特殊变量可供使用,这些变量可以访问当前上下文。要查找有关可用变量的更多信息,请参见相应部分

以下示例显示了一个inputParameter使用表达式语言调用Bean方法的。

          ${myBean.calculateX()}

不同的BPMN和CMMN元素允许通过表达式指定其内容或属性值。请参阅参考中有关BPMNCMMN的相应部分,以获取更多详细示例。

表达式语言中变量和函数的可用性

流程变量

当前作用域的所有流程变量都可以在表达式内直接使用。因此,条件序列流可以直接检查变量值:

      ${test == 'start'}

内置上下文变量

根据当前的执行上下文,在评估表达式时可以使用特殊的内置上下文变量:

以下示例显示一个表达式,该表达式将变量设置为test执行侦听器的当前事件名称。

    expression="${execution.setVariable('test', execution.eventName)}" />

External Context Variables With Spring and CDI

使用Spring和CDI的外部上下文变量

如果流程引擎与Spring或CDI集成,则可以在表达式内部访问Spring和CDI Bean。 有关更多信息,请参见SpringCDI的相应部分。以下示例显示了将JavaDelegate接口实现为委托执行的bean的用法 。

使用expression属性,可以调用Bean的任何方法。

内置的自旋功能

自旋功能如下:

 <serviceTask id="task" camunda:expression="${XML(xml).attr('test').value()}" resultVariable="test" />

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

相关教程