更新时间:2024-01-18 GMT+08:00
分享

常用EL表达式样例合集

本章节介绍常用的EL表达式及示例。

表1 常用的EL表达式

方法

描述

示例

String getNodeStatus(String nodeName)

获取指定节点运行状态,成功状态返回success,失败状态返回fail。

例如,判断节点是否运行成功,可以使用如下判断条件,其中test为节点名称:

#{(Job.getNodeStatus("test")) == "success" }

获取test节点运行状态。

#{Job.getNodeStatus("test")}

String getNodeOutput(String nodeName)

获取指定节点的输出。此方法只能获取前面依赖节点的输出。

  • 获取test节点输出。

    #{Job.getNodeOutput("test")}

  • 当前一节点执行无结果时,输出结果为“null”。
  • 当前一节点的输出结果是一个字段时,输出结果形如[["000"]]所示。此时可通过EL表达式分割字符串结果,获取前一节点输出的字段值,但注意输出结果类型为String。需要输出原数据类型时,仍需通过For Each节点及其支持的Loop内嵌对象EL表达式获取。

    #{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("前一节点名"),"]")[0],"[")[0],"\\"")[0]}

  • 当前一节点的输出结果是多个(两个及以上)字段时,输出结果形如[["000"],["001"]]所示。此时需要结合For Each节点及其支持的Loop内嵌对象EL表达式如#{Loop.current[0]},循环获取输出结果,详见获取SQL节点的输出结果值

String getParam(String key)

获取作业参数。

注意此方法只能直接获取当前作业里配置的参数值,并不能获取到父作业传递过来的参数值,也不能获取到工作空间里面配置的全局变量,作用域仅为本作业。

这种情况下建议使用表达式${job_param_name},既可以获取到父作业传递过来的参数值,也可以获取到全局配置的变量。

获取参数test的值:

#{Job.getParam("test")}

String getPlanTime(String pattern)

获取指定pattern的计划时间字符串,pattern为日期、时间模式,请参考日期和时间模式

获取作业调度计划时间,具体到毫秒:

#{Job.getPlanTime("yyyy-MM-dd HH:mm:ss:SSS")}

String getYesterday(String pattern)

获取执行pattern的计划时间前一天的时间字符串,pattern为日期、时间模式,请参考日期和时间模式

获取作业调度计划时间的前一天的时间,具体到日期:

#{Job.getYesterday("yyyy-MM-dd HH:mm:ss:SSS")}

String getLastHour(String pattern)

获取执行pattern的计划时间前一小时的时间字符串,pattern为日期、时间模式,请参考日期和时间模式

获取作业调度计划时间前一小时的时间,具体到小时:

#{Job.getLastHour("yyyy-MM-dd HH:mm:ss:SSS")}

Date addDays(Date date, int amount)

给date添加指定天数后,返回新Date对象,amount可以是负数。

将作业调度计划减一天的时间,转换为年月日格式。

#{DateUtil.format(DateUtil.addDays(Job.planTime,-1),"yyyy-MM-dd")}

int getDay(Date date)

从date获取天,例如:date为2018-09-14,则返回14。

从作业调度计划获取具体的天。

#{DateUtil.getDay(Job.planTime)}

Date now()

返回当前时间。

以秒格式返回当前的时间。

#{DateUtil.format(DateUtil.now(),"yyyy-MM-dd HH:mm:ss")}

Object path(String jsonStr,String jsonPath)

返回json字符串指定路径下的字段值。类似于XPath,path方法可以通过路径检索或设置JSON,其路径中可以使用.或[]等访问成员、数值,例如:tables[0].table_name。

字符串变量str的内容如下:
{
            "cities": [{
                        "name": "city1",
                        "areaCode": "1000"
            },
            {
                        "name": "city2",
                        "areaCode": "2000"
            },
            {
                        "name": "city3",
                        "areaCode": "3000"
            }]
}
获取city1的电话区号,EL表达式如下:
#{JSONUtil.path(str,"cities[0].areaCode")}

current

For Each节点在处理数据集的时候,是一行一行进行处理的。Loop.current表示当前遍历到的For Each节点“数据集”中定义的二维数组的某一行,该数据行为一维数组。

一般定义格式为#{Loop.current[0]}、#{Loop.current[1]}或其他。其中[0]表示遍历到的当前行的第一个值,[1]表示遍历到的当前行的第二个值,以此类推。

作为For Each节点的“子作业参数”取值,表示For Each循环遍历中,取“数据集”中二维数组的当前遍历行的第二个值。

#{Loop.current[1]}

相关文档