这是我的流程:
您可以在tJava_1中看到Java代码。它解析文件中的数据,如果它到达最后一个搜索页面,它会将值设置为true。这是tLoop_1的停止标准,如下所示:
我处理Talend变量错了吗?一旦达到Java代码中的条件,如何阻止循环运行?
答案 0 :(得分:10)
你不需要"宣言"或者"迭代"值。你想要的是"条件"中的一个变量。这是一个评估为true
的布尔值,当你想要结束循环时,它被设置为false
。
最佳实践说,您应该在运行时或启动子作业时将上下文变量用于提供给作业的实际上下文,然后在单个作业中使用globalMap作为全局可用变量。
所以在这种情况下你应该初始化一个布尔的globalMap变量设置为true(你可以在一个带有globalMap.put("loop",true)
的tJava组件中执行此操作或使用tSetGlobalVar组件)然后在你的tJavaRow中你可以将globalMap变量设置为false globalMap.put("loop",false)
。
如果你要使用" loop"作为你的globalMap变量,你可以在你的"条件"中使用((Boolean)globalMap.get("loop"))
。在tLoop。
这个简单的例子可能如下所示:
首先我们将循环变量设置为true
,因为我们希望它至少开始!
然后我们将while循环的条件设置为布尔全局变量:
最后我们在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")));
};