SAP HCM 标准程序如何定位内表赋值 ABAP DEBUG SCRIPT

本文介绍了如何通过ABAP SCRIPT DEBUG脚本在SAP HCM标准程序中快速定位内表M_TABLE_BUTTON的赋值位置。在调试标准TCODE PPOSE时,通过设置观察点和脚本代码,最终在方法中找到内表赋值的代码行。

Complacency is the enemy of study

学习的敌人是自己的满足。

标准内表定位代码位置!!!

   不知道大家有没有尝试体会过debug标准程序,debug过程中发现SAP标准的内表不知道什么时候赋值,或者类的静态属性什么时候改变的,本文通过ABAP DEBUG SCRIPT的方式快速定位内表赋值或者类的静态属性值变换时候的代码位置,加快解决问题能力,因为很多教程都是一个简单的例子,我这次的例子是调试标准程序PPOSE,尽可能的实战模拟现实案例。

ABAP SCRIPT DEBUG脚本编辑初始化

1首先我们来熟悉一个TCODE:SAS,这个TCODE是专门写脚本代码的,原理很简单,就是在标准程序或者自定义程序中插入一些脚本代码,脚本代码能获取到标准程序或者自定义程序的变量,然后你进行一些加工处理,下图就是abap script的显示界面

图片

业务场景:需要在标准TCODE中找到M_TABLE_BUTTON内表赋值的地方

2 在这里介绍几个常用的按钮,默认进来的时候是上图那样,系统会有代码的框架,一般来说我们都是在method的script方法中实现,代码编写完成后点另存为按钮,这样代码可以保存到数据库里面也可以保存到本地文件,可以根据需求处理。调试过程中有几个选项比较重要,调试器单步、断点已达到、观察点已到达这三个,如果说你的内表是全局变量,一般我们选择观察点已到达没然后后面会有一个小笔,输入观察点的条件就可以,比如我想看M_TABLE_BUTTON这个内表的变量,在条件中输入lines(M_TABLE_BUTTON) > 即可,此处注意,你这个M_TABLE_BUTTON表一定是针对debug程序而且的全局变量,如果是局部变量,你保存会提示监控点无法创建。

图片

图片

标准程序初始位置:对象实例化阶段,M_TABLE_BUTTON内表就在是这个对象的内表

3 我们现在开始debug变成程序PPOSE,我在778行打一个断点,然后不不知道M_TABLE_BUTTON内表在什么时候赋值,但是知道在778行以后的某个程序。

图片

如何加载脚本代码:在debug界面中加入自己编辑的脚本代码

4 我切换到脚本的以前,然后选择加载脚本,因为开始的时候我已经通过tcode:sas创建好我的脚本,脚本名字叫zvivi,所以这个时候我只要引入就可以,我开始尝试使用观察点的方式,但是系统提示M_TABLE_BUTTON不能创建,估计这个内表的作用域有限,所以我切换到调试单独的选项,这个意思,就是没有执行一行代码,系统就会调用这个脚本程序,脚本程序执行完以后,系统又会执行下一步标准代码,如此反复,我的脚本代码写的逻辑是读取M_TABLE_BUTTON内表,然后循环他,如果代码能进入循环,就断点停止,这样系统就会帮我去找到什么时候赋值的,只要能进入我脚本停止的代码,那么只要执行完这个段脚本,看调用路径,就知道在标准代码的什么维护是内表赋值的地方。

图片

如何快速停留在break-point位置

5 然后不停点启动脚本按钮,因为我们选的是调试器单步,所以需要不停的按F8,大概按拉40次左右,系统进入我debug模式,效果如下

图片

正确停留在需要停止的位置:系统自动停留在符合条件的位置

6 这个时候我去看table_CLONE的内表值,发现有数据,那就是找到M_TABLE_BUTTON内表的值啦,现在就是把这个脚本跑完,然后切换到桌面1的页签

图片

停留在断点位置之前,就是M_TABLE_BUTTON内表赋值地方

7 此时发现我的代码停在815行,那脚本执行肯定是815以前的代码,我看应该就是806行的这个方法中,点进入看看这个方法

图片

最终找到具体位置:找到M_TABLE_BUTTON最终赋值地方。

8发现确实M_TABLE_BUTTON表有赋值的地方,在52行中发现他有append的动作,所以就定位到标准程序他在什么时候赋值。

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wl8511

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值