如何在Talend中获取错误消息以通过电子邮件发送?

时间:2016-07-25 15:21:26

标签: sql talend

是否有人可能知道如何在Talend中获取错误消息?

我有tMSSqlInput ==> tMSSqlOutput。 (见下面的架构)。

如果抛出错误,我想在邮件正文中找到它,并发送它,而不是默认发送邮件。

我找到了类似的东西:

  • globalMap.put("errorCode", input_row.message);
  • "The message is: "+(String)globalMap.get("errorCode")

但我不知道,在哪里放置第一行。显然它会在tMSSqlOutput内的某个地方。但在哪里?

提前感谢你们。

schema

2 个答案:

答案 0 :(得分:2)

包括tmysqloutput在内的大多数talend组件都有错误消息(after),一旦组件失败或成功,它就可用。你可以在下一个组件中的组件后面访问这些变量中的值说tMysqloutput --->(OnComponentOK)----> tJava ...在tJava中你可以通过下面的表达式看到tmysqloutput组件中有什么 - System.out.println((String)globalMap.get(“tMysqlOutput_1_ERROR_MESSAGE”));

您可以将此错误消息存储在全局变量中,然后在tSendEmail组件中使用此全局变量。 要为全局变量赋值,您将使用globalMap.out(“variableName”,value); 获取此值 (字符串)globalMap.get( “VARIABLENAME”)

另一种方法是在应用程序中添加tLogCatcher并在组件中启用Die on error选项。会发生什么事情,现在当引发异常时tLogCAtcher将捕获消息和代码,您可以将tLogCatcher连接到其他组件以获取此错误代码并在tSendEmail等下一个组件中使用它来发送电子邮件

答案 1 :(得分:1)

我们所做的是,使用“OnComponentError”链接将所有组件连接到tRowGenerator。现在,在tRowGenerator中,您可以创建类似ErrorDesc的列名,然后在Environment变量中,使用带有全局变量的三元运算符来获取错误消息。

  

(((String)globalMap.get(“tRowGenerator_1_ERROR_MESSAGE”))!= null)? “生成SP输入”+((String)globalMap.get(“tRowGenerator_1_ERROR_MESSAGE”)):   (((String)globalMap.get(“tMysqlSP_2_ERROR_MESSAGE”))!= null)? “调用过程”+((String)globalMap.get(“tMysqlSP_2_ERROR_MESSAGE”)):   (((String)globalMap.get(“tFileDelete_1_ERROR_MESSAGE”))!= null)? “tFileDelete”+((String)globalMap.get(“tFileDelete_1_ERROR_MESSAGE”)):“”

然后,您可以将此错误说明发送到电子邮件组件或显示在控制台上。