我有一个场景,我想根据条件跳过一个组件来执行,并在Talend中运行它的连续组件。
是否可能?
答案 0 :(得分:5)
您有两种选择可以有条件地执行部分工作。
如果您的条件检查后面的组件可以是一个起始组件(如果您将它放到画布上然后它应该有一个绿色背景),那么您可以使用Run if
连接器将它链接到前一个部分你的工作是这样的:
在这个例子中,我们只是有条件地调用另一个tJava组件,但这可以是任何可启动的组件。
使用以下代码配置第一个tJava组件(设置条件布尔值):
Boolean condition = false;
globalMap.put("condition",condition);
两个Run if
连接器分别设置为((Boolean)globalMap.get("condition")) == true
和((Boolean)globalMap.get("condition")) == false
。
更好的选择可能是在tMap或tFilterRow组件中使用过滤,这也允许您链接到不启动组件的组件。为此,您可以按以下方式设置工作:
在这项工作中,我在tFixedFlowInput组件中硬编码了一些表格数据:
然后我们使用tMap过滤数据流到以下任何组件:
我们在其中测试数据的布尔条件列的值。作为一个例子,我还对数据应用了一些简单的条件转换,其中“true”行的值增加了1000,“false”行的值减去了100。
从这里开始,您可以正常地继续工作流程,在这种情况下,我们会链接到一个tSystem组件,根据您的评论执行系统命令。
答案 1 :(得分:4)
我为你嘲笑了一份工作:
我有一个名为:startFrom的上下文变量 可以使用context.startFrom
访问它我已经放了几个tWarns的tJava:
我使用了4个上下文设置:
所以我的工作:
如果设置如下:
context.startFrom.equals("选择&#34)
Recovery and Recovery1使用System.out
打印出他们的名字如果我开始工作,我可以选择我想要的地方。如果我没有选择任何内容:上下文值为空,则不会做任何事情。
答案 2 :(得分:1)
you can not use prejob as it does not have runif trigger, but you can do like this
prejob -->oncomponentok-->tJava (in here you poupulate you evaluate your condition say as given below)---->RUN IF Trigger - you put your condition here..((String)globalMap.get("var_myCondition")).equals("true") --->component to run in true condition
--->RUN IF Trigger on (tJava) ---((String)globalMap.get("var_myCondition")).equals("false")--->component to run in false condition
in short your job would be like
prejob-->tJava---(RUNIF TRIGGER)------>component/flow to run in true condition
---(RUNIF TRIGGER)------>component/flow to run in false condition
tJava code
String myCondition="false";
globalMap.put("var_myCondition",myCondition);