DAYU数据开发EL表达式常见使用场景 ----- 根据前一个节点是否执行成功进行IF条件判断

举报
JQIU 发表于 2020/11/13 15:58:26 2020/11/13
【摘要】 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}更好。

        

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。