我想创建一个应该可用于Oozie工作流程中所有操作的变量。我试图创建它,如下所示。但EL表达式没有得到评估,导致变量current_ts值为EL表达式本身。有人可以对此有所了解吗?
<workflow-app xmlns="uri:oozie:workflow:0.4" name="no-op-wf">
<parameters>
<property>
<name>current_ts</name>
<value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value>
</property>
</parameters>
<start to="test"/>
<kill name="test">
<!--message Just to show that this expression works if used here>Timestamp - [${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</message-->
<message>Timestamp - ${current_ts}</message> <!-- this will print expression but not evaluate it -->
</kill>
<end name="end"/>
</workflow-app>
答案 0 :(得分:0)
在Parameterization of Workflows中提到:
EL表达式可用于操作和决策节点的配置值。它们可以用在XML属性值以及XML元素和属性值中。
它们不能用于XML元素和属性名称。它们不能在节点名称中使用,也不能在节点的过渡元素中使用。
但你可以在协调员
中使用它答案 1 :(得分:0)
如果我在工作流中创建global-&gt; configuration-&gt;属性并在wf的其他操作中引用它,那么属性中的EL表达式将不会被评估。
作为一种解决方法,我将wf作为子wf包装并在父wf中创建了global-&gt; configuation-&gt;属性,然后将其传递给subwf。通过这种解决方法,EL表达式得到了评估。
家长WF:
<workflow-app xmlns="uri:oozie:workflow:0.4" name="main-wf">
<global>
<configuration>
<property>
<name>run_ts</name>
<value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value>
</property>
</configuration>
</global>
<action name="tbl-subwf">
<sub-workflow>
<app-path>${AppPath}</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="join-node"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Sub workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>