
首先,事务CMOD(增强)是SAP ERP标准事务代码是package: SECE的一部分。是对话框事务,程序是SAPMSMOD,屏幕编号1010。
其次,这也是学习的重点:CMOD是SAP使用事务代码提供第二代增强方法:SAP增强管理(SMOD)并增强编辑器(CMOD)维护。 CMOD增强是用函数包装的, 使用标准程序Call Customer-Function 'xxx通过在程序中搜索,可以调用函数模块 Customer-Function寻找第二代增强,第二代增强函数名构成Exit_程序名_'001(3 digital number)'。 可以用SE37搜索EXIT_SAP* 试一下。 它们在发布时只有一个代码include "ZXxxxxxx",修改时,第一代增强一样直接双击申请对象键INCLUDE,忽略弹出的警告信息,回车后可以编写代码。 但与此同时,这种增强和下一代的增强不能像第一代那样随意使用程序的全球数据,只能使用接口中传递的参数。因为有关键字Customer,故被称为。
-
E. Function exits:函数增强
(如:销售单VA02中,对PO长度限制在10-15位之间,不能是中文等特殊字符,如对PO采购日期不能晚于交货日期的检验等,这些都会用来函数增强
-
C.GUI codes:GUI状态增强
-
S. Screens:屏幕增强 增强屏幕的调用时使用(不常用,一般在上线之初,上线后不常用)
-
T. Tabes:表结构增强 详细介绍:?
-
1、 在程序中搜索CUSTOMER-FUNCTION找到后面的3位数字编号,出口函数名的规则为
EXIT_<</label> 程序名 >_<3 位数字 > ,然后通过找到的出口函数名到MODSAP 表里查找所对应的出口对象 (即增强点) -
2、 通过调试系统相关函数:
MODX_FUNCTION_ACTIVE_CHECK -
3、 代码找增强 相关增强检查函数: 1)
E类 : MODX_FUNCTION_ACTIVE_CHECK ( 检查功能出口类用户出口是否被激活 ) 2)C类 MODX_MENUENTRY_ACTIVE_CHECK (检查菜单关键字类增强激活状况) 3)S类:MODX_SUBSCREEN_ACTIVE_CHECK (检查屏幕类增强激活状况):
-
-
以VA01对应的主程序SAPMV45A为例,在源码中可以查找包含CALL
CUSTOMER-FUNCTION 的字符串,可以找到这样的代码:
-
SMOD是系统增强的集合管理,包含具体的增强;而CMOD是是增强项目的实现,包含一组SMOD编写的增强。 可以这么说:CMOD 是树木,SMOD 是树枝;
-
先试用SMOD建立一个SAP增强;
2.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕; 2.2、点击“组件”按钮,进入组件维护屏; 2.3、将光标移到“功能模块名”,输入模块名,如:EXIT_SAPLV60B_001; 2.4、选择“代码修改”按钮进入函数模块; 2.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;
3. 使用CMOD建立增强项目 3.1、输入自定义的项目名,点击“创建”; 3.2、进入增强项目,选择“配置增强”,进入增强配置屏幕; 3.3、输入增强名如:SDVFX0013. 3.4、保存,并退出;
4、使用CMOD将增强项目激活,便大工告成。
如何查找、判断是否存在相应增强的定义:
***如何查找*判断是否存在相应增强的定义(SMOD)
select single name from modsapa
into mod0-name
where name = 'PPCO0002'.
if sy-subrc = 0.
endif.
select single *
from tadir
into ps_tadir_db
where pgmid = 'R3TR'
and object = 'SMOD'
and obj_name = 'PPCO0002'.
***判断是否存在相应增强项目的定义(CMOD)
SELECT SINGLE name
FROM MODATTR
into mod0-name
WHERE NAME = 'PPCO0002'..
***提取增强的定义的组件 (可以用此反查增强定义)
select * from modsap where name = 'PPCO0002'.
***判断该增强是否移植到BADI实现
*Enhancement & has already been migrated in Business Add-In definition
select single migrated badi_def
into (migrated, exit_name)
from modsapa
where name = modname.
if sy-subrc = 0 and migrated = seex_true.
message s621 with modname exit_name.
check mode ne 'CHAM'.
endif.
-
CMOD和SMOD的区别?smod进入是直接输入组件的rsap0001的输入界面,cmod进入的是项目的输入界面。
-
sap 的所有enhancement的用户出口都在smod里和cmod里面 ,用户可以创建project然后去激活sap提供给用户的用户出口,
-
我们服务器已经创建了一个bw67的project,其中激活了rsap0001, 所以cmod和smod都可以调用rsap0001。
-
smod是对所有的enhancement exit的操作,而cmod里可以为部分特定的exit做一个项目,也就是集合,
-
并且可以通过项目去访问这些事先设定好的exit,CMOD实施项 目具有排他性,在一个建立好的CMOD项目中所用到的exit就不能再被另外一个项目用了。
比如我再建立一个项目,用到rsap0001的时候: 会报错: SAP 增强 rsap0001 已属于项目 ZPP0001
6.一个bw系统的用户出口时定死的,rsap0001对应的就是数据源增强,
rsr00001对应的就是变量增强,被用户分配到某个project以后,就能不再 被其他project使用了。
敲回车,厉害了,他又回来了,所以在这里是没法删除的;
那么,回到CMOD 初始界面 先取消激活
再修改增强分配,就有了删除按钮