增强(enhancement)的概念其实很广,SAP标准系统之上的所有二次开发,我们都可以理解为增强,做增强的目的就是标准的sap正常的业务系统不能满足实际需求,所以我们在标准的系统基础进行增加不同的功能来达到不同企业的要求,换句话说我们今天开发过程中所有的ADD-ON都可以说是增强开发。

      但作为开发人员所说的增强主要是标准系统事先预留好的接口,根据不同业务需求,进行开发,我们称为增强,又叫出口

      比如:1:在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型。

              2:在需要界面增强时,比如用户对某个字段要求大写,但是最终用户不按规范操作,这也可以在出口中自动转换,有些模块甚至能自定义数据库字段,并且可以在出口中增加字段输入。还有的模块能对输入数据检查,甚至实现自动替代等功能。

              3:有不规则业务时,比如按某种条件定价,可以设定从自己定义的表中按某种条件取值 

              4:搜索帮助的出口,可以对Sap标准的搜索帮助做权限控制。等等。

 Sap的用户出口发展至今有四代:

      一、第一代(基于源代码的增强)是sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码,它们在发布的时候都是空的,集中在一些文件名倒数第二个字符为Z的包含程序中,由于在标准程序中,所以所有程序的全局数据都可以使用,但同时系统升级时会被新版本覆盖;这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到;一般是以UserExit_打头的子模块。找到所要增强的的程序,查找UserExit关键字。

      这类增强事先要到 service marketplace 申请对象键(ACCESS KEY),然后才能修改这些子程序。

查找此类出口的方法:

      1、  在增强程序中找第二个字符为Z的包含程序;

      2、  在后台找对应模块增强;

      3、  在程序中搜索USEREXIT_打头的关键字子程序;

      4、  字节列出对象列表“Display Object List”按钮,在Subroutines列表下找“userexit”打头的子程序;                  

      二、第二代增强(基于函数模块的增强),用SMOD和CMOD维护;在SAP发布的版本中,使用Call customer-function ‘xxx’调用函数模块的,所以你可以通过在程序中搜cusomer-function来查找第二代增强,第二代增强函数名构成:Exit_程序名_’xxx(3 digital number)’,这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码include ‘xxxxxxx’,修改时无需像第一代增强一样需要ACCESS key,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数。

      第二代增强中主要有3类:1)E . Ehancement exits:这些出口 Exit_打头,你可以到SE37中查看,也可以在数据字典中TFDIR(函数表)中查询Exit_打头的函数。

                                       2)C .GUI codes,     (GUI增强)

                                       3)S . Subscreens(屏幕增强)。

                                       4)T. include structure增强

      Enhancement比较重要的表MODSAP,这个表里重要的字段增强名(Name),组件类型(TYP: E C S T),组件功能模块名(Member):里面记录了所有enhancement的增强.TFDIR所有的函数表,重要字段FUNCName(函数名),MAND(功能模块激活状态 如果是C代表此函数模块激活)。

  查找Enhancement的方法:

1、在程序中搜索Customer-function找到后面的3为digit suffix,然后出口函数组成就是Exit_程序名_3 digit suffix.

2、代码找增强 利用如下代码找enhancement(有些exit使用它并不能找到)

 1 TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
 2 TABLES : tstct.
 3 DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
 4 DATA : field1(30).
 5 DATA : v_devclass LIKE tadir-devclass.
 6 PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
 7 
 8 SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
 9 IF sy-subrc EQ 0.
10   SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
11   AND object = 'PROG'
12   AND obj_name = tstc-pgmna.
13   MOVE : tadir-devclass TO v_devclass.
14   IF sy-subrc NE 0.
15     SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
16     IF trdir-subc EQ 'F'.
17       SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
18       SELECT SINGLE * FROM enlfdir WHERE funcname =
19       tfdir-funcname.
20       SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
21       AND object = 'FUGR'
22       AND obj_name EQ enlfdir-area.
23 
24       MOVE : tadir-devclass TO v_devclass.
25     ENDIF.
26   ENDIF.
27   SELECT * FROM tadir INTO TABLE jtab
28   WHERE pgmid = 'R3TR'
29   AND object = 'SMOD'
30   AND devclass = v_devclass.
31   SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu AND
32   tcode EQ p_tcode.
33   FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
34   WRITE:/(19) 'Transaction Code - ',
35   20(20) p_tcode,
36   45(50) tstct-ttext.
37   SKIP.
38   IF NOT jtab[] IS INITIAL.
39     WRITE:/(95) sy-uline.
40     FORMAT COLOR COL_HEADING INTENSIFIED ON.
41     WRITE:/1 sy-vline,
42     2 'Exit Name',
43     21 sy-vline ,
44     22 'Description',
45     95 sy-vline.
46     WRITE:/(95) sy-uline.
47     LOOP AT jtab.
48       SELECT SINGLE * FROM modsapt
49       WHERE sprsl = sy-langu AND
50       name = jtab-obj_name.
51       FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
52       WRITE:/1 sy-vline,
53       2 jtab-obj_name HOTSPOT ON,
54       21 sy-vline ,
55       22 modsapt-modtext,
56       95 sy-vline.
57     ENDLOOP.
58     WRITE:/(95) sy-uline.
59     DESCRIBE TABLE jtab.
60     SKIP.
61     FORMAT COLOR COL_TOTAL INTENSIFIED ON.
62     WRITE:/ 'No of Exits:' , sy-tfill.
63   ELSE.
64     FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
65     WRITE:/(95) 'No User Exit exists'.
66   ENDIF.
67 ELSE.
68   FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
69   WRITE:/(95) 'Transaction Code Does Not Exist'.
70 ENDIF.
71 
72 AT LINE-SELECTION.
73   GET CURSOR FIELD field1.
74   CHECK field1(4) EQ 'JTAB'.
75   SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
76   CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
View Code

相关文章: