Talend:"main link" 在 SubJob 之前无法从中检索值

Talend : "main link" does not work before a SubJob for retrieving value from it

我的 Talend 作业有问题。 我的 objective 是从人员列表(从数据库中提取)开始,并针对列表中的每一行检查该 ID 是否已存在于 Active Directory 中。

检查 ID 是否已存在的子作业 (cherche_doublon_id) 工作正常。如果 ID 不存在,作业应该 return 结果 "idUnique",否则 "idDoublon"。 此子作业使用父级传输的 ID 作为上下文参数。

我的问题似乎是连接 "main" 进入了我的子作业。如果我放一个 "OnComponentOk",子作业运行良好,但在我的列表的最新元素上只有一次。使用 "main" 连接,我想为列表中的每一行执行子作业,但我无法检索作业的结果。

在这里你可以找到我的工作和组件的设置:

如果我在子作业前加上 "OnComponentOk" link,我可以毫无困难地检索。 见相应截图:

但在我的情况下,"OnComponentOk" 不可行,因为我想为列表中的每一行做我的事情。

我不清楚你的工作是什么样的。您在图片中提供了很多信息,但没有提供您的主要和子工作的完整图片。

所以,我想猜测一些事情:

  • tJava 不是基于行工作的,所以如果您也在工作中使用它,这可能是问题的原因
  • onComponentOk 让第一部分 运行 完全通过,解释仅提供最后一个条目的行为。所以这将作业分成几个独立的步骤
  • 检查缺失或已存在条目的方法通常看起来过于复杂。为什么是副业?

我会选择这样的工作布局:

Liste titulaires --row--> tMap --rowFound-->doStuff
            AD --lookup--/    \--rowNotFound-->doOtherStuff    

您可以在 tHashInput 和 tRunJob 之间使用 tFlowToIterate。它将为您的 tHashInput 的每一列创建一个全局变量。然后,您可以 link tFlowToIterate 到 tRunJob 迭代 link,并通过将 tFlowToIterate.Id 字段传递给变量 glb_individu_id.

来配置 tRunjob

最后我通过改变工作结构解决了我的问题。 在我最初的问题中,我试图检索我第一份工作的结果 "cherche_doublon",我想过滤这个结果。

现在我决定在级联模式下工作。

这意味着我有了第一份工作: liste_titulaires→affect_global→cherche_doublon

在我的 cherche_doublon 里面,我做我的事情,最后根据我的结果我做一个或另一个工作: Here the image of the subjob

我还有其他子任务。 好的一点是,在我的主要工作中,我迭代了列表中的每个元素,并且我的子工作中的所有处理都已完成。我使用上下文参数来传递我需要的信息。

现在一切正常。 感谢您的帮助。

达米安