SAP出口、增强

1.通过SE80,在程序子例程下查找USEREXIT_*的程式(此为第一代增强,修改需要开发者KEY)

 

2.通过SE16N中MODSAP表查找EXIT_*程式(此为第二代增强)或通过SMOD、CMOD查找,命名方式:EXIT_Program name_3 digit suffix

SMOD包含可以使用的出口程序,CMOD里面包含此增强的实现代码,看通过以下方式查找相应的出口:

首先根据事物码找到对应程序名(SE93),然后SE11查询数据表TADIR(限定PGMID=“R3TR”、 OBJECT= “PROG”、OBJ_NAME=程序名)找对应开发类,如果找不到对应开发类,通过SE38查看程序,在菜单 “转到-属性”中找开发类。然后再用SE11查询数据表TADIR(限定PGMID=“R3TR”、 OBJECT= “SMOD”、DEVCLASS=开发类)就可找到此程序可用的增强点(并非万能)。然后根据增强点从表MODSAP中就可以看到此增强具备哪些功能【屏幕增强(S)、菜单增强(C)、功能增强(E)、表增强(T)】

如:SE93找到KS01(成本中心创建)对应程序SAPLKMA1,然后SE11查询表TADIR找不到对应开发类,通过SE38查看SAPLKMA1开发类为KBAS,然后再用SE11查询表TADIR可以查到可用增强点有COCCA001、COCCA002、COOMEP01、COOMKA01、COOMKS01、COOMKS02、COOMKS03、COOMLA01,然后将这些增强点在MODSAP中查询,就可以发现只有COOMKS01可以对成本中心主数据屏幕做增强,并且此增强点包括了屏幕增强、菜单增强、表增强、功能增强。

 

 

 CMOD:创建增强项目时以“Z”开头命名

 

  

 示例:VA01事务,对应的程序是SAPMV45A ,在程序里查找(CALL CUSTOMER-FUNCTION、

CALL CUSTOMER-SUBSCREEN字符串)如下代码:

CALL CUSTOMER-FUNCTION '003'

exporting

xvbak = vbak

xvbuk = vbuk

xkomk = tkomk

importing

lvf_subrc = lvf_subrc

tables

xvbfa = xvbfa

xvbap = xvbap

xvbup = xvbup.

则出口模块对应的名称就是: EXIT_SAPMV45A_003

 

通过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。
 
查找源程序,在程序中查找代码段 CL_EXITHANDLER => GET_INSTANCE
就可以找到该程序所用到的BADI。
 
实现BADI的方法
进入SE19,选择Create Implementation中的Classic BADi
posted @ 2021-02-25 13:55  kang09  阅读(872)  评论(0)    收藏  举报