二、 第二代增强(基于函数模块的增强)
用SMOD和CMOD维护;在SAP发布的版本中,使用Call customer-function ‘xxx’调用函数模块的,所以你可以通过在程序中收cusomer-function来查找第二代增强,第二代增强函数名构成:Exit_程序名_’xxx(3 digital number)’,这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码include ‘xxxxxxx’,修改时无需像第一代增强一样需要ACCESS key,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数。
第二代增强中主要有3类:
E . Ehancement exits: 这些出口 Exit_打头,你可以到SE37中查看,也可以在数据字典中TFDIR(函数表)中查询Exit_打头的函数。
C .GUI codes, (GUI增强)
S . Subscreens(屏幕增强)。
T. include structure表增强
Enhancement比较重要的表MODSAP,这个表里重要的字段增强名(Name),组件类型(TYP: E C S T),组件功能模块名(Member):里面记录了所有enhancement的增强.TFDIR所有的函数表,重要字段FUNCName(函数名),MAND(功能模块激活状态 如果是C代表此函数模块激活)。
但作为开发人员所说的增强主要是标准系统事先预留好的接口,根据不同业务需求,进行开发,我们称为增强,又叫出口。比如:
SAP的用户出口发展至今有四代:
一、第一代(基于源代码的增强)是sap提供一个空代码的子过程
在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标 准代码,它们在发布的时候都是空的,集中在一些文件名倒数第二个字符为Z的包含程序中,由于在标准程序中,所以所有程序的全局数据都可以使用,但同时系统 升级时会被新版本覆盖;这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到;一般是以UserExit_打头的子模块,所以找到所要增强的的程序,可以查找UserExit关键字。
这类增强事先要到 service marketplace 申请对象键(ACCESS KEY),然后才能修改这些子程序。
查找此类出口的方法:
二、 第二代增强(基于函数模块的增强)
用SMOD和CMOD维护;在SAP发布的版本中,使用Call customer-function ‘xxx’调用函数模块的,所以你可以通过在程序中收cusomer-function来查找第二代增强,第二代增强函数名构成:Exit_程序名_’xxx(3 digital number)’,这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码include ‘xxxxxxx’,修改时无需像第一代增强一样需要ACCESS key,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数。
第二代增强中主要有3类:
Enhancement比较重要的表MODSAP,这个表里重要的字段增强名(Name),组件类型(TYP: E C S T),组件功能模块名(Member):里面记录了所有enhancement的增强.TFDIR所有的函数表,重要字段FUNCName(函数名),MAND(功能模块激活状态 如果是C代表此函数模块激活)。
查找Enhancement的方法:
利用t-code查找增强出口的程序工具
一个功能非常全面的增强出口查找工具
DYNP_VALUES_READ
MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)
MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)
MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)
MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)
我们可以在函数最后设置断点,然后通过跑对应的增强程序就会去调用这样的函数,这样你就可以在调试模式下找到对应的增强。
下面附加出几个重要的表:
注意:出口真正应用是要在激活的状态下,也就是在TFIDR下的MAND字段为C.激活的时候要同时激活程序(se38)和出口函数(smod, cmod,出口程序都可)当然一般情况,我们知道出口模块到modsap中找到对应的增强。可以通过下面的程序将其激活。
*获得出口功能模块的信息
*判断该增强是否移植到BADI实现
三、第三代增强(基于面向对象概念的增强BADI(business add-in))
源代码发布以接口的方式,通过接口的方法调用来实现使用的。用户增强实际上是实现一个或多个基于这个接口的实现类,因为接口类实际上是 一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(adapter)来区别用于不同的业务场景的。这种增强是用SE18 SE19来实现的。
BADI的查找方法:
- BADI对象的信息存储在SXS_INTER,SXC_EXIT,SXC_CLASS和SXC_ATTR这四个表中。
- SAP BADI程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例,这个方法实际就是对上面4个表和视图V_EXT_IMP和V_EXT_ACT进行查询和搜索的。我们可以在这个方法处设置断点,获取实例。
- 它的调用方式是call method(instance), 可以通过exit_handler关键词来查找。
- ST05选择“table buffer trace”而不是常用的"SQL trace",然后查找上面的几个表和视图找到对应的BADI.
- se18 查找接口,se19 实现接口就可以实现用户增强
延伸阅读:SAP第三代增强BADI的实现方法及查找方式四、第四代其实是第三代的加强switch Framework
当sap进入newweaver 7.0以后推出的新增强体系,将BADI进行了改进,叫新BADI了。还新增 Enhancement Spot 和 Enhancement Section 以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。