这是我的过程:

Job Layout and tJava_1 configuration

您可以在 tJava_1 中看到 Java 代码。它从文件中解析出数据,如果到达最后一个搜索页面,它将把一个值设置为 true。这是 tLoop_1 的停止标准,如下所示:

tLoop configuration

我对 Talend 变量的处理是否错误?一旦达到 Java 代码中的标准,如何停止循环运行?

有帮助吗?

解决方案

您不需要“声明”或“迭代”值。你想要的是“条件”中的一个变量,它是一个布尔值,其计算结果为 true 并设置为 false 当你想结束循环时。

最佳实践表明,您应该在运行时或启动子作业时使用上下文变量作为提供给作业的实际上下文,然后使用 globalMap 作为单个作业中全局可用的变量。

因此,在这种情况下,您应该将布尔 globalMap 变量初始化为 true (您可以在 tJava 组件中使用 globalMap.put("loop",true) 或使用 tSetGlobalVar 组件),然后在 tJavaRow 中,您可以将 globalMap 变量设置为 false globalMap.put("loop",false).

如果您要使用“loop”作为您的 globalMap 变量,那么您将使用 ((Boolean)globalMap.get("loop")) 在 tLoop 的“条件”中。

一个简单的例子可能如下所示:

While loop job layout

首先我们将循环变量设置为 true 因为我们希望它至少能够开始!

tSetGlobalVar configuration

然后我们将 while 循环的条件设置为布尔全局变量:

tLoop configuration

最后,我们在 tJava 组件中运行一些代码,执行某些操作并有条件地将全局变量设置为 false,从而结束循环:

if (((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")) == 3) {
    globalMap.put("loop", false);
} else {
    System.out.println(((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")));
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top