开发基础 报表教程 数据字典 对话编程 表单打印 增强出口 SAP接口 S/4 HANA
实战案例 实战笔记 资料下载 CRM
问答互助 会员分享 俱乐部 广告区
论坛指南、建议和投诉
Twilight发表于 2014-05-02 19:11qincai1928 最后回复于 2023-11-02 14:58 [复制链接] 43943 73
使用道具 举报
Twilight
管理员
发表回复 回帖后跳转到最后一页
进入事务SE19,选择Create Implementation中的Classic BADi,输入事先查找到的EXIT_NAME,这个EXIT_NAME是在SE18事务中存在的东西;
点击Create Impl,输入实现名称后点击确定
点击保存,激活(如果是ECC6.0及以上版本,则还需要指定对应的Enhancement Spot,才可以完全创建成功,这个可能是为了保证NEW BADI的向上兼容而采用的一种方法)。
双击进入方法 CHANGE_SEGMENT_PSEGMENT,即可在里面实现功能;
下面再运行F-02记账,执行程序,即可进入此段代码。
二、查找方法
方法1:用事务SE24打开类CL_EXITHANDLER,因为在ABAP中的BADI执行前都要执行此类的一个GET_INSTANCE方法来判断BADI定义是否已经实现,如果已实现并处于激活状态,则BADI实现中的客户代码将会被执行。
双击GET_INSTANCE方法
在CASE SY-SUBRC处设置断点
运行业务事务,如ME21N,在断点处查看EXIT_NAME,就是你所要找的BADI定义。然后在表SXC_EXIT中就可以查找该定义是否已实现,若已实现,可以看到实现名称。
方法2:通过st05跟踪,badi对应的数据表为 SXS_INTER, SXC_EXIT, SXC_CLASS 和 SXC_ATTR,而这些表都是通过视图V_EXT_IMP 和 V_EXT_ACT来查询的。
ST05追踪操作,然后输入条件过滤
通过查询的结果可以看出,视图V_EXT_IMP的BADI的接口类名字都是以IF_EX_开头的,其中IF_EX_之后的就是对应BADI接口的定义。
方法3:找到需要增强T-code的程序代码,然后SE38在程序中搜索关键字CL_EXITHANDLER
其中的exit_name就是这个程序的所有BADI出口,然后根据描述找到正确的。
我们根据以上3中方法,是能找到很多个BADI的,那么怎样才能判断哪个是我们需要的呢?
1、排除法:
2、根据BADI描述猜测
根据以上方法可大幅缩小范围,然后se18查看BADI描述,大致判断是否是想要找的
3、BREAK-POINT精确定位