从标题来看,CMOD 是树木,smod 是树枝。
1.1 SMOD包括具体的增强CMOD是包含一组SMOD编写的增强. 1.2 User exits (Function module exits)是sap其命名规则如下: EXIT_ 示例: sd的VA01事务,相应的程序是SAPMV45A , 您将在程序中找到(使用)CALL CUSTOMER-FUNCTION字符串)以下代码: CALL CUSTOMER-FUNCTION '003' exporting xvbak = vbak xvbuk = vbuk xkomk = tkomk importing lvf_subrc = lvf_subrc tables xvbfa = xvbfa xvbap = xvbap xvbup = xvbup. 则exit calls function module的名称就是: EXIT_SAPMV45A_003 2、先试用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.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.
MODTYP 类型:E : 功能退出S : 屏幕T : 表C : GUI代码
中的SMOD 是进入组件的输入界面,CMOD是进入项目的输入界面:
CMOD和SMOD的区别?smod进入是直接输入组件的rsap0001的输入界面,cmod进入的是项目的输入界面。 sap 的所有enhancement的用户出口都在smod里和cmod里面 ,用户可以创建project然后去激活sap提供给用户的用户出口,我们服务器已经创建了一个bw67的project,其中激活了rsap0001, 所以cmod和smod都可以调用rsap0001。 smod是对所有的enhancement exit的操作,而cmod里可以为部分特定的exit做一个项目,也就是集合,并且可以通过项目去访问这些事先设定好的exit,就是在一个建立好的项目中所用到的exit就不能再被另外一个项目用了。比如我再建立一个项目,用到rsap0001的时候,就会提示一行德文,猜测它的意思是已经被BW67用掉了。 一个bw系统的用户出口时定死的,rsap0001对应的就是数据源增强,rsr00001对应的就是变量增强,被用户分配到某个project以后,就能不再被其他project使用了。