获取ODI package中任何一个对象执行失败的错误信息

原文链接:http://odiexperts.com/get-the-error-message-of-any-failed-odi-objects-inside-package/

**********翻译的不好请见谅**************************

Get the Error Message of any Failed ODI objects inside Package

获取ODI package中任何一个对象执行失败的错误信息

When we have multiple Interface, Variable  and other ODI objects inside the Child Package  and when such Child Package Fails we get the Error message ‘The scenario did not end properly’  and we need to look into the operator .

当我们的ODI package中含有多个接口,变量和其他ODI 对象时,当这个package执行失败时我们会得到'The secenario did not ent properly',因此我们需要查看其内部的执行结果。

Here is a simple code  and process which can look into the Child Session and get the correct error message and also later we can capture the same in the Error Log .

本文给出一个程序案例,演示如何获取一个package包运行中的子会话的准确错误信息,并且捕获这些信息到错误日志。



 

Create a Global Variable called "GET_ERROR_MSG" and paste the following codes ,  so you can call and use it for multiple package.

创建一个全局变量"GET_ERROR_MSG" 并且指定如下SQL,你可以在任何一个package中使用这个全局变量。

SELECT ' The  '||CASE
WHEN SSS.STEP_TYPE='F' THEN 'INTERFACE'
WHEN SSS.STEP_TYPE='VD' THEN 'VARAIBLE DECLARATION'
WHEN SSS.STEP_TYPE='VS' THEN 'SET/INCREMENT VARAIBLE'
WHEN SSS.STEP_TYPE='VE' THEN 'EVALUATE VARIABLE'
WHEN SSS.STEP_TYPE='V' THEN 'REFRESH VARIABLE'
WHEN SSS.STEP_TYPE='T' THEN 'PROCEDURE'
WHEN SSS.STEP_TYPE='OE' THEN 'OS COMMAND'
WHEN SSS.STEP_TYPE='SE' THEN 'ODI TOOL'
WHEN SSS.STEP_TYPE='RM' THEN 'REVERSE ENGINEERING MODEL'
WHEN SSS.STEP_TYPE='CM' THEN 'CHECK MODEL'
WHEN SSS.STEP_TYPE='CS' THEN 'CHECK SUB MODEL'
WHEN SSS.STEP_TYPE='CD' THEN 'CHECK DATA STORE'
WHEN SSS.STEP_TYPE='JM' THEN 'JOURNALIZE MODEL'
WHEN SSS.STEP_TYPE='JD' THEN 'JOURNALIZE DATA STORE'
END||' '||SSS.STEP_NAME||
' , has failed due to - '||
SNET.TXT
FROM <%=odiRef.getObjectName("SNP_SESSION")%> SS,
<%=odiRef.getObjectName("SNP_SESS_STEP")%> SSS,
<%=odiRef.getObjectName("SNP_EXP_TXT")%> SNET
WHERE SSS.SESS_NO=SS.SESS_NO
AND SNET.I_TXT=SS.I_TXT_SESS_MESS
AND SNET.TXT_ORD=0
AND SS.PARENT_SESS_NO ='<%=odiRef.getPrevStepLog("SESS_NO")%>'

 [ Note :select the Work repository schema in the variable so that getobjectname can calculate accordingly the values, if in case you are using other schema which have select permission on work Repository schema , replace <%=odiRef.getObjectName("")%> with the required schema name. ]

【注意:在选择工作存储库的方案时,如果你正在使用其他方案,可以用< % = odiRef.getObjectName(" ")% >取代所需的模式名,这样getObjectname方法可以计算相应的值。】

In the first step call an OdiOutFile and uncheck Append option so that new File is created for a daily run  with  Header and Date .

在第一步我们调用OdiOutFile组件,不勾选追加选项,这样可以可以每天创建一个新的带有头和日期的文件。



 

Call the Child package and call the Variable   and  join the KO step ( red) to the Variable so that when ever the Child Package fails only then the variable is called else process the next child Package.

调用package并且下一步调用全局变量,使用KO线连接到变量,这样可以让程序只有在第一个package失败时才会调用变量,否则进行下一个package运行。

In the next step , call the OdiOutFile and mention the path to File mentioned in Step 1 and in the Text mention the variable name and keep repeating the steps for multiple child packages.

在下一步,调用OdiOutFile并且指定在第一部初始化文件时指定的目录,在文本正文指定全局变量的名称'#GET_ERROR_MSG',并在没个package后都重复上述操作。



 

This way you can capture all the Failed ODI objects Error Messages into Single Log and send them as an attachment through OdiSendMail.

这样你就可以捕获任何ODI对象执行过程中的异常信息,并且写入一个日志文件;你也可以调用OdiSendMail将日志文件作为附件发送出去。



 

猜你喜欢

转载自zhuangrucai.iteye.com/blog/2048298