DAYU数据开发EL表达式常见使用场景 ----- 根据前一个节点是否执行成功进行IF条件判断
【场景】根据前一个节点是否执行成功,决定执行哪一个IF条件分支
图1--- Demo场景
此Demo中使用的EL表达式为#{Job.getNodeStatus("node_name")},这个表达式的作用为获取指定节点的执行状态,将括号中的node_name替换为具体的节点名称即可。当前该表达式只有两个返回值,success或者fail。如上图所示,当dqm这个节点执行结果为success的时候,执行上面的分支,当dqm这个节点执行结果为fail的时候,执行下面的分支。对应的EL表达式写法已经用红字在图1中标出。
常见问题:
Q1:IF条件怎么写?什么情况下会执行IF条件后面的节点?
A1:右键点击一条连线,点击设置条件打开Condition编辑窗口(图2)。每一个条件分支都需要填写IF条件,当且仅当IF条件为true的时候,会执行后续节点,否则,后续节点将被跳过。从上图1中可以看到,每一个IF条件表达式都是一个三元表达式,当三元表达式结果为true的时候,才会执行IF条件后面的节点;否则后续节点将被跳过,此处我们支持选择仅跳过相邻的下一个节点,或者跳过该IF分支后续所有节点(图3)。
图 2 ---- IF条件入口
图 3 ---- IF条件编辑框
Q2:IF条件里面的数据来源
A2:常见的用法是通过EL表达式,根据具体的场景选择不同的EL表达式来达到目的。常用的EL表达式有:
#{Job.getNodeStatus("node_name")}:获取指定节点的执行状态(成功或者失败)。
#{Job.getNodeOutput('preNodeName')}:获取前一个节点的输出,根据其输出进行条件判断。
更多EL表达式用法可参考资料:https://support.huaweicloud.com/usermanual-dgc/dgc_01_0494.html
除了使用EL表达式,还可以使用${job_param}直接获取作业参数的值进行条件判断。比如我们有一个作业参数,名称为result,我们就可以写一个这样的IF条件:#{${result} > 5 ? "true" : "false"},获取result的value进行条件判断。EL表达式中也有一个类似功能的表达式:#{Job.getParam("job_param_name")} 这个表达的作用也是获取某个作业参数的value。
此处有一个小tip,#{Job.getParam("job_param_name")}跟${job_param_name}有什么区别呢?
如果当前的作业是一个子作业,这个子作业中包含一个作业参数A,A的值是依赖父作业传递过来的,子作业里面并没有设置这个参数A的value。那么此时如果 在子作业的IF条件中这么写:#{Job.getParam("A") > 5 ? "true" : "false"},IF条件是取不到A的value的,因为Job.getParam这个表达式只能直接获取当前作业里配置的参数的value,并不能获取到父作业传递过来的value值,也不能获取到工作空间里面配置的全局的变量的值,可以理解为Job.getParam的作用域仅仅是本作业。而${job_param_name}这种用法可以获取到父作业传递过来的参数值,也可以获取到全局配置的变量。所以如果是需要获取作业参数的场景,选择${job_param_name}更好。
- 点赞
- 收藏
- 关注作者
评论(0)