0
点赞
收藏
分享

微信扫一扫

CMOD增强


​​​​




CMOD简介



首先,事务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,故被称为Customer Exits(客户出口)



CMOD增强_数据库


CMOD增强主要分4类

  1. E. Function exits:函数增强
    最常用,在SAP上线很多年后都会使用,如:销售单VA02中,对PO长度限制在10-15位之间,且不能为中文与其他特殊字符,还有如对PO采购日期不能晚于交货日期的检验等,这些都会用来函数增强
  2. C.GUI codes:GUI状态增强
  3. S. Screens:屏幕增强
    增强屏幕的调用时使用CALL CUSTOMER SUBSCREEN(不常用,一般在上线之初才会做,上线后不常用)
  4. T. Tabes:表结构增强
    详细介绍:?


    CMOD增强_mysql_02 查找CMOD增强的方法
  • 1、 在程序中搜索CUSTOMER-FUNCTION找到后面的3位数字编号,出口函数名的规则为EXIT_<</strong>程序名>_<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    
    (检查屏幕类增强激活状况)
       SAP的任何一个事务码 对应的标注程序都留下了大量的用户出口,正是SAP灵活的配置和强大的用户出口,
     才使其产品轻松应对各种复杂需求成为可能,   系统还为能快速找到和激活这些增强进行了有效组织,各类
    增强被记录在table中并且提供了相关检查函数,从而更方便系统实施过程 。       

  • 以VA01对应的主程序SAPMV45A为例,在源码中可以查找包含CALL CUSTOMER-FUNCTION的字符串,可以找到这样的代码:


CMOD增强_编程语言_03



CMOD增强_java_04



CMOD增强_java_05



CMOD增强_编程语言_06



增强名(Name,即出口对象名),


组件类型(TYP: E C S T),


组件功能模块名(Member):


里面记录了所有enhancement的增强。

TFDIR

所有的函数表,重要字段有FUNCName(函数名), MAND

(功能模块激活状态如果是 C

代表此函数模块激活)

CMOD增强_java_07



CMOD与SMOD的爱恨情仇



CMOD增强_数据库_08



  1. 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增强_python_09


CMOD与SMOD的爱恨情仇

  1. CMOD和SMOD的区别?smod进入是直接输入组件的rsap0001的输入界面,cmod进入的是项目的输入界面。
  2. sap 的所有enhancement的用户出口都在smod里和cmod里面 ,用户可以创建project然后去激活sap提供给用户的用户出口,
  3. 我们服务器已经创建了一个bw67的project,其中激活了rsap0001, 所以cmod和smod都可以调用rsap0001。
  4. smod是对所有的enhancement exit的操作,而cmod里可以为部分特定的exit做一个项目,也就是集合,
  5. 并且可以通过项目去访问这些事先设定好的exit,CMOD实施项 目具有排他性,在一个建立好的CMOD项目中所用到的exit就不能再被另外一个项目用了。

        比如我再建立一个项目,用到rsap0001的时候:
       会报错: SAP 增强 rsap0001 已属于项目 ZPP0001

    6.一个bw系统的用户出口时定死的,rsap0001对应的就是数据源增强,

       rsr00001对应的就是变量增强,被用户分配到某个project以后,就能不再           被其他project使用了。


CMOD增强_java_10


小技巧

1. 怎么创建CMOD增强
参考:​​增强篇4 CO01生产订单屏幕增强​​

2. 小技巧:怎么删除CMOD增强?
CMOD实施了一个增强,但是不需要了,怎么删除呢?


CMOD增强_mysql_11





 要删除PPCO0005 这个增强,进入编辑状态,发现没有删除按钮,  把PPCO0005 这项删除掉 ​CMOD增强_python_12



敲回车,厉害了,他又回来了,所以在这里是没法删除的;

那么,回到CMOD 初始界面 先取消激活


CMOD增强_python_13



 再修改增强分配,就有了删除按钮

CMOD增强_mysql_14



临时发现要删的是 IWO10011 这个组件,删除,保存再激活项目就好了

CMOD增强_mysql_15





举报

相关推荐

0 条评论