公司今年计划大批扩建门店,需要自动化维护相关主数据,其中就有一步通过调用 WB01的BDC录屏来自动创建地点,前台跑没有问题,但后台JOB死活不行,屏幕是以前同事录好的,只能硬着头皮修改。
后台任务日志:
抛RAISE_EXCEPTION异常。
用ST22进去跟踪出错的代码:
出错的地方:
结合前台调式,发现了出错屏幕:
即SAPLPLANT_DISPLAY_CUSTOMIZING的1000屏幕出问题,经查证原因是屏幕上的ALV是OO方式写的
解决办法:后台时跳过该屏幕,但处理逻辑不能省。由于屏幕只是个交互过程,可以在后台代码直接将有用户输入的值给赋值上,屏幕自然就可以不要了,具体实现就是将原屏幕PAI与PBO相关的代码抠出来直接调用,而不再Call 屏幕
查找该屏幕被调用的地方:
发现两处调用:
将这两处都打上断点:
然后断点调试看是哪个地方,SM37进去:
勾上出错的JOB,输入JDBG事务码,回车:
屏幕,在PBO与PAI都打上断点:
为什么要选择这两个Module进行断点呢?原因就是因为该屏幕出问题,但不知道是PBO里,还是PAI里出问题,所以两个都断点一下,再调试看看屏幕的走向。
断点打好后,同样再调试该JOB:
F8到下面断点暂定,然后F6看屏幕一步步走的轨迹:
继续F6,发现所有屏幕都退出,PAI模块根本没调用,直接退到我们自己的主调程序里: