众所周知,bdoc中包含着CRM和ECC或者mobile client交互过程中很多重要的信息。学会如何准确分析bdoc error是保证数据正确传输的一个很重要的能力。但是大家经常会面对bdoc error不知道从何下手,找不到处理的方向。Don't worry!在这篇文章中,我将为大家介绍如何处理E04类型的bdoc error。

E04 error被称为“Bdoc validation error”,是bdoc error中比较常见的一种。顾名思义,这个error通常发生在CRM这边validation的过程当中。我在我们内部系统选取了一个例子来给大家做详细的步骤解析,来告诉大家如何处理这一error。
1. 先要选取这一行的bdoc error,然后点击“Show BDoc Msg errors/Receivers”按钮(如下图所示),就能看到bdoc error的详细信息了。点击错误后边的Longtext按钮,通常能看到一些注释,可以根据这些注释来检查你的customizing。在我们这个例子里边,注释是空的,所以我们接着进行下一个步骤。

2. 可以试着点击“reprocess”按钮来对这个bdoc error进行再处理。

3. 如果再处理也不好用,你可以针对bdoc error中包含的那个object来执行request load。用t-code R3AR2来定义request load的object,用t-code R3AR4来执行这个load,再通过t-code R3AR3来观察load的进度。比如我们的例子,通过error信息我们可以看到是bp在CRM这边不存在造成的这个error,那我们就可以定义request load从ERP重新download这个BP/customer。实际上,这个R11124 error通过重新download这个bp也就成功解决了。
4. 如果我们想通过debug来看这个error是从哪里抛出的,我们应该怎么做呢?我们看到error信息的最后一行有这样的字眼“Validation error occurred: Module ****, BDoc type ****”。我们可以从这个validation函数开始debug,在这个函数中设断点,然后点击reprocess按钮,程序就会停在这个函数中。再通过设置watchpoint在error代码出,执行,程序就会停到error抛出的地方了。
也是拿我们的这个例子来说,validation的函数是CRM_BUPA_MAIN_VAL。这个函数的名字可以在t-code SMO8FD中通过bdoc类型找到。我们在这个函数开始处设置断点,然后再处理这个bdoc error。

可以看到这时候程序停在了这个函数处。
之后我们通过Breakpoints -> Breakpoint at -> Breakpoint at message,来在error message R11 124处再设置断点。


点击F8。看!现在你看到是哪里抛出的这个bdoc error了。

在分析的过程中,我们发现其实E04这个类型的error并不是通过middleware抛出的,因此我们应该通过分析不同application的validation来解决这个error。如果你依然不能解决这个bdoc error,那么就根据这个validation函数或者抛出error的函数属于哪个模块,来报SAP incident到对应的模块。
针对这一话题,我同时还创建了SAP KBA 2300784, 如果有兴趣,大家可以继续查看这个KBA。
英文原版链接:http://scn.sap.com/docs/DOC-71725