增强(Enhancement)在SAP ABAP开发中主要有以下几种方法:
-
第一代:基于源码增强(子过程 subroutine) 这种方法需要修改源代码,通过在现有程序中插入新的子过程来实现增强功能。
-
第二代:基于函数出口增强(Function Module) 这种增强方法通过在现有函数模块中插入新的出口来实现。
-
第三代:基于类的增强(BADI) BADI(Business Add-In)是一种基于类的增强方法,允许开发者在不修改核心代码的情况下实现自定义功能。文章中介绍了如何创建和实现BADI,以及如何在多个BADI实现中选择调用哪一个。
-
第四代:Enhancement-Point Enhancement-Point是一种更先进的增强方法,它允许开发者在程序中直接插入新的代码段。这种方法类似于User Exit,可以直接使用程序中已定义的变量,而不需要通过接口传递参数。
这些增强方法为SAP ABAP开发者提供了灵活的扩展和定制功能的方式,能够在不破坏原有系统稳定性的前提下,实现新的业务需求。
以下简单介绍几种查询增强点方法:
方法一
执行ABAP性能分析事务码SE30,运行TCODE如MB1B,点Evaluate后,查看运行时间分析评估结果,点击页签:命中清单。找以“exit”开头的SAP Function,如:EXIT_SAPMM07M_001,这个FUNCTION就是事务码:MB1B提供的一个出口。鼠标双击:
双击’001‘
此INCLUDE程序就是增强程序,至于如何查看这个增强是属于哪个SMOD,可查询MODSAP这个表(SAP Enhancements).
方法二
找BADI的方法。
先执行事务码:SE24,查看类对象:CL_EXITHANDLER, 在其方法:
GET_INSTANCE的( CALL METHOD CL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE)打上一个断点。
接下来运行事务代码如MIGO,当有BADI时将会被执行,这时在DEBUG模式下,会进入类CL_EXITHANDLER 的GET_INSTANCE 方法,按F6执行这个方法之后,点参数EXIT_NAME查看其对应的值,所有的方法实现都在此类对象中,此时就是我们所要找的BADI如MB_MIGO_BADI。
实现BADI的方法
进入SE19,选择Create Implementation中的Classic BADi
另一种方法
查找源程序,在程序中查找代码段 CL_EXITHANDLER => GET_INSTANCE
就可以找到该程序所用到的BADI。
方法三
通过开发类找出口
以ME21N事务代码为例,进入TCODE后,选择点系统 -》状态 -》程序名称,双击后进入到程序中,再点菜单栏中的 转到 -》属性,找到开发类的名称,比如ME21N的开发类是‘ME’。
如果是找出口,则到SMOD事务代码中,点 加强边的按纽,在开发类中输入‘ME’,回车后就会显示出所有的出口。见下图:
找BADI也是同样的过程,只是到SE18中去确定BADI。 此方法找出来的出口,不是针对某个程序特定需求的出口,而是把开发类所对应的出口全找出来,所以还要通过自己的判断找到所需求的出口。
不过,SAP 最新的隐式增强技术不需要这么麻烦了,如对于函数G_SET_GET_ALL_VALUES需在其最后处增加一段代码,进入SE37,操作如下:
之后一步一步操作即可创建自己特定需求的代码。这种方法一般在子程序或函数模块中实施增强。