SAP增强一
第一代增强:根据事务代码对应的程式,在对应的子例程中查找USEREXIT_*程式
表/结构的增强是 append structure。
源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到。
需要修改sap的标准代码,集中在一些名称倒数第二个字符为Z的include程序中,所有程序的全局数据都可以使用。
这类增强因为系统升级时会被新版本覆盖后不能使用,且如果在代码中改变了全局变量,还可能会破坏系统原有的逻辑,因而现在很少使用。
第二代,基于函数模块的增强出口
这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
第二代增强中主要有4类:
1)E. Function exits:函数增强,这些出口是以 Exit_打头的函数,可以到SE37中查看,也可以在数据字典中TFDIR(函数表)中查询Exit_打头的函数
2)C.GUI codes:GUI增强
3)S. Screens:屏幕增强 增强屏幕的调用是使用CALL CUSTOMER-SUBSCREEN
4)T. Tabes:表结构增强
增强相关函数和表格
Function:
DYNP_VALUES_READ
MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)
MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)
MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)
MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)
Table:
TFDIR->function module table
MODSAP->sap enhancement table
TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增强)
CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜单文本增强)
MODSAP,这个表里重要的字段增强名(Name),组件类型(TYP: E C S T)
组件功能模块名(Member):里面记录了所有enhancement的增强.
TFDIR ,所有的函数表,重要字段FUNCName(函数名),MAND(功能模块激活状态如果是C代表此函数模块激活).
4、Exit实现方法
SMOD:查看增强组件,CMOD:实现增强
T-CODE:CMOD,通过此代码创建项目,一个项目可以有多个组件。
点击函数模块进入,再点击显示对象列表,在包含中找到与INCLUDE后面同名的文件,点击右键选择创建。
上述这类增强通过事务码SMOD进行维护,CMOD进行实现。SMOD中的一个增强可以包含上述的源代码、屏幕和表增强。
Enhancement比较重要的表MODSAP,组件功能模块名(Member):里面记录了所有enhancement的增强;表TFDIR,包括出口函数在内的所有函数表,字段MAND(值为C表示此出口函数被激活)
二代增强的查找方法:
第一种方法,在程序中搜索customer-function找到后面的3位数字编号,出口函数名称由三部分组成:EXIT_<程序名>_<3位数字>,通过找到的出口函数名到MODSAP表里查找对应的出口对象(即增强点),再通过SMOD查看这个增强点
针对数据表的增强出口是 “CI_ ”打头的结构,这些结构将.INCLUDE 结构的形式包含到时相应的数据表中,用户可以通过向这些结构中添加字段从而达到对数据表字段的增加
第二种方法,通过调试系统相关函数:MODX_FUNCTION_ACTIVE_CHECK,找出口函数,通过找到的出口函数名到MODSAP表里查找对应的出口对象(即增强点),再通过SMOD查看这个增强点
第三种方法,SE93先查找到对应的程序名,然后SE11查询数据表TADIR(限定PGMID=“R3TR”、 OBJECT= “PROG”、OBJ_NAME=程序名)找对应开发类,如果找不到对应开发类,通过SE38查看程序,在菜单 “转到-属性”中找开发类。然后再用SE11查询数据表TADIR(限定PGMID=“R3TR”、 OBJECT= “SMOD”、DEVCLASS=开发类)就可找到此程序可用的增强点。
通过调试MODX_FUNCTION_ACTIVE_CHECK系统函数,运行ME23N,找到名为EXIT_SAPMM06E_006的出口函数,再根据这个出口函数到MODSAP表中找到对应的出口对象(增强点)MM06E005,再通过SMOD查看这个出口对象(增强点):
MM06E005包含功能出口、屏幕出口、表出口三种增强
在上面MM06E005增强的SMOD界面上双击表出口“CI_EKKODB”,可以对EKKO表结构进行扩充
在上面MM06E005增强的SMOD界面上双击出口函数“EXIT_SAPMM06E_006”,则会打开函数编辑器SE37,再点击工具栏中的“Display Object List”按钮,则切换到SE80编辑器模式中显示,这样就可以找到出口函数所在的函数组为XM06,主程序为SAPLXM06:
INCLUDE LXM06TOP(Global Data在此为增强定义global data)
INCLUDE LXM06UXX.(Function Modules实际上包含所有可用的user exit出口函数)
INCLUDE LXM06F00. (SAP-Formpool for Customer-Use可在此建立Form pool)
INCLUDE ZXM06ZZZ. (Subprograms and Modules,在此创建增强子屏幕)
定义全局变量
屏幕字段名的前缀必须要设置为系统预先定义好的全局 EKKO_CI 内表类型名,这样屏幕字段的就可以自动与该内表结构进行交互,EKKO_CI即为系统预先就定义好的增强屏幕所需的结构类型:
当向结构预留结构CI_EKKODB中扩展字段时,EKKO_CI也会自动的得到扩展,还有EKKO表结构也会被扩充
子屏幕
在MM06E005增强点的SMOD界面上双击出口函数“SAPMM06E 0101 CUSTSCR1 SAPLXM06 0101”屏幕出口行,则会新创建屏幕0101(屏幕属性需设置为子屏幕):
屏幕与业务表数据间传递