![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
此时sy-subrc为1001状态,查看返回消息内表PT_MESSTAB[],找到出错Message ID以及错误号:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
SE91查看详细错误消息:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
没有屏幕 & & 的批输入数据
对应的英文:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
No batch input data for screen & &
选中,看长文本:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
还是看不懂,云里雾里,只能暂停............
从上面调式300屏幕仔细来看,只走了PBO模块,PAI没有走,没触发PAI,录屏中已传OKCODE,即使这里手动设置还是不行.............
很久后,硬是没找到问题...................
没触发PAI,这问题真是难找,原来的别人的录屏又那么复杂,没有适当数据,重录出来的屏幕流程与原来又不一样,产品还没找出原因,干脆一不做二不休,将出问题的这个300屏幕也从屏幕流中干掉,屏我也懒得重录了
通过上面可以看出,问题出在SAPLSTRD的300屏幕:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
从前台调试,可以得知是300屏幕是如下传输请求屏幕:
现在要跳过300屏幕,与前面跳过1000屏幕一样,先要找到调用这300屏幕的地方,其实从上面图就可以看出,是在 TRINT_ORDER
_CHOICE调用的,所以打开这个函数,再次进行代码修订:
与略掉1000屏幕一样,将300里PAI与PBO相应影响数据的Module调用Form扣出来,在这里直接调用,不走屏幕的PAI与PBO。
修改后,继续跑后台测试,很不幸,还是出问题:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
初看起来与前面 SAPLSTRD的300屏幕问题一样,也是没有什么批输入数据什么的,但经过下面调试,发现还真不一样,前面是没有触发PAI,这里又是什么情况呢,继续调试上面出错的JOB,调试前,与前面一样,在SAPMWBE3的101屏幕中的PAI与PBO各打上一个断点,查看屏幕的走向逻辑:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
继续调试上面出错的JOB,F8直到上面两处断点地方,继续调试JOB:
经过F6一步步调试,Module调用顺序 :PBO --> PAI --> PBO,这与前面1000屏幕不一样,PAI触发过(1000屏幕只执行过PBO),问题有所变化:虽然都是 没有屏幕 && 的批输入数据 的问题,但可能引发的原因不一样,以经过一段时间的思考,这里应该是屏幕没有退出,因为PBO执行了第二次,问题的原因应该是在修改标准函数 TRINT_ORDER_CHOICE引起的。下面那就在TRINT_ORDER_CHOICE函数里修改的地方打上断点:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
然后继续调试上面JOB,F8直到上面的断点地方:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
F6一步步执行,发现当执行完 PERFORM append_to_order. 后,直接退到了上面第二行,即调用0101屏幕的地方:
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
现在可以看出,函数 TRINT_ORDER_CHOICE 就直接退到0101屏幕了,说明该函数中有 LEAVE SCREEN 语句,退出了401屏幕:
按理来说,TRINT_ORDER_CHOICE 函数的调用不应该退出401屏幕,因这个函数是在 PERFORM append_to_order. form中调用的,该函数是我们修改标准程序调用的,而修改的目的是不走屏幕流程,即屏幕以及流程跳转语句应该也要屏蔽掉,所以继续看append_to_order Form,发现最后面有 LEAVE SCREEN 语句:
总结:出现No batch input data for screen & &问题
1、BDC输入没有转到录屏,比如下面红框注掉,但流程中有这个屏(注:如果有相关的BDC录屏,但没有对应的屏幕,不会出这种问题):
![ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“-LMLPHP]()
(现在上面图中1000与300 BDC录屏的代码,对于后台可以留着,也可以去掉,但前面需要,所以还是留着吧)
2、屏幕没有结束,就像上面0101屏幕那样,PBO --> PAI --> PBO,屏幕未退出,会导致屏幕流不能正常结束
最后,解决此问题花费了大量时间,硬是将一个只能前台跑的Tcode,改成了后台,反反复复调试了N遍,也可能是刚开始思路的问题,很长一段时间未能解决,但后来坚信一个总体思路:解决有问题的屏幕,不能解决的直接跳过它,直接将其PBO和PAI的代码抠出来直接调用,略过屏幕。可能解决这个屏幕,又会出新的问题,那再按这个思路解决新的屏幕问题.........
唉,ABAP真是各种苦,在我快要放弃的时候,又出现了转机。如是Java我想问题早已得以解决..........
所以,ABAP注定是孤独的...............