基于函数模块的第二代增强 Customer Exits
SAP提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现
源代码增强以函数模块形式发布,在 SAP 的发行版本中,使用 CALL CUSTOMER-FUNCTION <3位数字> 调用这些函数模块,出口函数名称由三部分组成:EXIT_<程序名>_<3位数字>(注:这里的<程序名>即指调用此出口函数的程序名),它们在发布时只有一句代码 INCLUDE xxxxxxx。
用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写相应的代码了。
这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
针对数据表的增强出口是“CI_”打头的结构,这些结构将.INCLUDE结构的形式包含到时相应的数据表中,用户可以通过向这些结构中添加字段从而达到对数据表字段的增加
增强和出口函数相关的表:
MODSAP这个表里重要的字段增强名(NAME),组件类型(TYP),组件功能模块名(MEMBER):里面记录了所有enhancement的增强。
TFDIR所有的函数表,重要字段FUNCName(函数名),MAND(功能模块激活状态如果是C代表此函数模块激活)。
第二代增强有四类
-
E. Function exits:函数增强
-
C.GUI codes:GUI增强
-
S. Screens:屏幕增强 增强屏幕的调用是使用 CALL CUSTOMER-SUBSCREEN
-
T. Tabes:表结构增强
查找增强的方法
方法一
在程序中搜索CUSTOMER-FUNCTION找到后面的3位数字编号,
出口函数名的规则为EXIT_<程序名>_<3位数字>,
然后通过找到的出口函数名到MODSAP表里查找所对应的出口对象(即增强点)
方法二
通过SE37中的:MODX_FUNCTION_ACTIVE_CHECK 函数来找,
在函数的最后一行打个断点,再运行TCODE的,如果有增强则会跳入DEBUG界面,在DEBUG界面中,查看L_FUNCNAME字段对应的值,此值就是就是要找的出口,
再去SE11中通过MODSAP来查看出口对就的是那个SMOD,接下来就可以在CMOD中创建增强组了,把找到的增强填入,最后根据实际的业务进行处理。
不同类型增强使用的Function:
[1].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)
[2].MODX_MENUENTRY_ACTIVE_CHECK、MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)
[3].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)
增强的维护
通过事务码 SMOD 、CMOD 进行维护, 两者界面基本一样,都可以查看“对象组件”并点击进入到function module界面进行abap代码编辑。
SMOD:用于激活增强;并可以对所有出口函数进行操作
CMOD:多了“增强分配”这个选项,需要先创建项目,将增强分配给这个项目(可以分配多个增强)之后才可以实现功能增强的操作,可见CMOD更偏向管理。CMOD只可以为部分特定的出口函数做一个项目,也就是说在一个建立好的项目中所用到的出口函数就不能再被另外一个项目用了,比如再建立一个新项目,用到已经分配过的增强,就会提示“已经被某某项目用掉了”。
CMOD用于字段增强,在BW中使用的较多,SMOD则主要用于ABAP中的增强出口程序
完成增强程序后,绿色标记的为函数功能模块已激活
SAP
提供的是
CUSTOMER-FUNCTION
,它是通过
SMOD
和
CMOD
完成实现。
源代码增强以函数模块形式发布,在
SAP
的发行版本中,使用
CALL
CUSTOMER-FUNCTION
调用这些函数模块,它们在发布时只有一句代码
INCLUDE
xxxxxxx
。用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关
的包含文件,
编写相应的代码了。
这些函数模块中只能使用接口中传递的参数,
不能使用调
用程序的全局变量。