增强出口查找

用户增强大致分为三类

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.
    DESCRIBE TABLE jtab.
    SKIP.
    FORMAT COLOR COL_TOTAL INTENSIFIED ON.
    WRITE:/ 'No of Exits:' , sy-tfill.
  ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95) 'No User Exit exists'.
  ENDIF.
ELSE.
  FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
  WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.

AT LINE-SELECTION.
  GET CURSOR FIELD field1.
  CHECK field1(4) EQ 'JTAB'.
  SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
  CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

 

第三代出口, BADI.

BADI 全称Business Add-In, 它的主要技术是基于ABAP对象来增强. 

SAP的BADI因系统版本差别可能会有不同, R/3 中的BADI被称为Classic BADI, 而到了SAP Netweaver 中ABAP被升级到了7.0版本, 新增了BADI Enhancement Spot 对象, Classic BADI的功能被保留.

SE18 用于创建及维护BADI对象, SE19用于维护BADI的实例, 即如何来实现BADI对象的功能.


查找SAP BADI的方法.

1. 通过SE24 查找. 

输入 CL_EXITHANDLER, 


双击 GET_INTANCE.

 

设定断定.



执行Tcode, 当有出口时, 程式会自动进入Debug界面. 观察 EXIT_NAME的值.


 

2. 同样可能SE80中通过Package查找.


 

3. 通过ST05 追踪, 

BADI对应的数据表为 SXS_INTER, SXC_EXIT, SXC_CLASS 和 SXC_ATTR,而这些表都是通过视图V_EXT_IMP 和 V_EXT_ACT来查询的。

Activate Trace.



执行Tcode, 完成后点Deactivate Trace, 并Display Trace.

Object Name栏输入, V_EXT_IMP,V_EXT_ACT

Operation栏输入 OPEN.



找出需要的BAPI. 

V_EXT_IMP的去除 IF_EX_后就是BIDA对象名

 

 

 

还有个第四代

4.第四代其实是第三代的加强switch Framework

当SAP进入NewWeaver 7.0以后推出的新增强体系,将BADI进行了改进,叫新BADI了。还新增 Enhancement Spot 和 Enhancement Section 以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可以增强.这类增强一般可以加在一个函数过程的开头和结尾的地方.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值