如果我使用'运行if'条件,它也不能用作'迭代'?
我有一个允许多个值的variable_X(在'tFlowToIterate'组件'中定义)。然后,根据variable_Y的值,我想将variable_X的所有值传递给另一个Job(4个可用作业之一)。 所以,我想在每个Job之前使用'Run If'条件,但我想通过所选作业迭代variable_X的值...
我该怎么做?
答案 0 :(得分:1)
我有点困惑。您想使用变量Y来选择要调用的子变量,但是您想要将从tFlowtoIterate流出的变量X传递给该子变量(因此在每次迭代时都会更改)?
据我所知,我担心这是不可能的。您可以通过一个小技巧从迭代信号中抛出不同的RunIf信号,但是您无法通过子作业进行迭代。子进程将在每次迭代时使用单个值X调用,也不会在集合中调用。如果你需要,我担心你必须稍微改变你的设计(例如,在单个字符串上连接X的可能值,在子作业中将其爆炸并在本地循环)
如果要从迭代符号触发多个信号,可以执行未记录的“组件缓冲”技巧。这并不是Talend团队可能很高兴知道的事情,但它确实有效。我们的想法是使用代表迭代信号的虚拟组件。
/--->RunIf--->[stuff1]
/
/
tRowGenerator---row--->tFlowToIterate---Iterate--->tWarn--->RunIf----->[stuff2]
\
\
\--->RunIf--->[stuff3]
tWarn
(您可以用来打印详细的DEBUG,例如)将充当代理。因此,将在每次迭代时评估RunIf。 “stuff”可以是一个subjob 但是它将获得X的当前值,而不是整个集合。