如何使用SMOD和CMOD进行SD的用户增强

摘要:
1.增强功能简介1.1 SMOD包含特定的增强功能,而CMOD包含SMOD编写的一组增强功能。1.2 1.2用户出口(Functionmodulexits)是sap提供的出口。其命名规则如下:EXIT_<Programname><3digitsufix>示例:SD VA01事务,对应的程序是SAPMV45A,您将在程序中找到以下代码(使用CALLCUSTER FUNCTION字符串):CAL

1、关于增强的简单介绍
1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强. 
1.2 User exits (Function module exits)是sap提供出口,它的命名规则如下:
EXIT_<program name><3 digit suffix> 
示例:
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、输入增强名如:SDVFX001
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.

MODTYP 类型:
E : 功能退出
S : 屏幕
T : 表
C : GUI代码
sap增强存在MODSAP表内

*获取增强组件的参见函数MOD_SAP_MEMBER_TEXT
*获得退出功能模块的信息

      select single * from tftit
             where "SPRAS" = '1' AND "FUNCNAME" = 'EXIT_SAPLCORE_001'
      if sy-subrc = 0.
      endif.

*值得学习的函数
MOD_KUN_ACTIVATE(会操作相关报表)


相关连接:

http://blog.csdn.net/compassbutton/archive/2007/03/19/1533453.aspx

http://blog.csdn.net/CompassButton/archive/2005/02/05/281437.aspx

免责声明:文章转载自《如何使用SMOD和CMOD进行SD的用户增强》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇4--SpringCloud-Ribbon/OpenFeign周阳老师C#反射实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Postgre Sql获取最近一周、一月、一年日期函数

  使用Postgre Sql获取近一周、一年、一月等系统函数调用如下,使用方面相对于Ms Sql server 容易了许多。 --当前时间 select now(); --current_timestamp 同 now() 函数等效 select current_timestamp --近一周 select now() - inte...

Mysql 日期时间类型详解

MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型。 这些数据类型的主要区别如下: * 如果要用来表示年月日,通常用DATE 来表示。 * 如果要用来表示年月日时分秒,通常用DATETIME 表示。 * 如果只用来表示时分秒,通常用TIME 来表示。 * 如...

【转修正】sql server行版本控制的隔离级别

在SQL Server标准的已提交读(READ COMMITTED)隔离级别下,一个读操作会和一个写操作相互阻塞。未提交读(READ UNCOMMITTED)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用户不能接受的。有些关系型数据库(例如Oracle)使用的是另一种处理方式。在任何一个修改之前,先对修改前的版本做一个复制[WX1],后续的一...

C# 连接sql数据库对 access,excel导入导出操作 一、SQL SERVER 和ACCESS的数据导入导出

C# 连接sql数据库对 access,excel导入导出操作一、SQL SERVER 和ACCESS的数据导入导出常规的数据导入导出:使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation○2Services(数据转换服...

数据库系列(三)之 锁

锁的意义      数据库中有很多‘锁’的使用。怎么合理并灵活的应用是一个值得讨论深究的问题。      锁为何而存在?为了在同一时间内,只能处理一种请求。而避免导致的数据错乱。例如商城中,库存的扣减;金融系统中金钱的转账。      在耳熟能详的商城中,库存扣减有很多种方法来处理,其中数据库锁是很大众的一种方式。在应用程序中,存在着多个用户同一时间购...

mysql查看表中列信息

查看所有数据库中所有表的数据库名和表名 SELECT `TABLES`.`TABLE_SCHEMA`, `TABLES`.`TABLE_NAME` FROM `information_schema`.`TABLES` 查看所有数据库中所有基本表的数据库名和表名 SELECT `TABLES`.`TABLE_SCHEMA`, `TAB...