[转载]SAP 增强开发_SAP刘梦_新浪博客

原文地址:SAP 增强开发 作者:SAP169

用户增强大致分为三类
1. E Enhancement exits 就是常说的 USER_EXIT.
2. C GUI Code.
3. S Subscreens 屏幕增强.

1. 菜单出口-Menu Exits
定义自己的菜单
2. 屏幕出口-Screen Exits
定义自己的屏幕.
3. 功能模块出口-Function Module Exits
在SAP应用程式中添加功能
4. 关键字出口-Keyword Exits
在ABAP/4字典中的关键字数据元素添加文档. 结果是你在使用这些数据元素的字段处按F1后会出现你自定义的说明文档.

用户出口的发展:
第一代: 基于源代码的增强:
实质上对 SAP 所预留的空的子过程进行编码, 用户可在这个子过程中添加自定义的代码, 以增强 SAP 标准程序的控制功能. 现在较少使用,  需要申请 access key 才能更改.
查找此类出口的方法:
1. 在增强程序中查找第二个字母为"Z"的包含程序.

2. 通过开发类来查找基于源码的用户出口
该类增强大部分都包含在开发类VMOD中, 可通过 SE80 查找该类包含的对象.

3. 在后台找对应模块的增强.

4. 在程序中查找以 USEREXIT_ 开头的关键子程序.

第二代: 基于函数模块的增强:
用 SMOD 和 CMOD 维护.
SMOD 包含具体的增强,而 CMOD 是包含一组SMOD编写的增强.  
与增强相关的Table:
    [1]. TFDIR->function module table
    [2]. MODSAP->sap enhancement table
    [3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增强)
    [4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜单文本增强)
所有的 Enhancement 在表 MODSAP 中, 而表TFDIR是看此 Enhancement 是否被激活, 看字段MAND是否为"C".
第二类增强主要有3类.
1. E类, Enhancement Exits,也叫功能出口.
函数名称由三个部分组成, 其命名规则为: EXIT_<程序名>_<3位数字>, 在程序中通过引用代码
"CALL CUSTOMER-FUNCTION <3位数字>"来调用.
一个函数只会对应一个出口,但一个出口对象可以对应多个函数.
例如:V45A0003会同时对应 EXIT_SAPMV45A_003, EXIT_SAPMV45A_004两个函数.
在 MODSAP, MODSAPT 两个表中存放函数和出口的关系及出口对象的描述.
查寻此类出口的方法:
1. 利用系统Function查找.
 [1].DYNP_VALUES_READ
 [2].MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)
 [3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)
 [4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)
 [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)
SE37 进入上面Function后, 设定断点, 如图
[转载]SAP <wbr>增强开发
运行Tcode, 如果有出口程式就会自动进入Debug画面,
[转载]SAP <wbr>增强开发

观察L_FUNCNAME , 得到出口函数后, 可以在Table MODSAP 中查到出口对象. 

2. 逆向查找法:
   先通过源码找到函数, 再通过函数来查找出口对象.
以 MB1C 为例,
[转载]SAP <wbr>增强开发
[转载]SAP <wbr>增强开发

[转载]SAP <wbr>增强开发
得到这些 Number 后, 用通常的出口结构 EXIT_SAPMM07M_ 001/005/009
再用 SE37 进去查看, 通过参数,说明等找出准确的出口.

3. 通过包名查找.
先得到源程序名, 用SE38再获取包名.
还以 MB1C 为例:
[转载]SAP <wbr>增强开发

执行 SMOD
[转载]SAP <wbr>增强开发

[转载]SAP <wbr>增强开发

[转载]SAP <wbr>增强开发
根据描述找出需要的Exit.

4. 通过SE80 查找.
[转载]SAP <wbr>增强开发

[转载]SAP <wbr>增强开发

5. 通过编写程式查找.
*&---------------------------------------------------------------------*
*& Report  Z_EXIT_HELP
*&
*&---------------------------------------------------------------------*
REPORT  z_exit_help .

TABLES  : tstc , tadir , modsapt , modact , trdir , tfdir , enlfdir .
TABLES  : tstct .
DATA  : jtab  LIKE tadir  OCCURS  0  WITH  HEADER  LINE .
DATA  : field1 ( 30 ) .
DATA  : v_devclass  LIKE tadir -devclass .
PARAMETERS  : p_tcode  LIKE tstc -tcode OBLIGATORY .

SELECT  SINGLE *  FROM tstc  WHERE tcode  EQ p_tcode .
IF sy -subrc  EQ  0 .
   SELECT  SINGLE *  FROM tadir  WHERE pgmid  =  'R3TR'
   AND object  =  'PROG'
   AND obj_name  = tstc -pgmna .
   MOVE  : tadir -devclass  TO v_devclass .
   IF sy -subrc  NE  0 .
     SELECT  SINGLE *  FROM trdir  WHERE name  = tstc -pgmna .
     IF trdir -subc  EQ  'F' .
       SELECT  SINGLE *  FROM tfdir  WHERE pname  = tstc -pgmna .
       SELECT  SINGLE *  FROM enlfdir  WHERE funcname  =
      tfdir -funcname .
       SELECT  SINGLE *  FROM tadir  WHERE pgmid  =  'R3TR'
       AND object  =  'FUGR'
       AND obj_name  EQ enlfdir -area .

       MOVE  : tadir -devclass  TO v_devclass .
     ENDIF .
   ENDIF .
   SELECT *  FROM tadir  INTO  TABLE jtab
   WHERE pgmid  =  'R3TR'
   AND object  =  'SMOD'
   AND devclass  = v_devclass .
   SELECT  SINGLE *  FROM tstct  WHERE sprsl  EQ sy -langu  AND
  tcode  EQ p_tcode .
   FORMAT  COLOR COL_POSITIVE  INTENSIFIED OFF .
   WRITE :/ ( 19 )  'Transaction Code - ' ,
   20 ( 20 ) p_tcode ,
   45 ( 50 ) tstct -ttext .
   SKIP .
   IF  NOT jtab[]  IS  INITIAL .
     WRITE :/ ( 95 ) sy - uline .
     FORMAT  COLOR COL_HEADING  INTENSIFIED  ON .
     WRITE :/1 sy -vline ,
     2  'Exit Name' ,
     21 sy -vline  ,
     22  'Description' ,
     95 sy -vline .
     WRITE :/ ( 95 ) sy - uline .
     LOOP  AT jtab .
       SELECT  SINGLE *  FROM modsapt
       WHERE sprsl  = sy -langu  AND
      name  = jtab -obj_name .
       FORMAT  COLOR  COL_NORMAL  INTENSIFIED OFF .
       WRITE :/1 sy -vline ,
       2 jtab -obj_name  HOTSPOT  ON ,
       21 sy -vline  ,
       22 modsapt -modtext ,
       95 sy -vline .
     ENDLOOP .
     WRITE :/ ( 95 ) sy - uline .
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值