我正在尝试在tLoop中运行子级作业。子作业连接到salesforce,并将“ Account”对象下载到本地SQL Server表。与Salesforce的连接存在问题,几乎不需要尝试进行连接。因此,我将连接内容放入子作业中,现在尝试循环调用子作业。下面是我父母工作的照片。
如您在图像中所见,由于子作业中的Salesforce连接问题,tRunJob_1出现错误。这是正确的行为。
连接到OnComponentError的setRetryConnect具有以下代码:context.retryConnect = true;
连接到OnComponentOk的setRetryConnect具有以下代码:context.retryConnect = false;
因此,我根据子作业是成功还是失败来触发此上下文变量。
我的tLoop如下:
我希望tLoop运行多次,直到条件保持为真为止。直到它继续出错为止。但是,它只迭代一次然后停止。谁能让我知道在这里需要进行哪些更正才能使tLoop正常工作?
答案 0 :(得分:0)
我无法用SalesForce
来解决您的问题,但是通过查看您的工作,我的感觉是,当您说-“先迭代一次然后停止”是您的预期行为。
根据tRunJob
之后的作业流程,您正在使用OnComponentOk/OnComponentError
触发器,该触发器将处理和停止作业运行,因为它将完成作业执行。理想的做法是将所有内容保存在subjob
帖子tLoop
中,以便迭代直到满足条件。
这里使用tSetGlobalVar
定义了一个全局变量(代替上下文变量)。然后在((Boolean)globalMap.get("tLoop"))
的“条件”中将globalMap变量用作tLoop
。
然后最后在tJava
组件中运行一些代码,该代码可以执行某些操作,并有条件地将全局变量设置为false,以标记循环的结束。
tRunJob
提供了返回码((Integer)globalMap.get("tRunJob_1_CHILD_RETURN_CODE"))
如果您要多次运行子Job,并且如果其中一次迭代失败,则希望Job以非零值退出,那么在每次迭代之后,您应该测试此返回码并将其存储在自己的globalMap Object中不为零
int returnCode = ((Integer)globalMap.get("tRunJob_1_CHILD_RETURN_CODE"));
if (returnCode > 0) {
globalMap.put("tLoop", false);
}
else {
System.out.println(returnCode);
};
答案 1 :(得分:0)