SAP ENHANCEMENT

来源:互联网 发布:阳西网络问政最新消息 编辑:程序博客网 时间:2024/05/17 08:46

sap的用户出口总共有三代:
1、第一代
sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。
示例:USEREXIT.. in SAPMV45A

2、第二代
sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。

3、第三代
sap提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),可以通过EXIT_HANDLER这个单词查找BADI。

对于第一代增强,可以用以下方法查找增强:
打开欲增强的程序,点击工具栏上的“Display Object List”按钮,选择Subroutines,查找以“UserExit”开头的子程序,根据子程序前面的注释文档来查找用户出口

对于第二代增强,可以用以下方法查找增强

用户增强通常包括下面3类,顾名思义,就是增强SAP的可能没有提供的功能(通过后台配置也不能实现).
1.E Enhancement exits :就是常说User_exit (用户出口)
使用SE37搜索EXIT*的函数大都是做exit用的,通常里面预包含了一个Z开头
的程序. SE16查询TFDIR(函数表)输入EXIT*也可.
2.C GUI codes( GUI接口增强)
3. S Subscreens (屏幕增强)
Enhancement在表MODSAP可看到,而TFDIR字段 MAND(值为C表示此出口函数被激活).使用SMOD(CMOD)当然可激活exit function,有时候一时难以查询到相关Enhancement时可使用下面程序将出口函数激活.

REPORT Zactexitfun .
data ztfdir like tfdir .
* select single * from tfdir into ztfdir
* where FUNCNAME =
* 'EXIT_SAPMM06E_013'.
* ztfdir-MAND = 'C' .
* update tfdir from ztfdir.
* 将EXIT_SAPMM06E_013换成实际所需exit函数名
update tfdir set MAND = 'C'.
where FUNcname = 'EXIT_SAPMM06E_013'.

***当然也可SE16:MODSAP表enhancement输入EXIT_SAPMM06E_013然后得到enhancement name MM06E005后使用SMOD测试激活exit函数.
增强相关函数和表格
Function:
[1].DYNP_VALUES_READ
[2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)
[3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)
由于读者可能接触user exit最多,除了附录光盘有个查找ZFINDEXIT的程序外(有些exit使用它并不能找到),另一个直接有效的方法就是使用这个函数,SE37设好断点后执行tcode如其有exit就会调用此函数.
[4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)
[5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)
Table:
[1]. TFDIR->function module table
[2]. MODSAP->sap enhancement table
[3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增强)
[4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜单文本增强)

***注意,为了确保一个出口被真正应用,必须同时激活相关程序(SE38)和出口函数(SMOD|CMOD,反正就是要保证tfdir-mandt=’C’,用程序也可.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lqq417/archive/2009/02/05/3863520.aspx

************同仁查找EXIT的方法****************

***方法一****************************************

通过SE30,运行TCODE后,点Evaluate后,查看运行时间分析评估:命中清单。

找以“exit”开头的SAP程序,如:EXIT_SAPLIE01_007,

这个FUNCTION就是TCODE提供的一个出口。

至于如何查看这个增强是属于哪个SMOD,能够查阅 MODSAP这个表(SAP Enhancements). 


以上的增强是第二代增强。 

***方法二****************************************

通过SE37中的:MODX_FUNCTION_ACTIVE_CHECK 函数来找,

在函数的最后一行打个断点,再运行TCODE的,如果有增强则会跳入DEBUG界面,在DEBUG界面中,查看L_FUNCNAME字段对应的值,此值就是就是要找的出口,

再去SE11中通过MODSAP来查看出口对就的是那个SMOD,

接下来就可以在CMOD中创建增强组了,把找到的增强填入,

最后根据实际的业务进行处理。


***方法三****************************************

找BADI的方法。

先运行SE24,查看类对象CL_EXITHANDLER, 在其方法:GET_INSTANCE的14行( CALL METHOD CL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE)打上一个断点。

接下来运行事务代码,当有BADI是将会被执行,这时在DEBUG模式下,会进入类CL_EXITHANDLER 的GET_INSTANCE 方法,按F6执行这个方法之后,点参数EXIT_NAME查看其对应的值,所有的方法实现都在此类对象中,此时就是我们所要找的BADI。

实现BADI的方法

进入SE19,选择Create Implementation中的Classic BADi

另一种方法(跟上面的差不多)

查找源程序,在程序中查找代码段 CL_EXITHANDLER => GET_INSTANCE

就可以找到该程序所用到的BADI。


*******************************************

针对BADI的增强

1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。

2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

4、se18 查找接口,se19 实现接口就可以实现用户增强。

现在很多朋友使用 BAPI 都处于一种 google 的状态,就是说只能在网上搜索到相关的函数和调用方法,却难以跟实际业务对应起来,这对应付眼前开发是足够了,但是换个需求换个业务,又得抓瞎。

大家都有一个疑问,我知道的这个 BAPI 函数究竟属于哪个业务对象呢?今天我们就来揭密。

BAPI 函数跟业务对象的关系存储在表 SWOTLV 中,对于一个业务对象,除了函数外,还存储了一些其它信息,我们这里先不管它。这个表的 ABAPNAME 字段存储的就是函数名称,而 LOBJTYPE 字段则存储

0 0
原创粉丝点击