转自:http://hi.baidu.com/andy_yanhui/blog/item/f487b34f5be70600b2de05fa.html
(一)什么是增强(Enhancement)?
简单地说,增强就是ERP系统中标准程序的出口,在该出口中由用户根据企业实际需求编写客户化逻辑代码。增强是ERP系统设计时考虑到企业实际的流程有可能和系统默认标准流程不同,在标准流程框架下专门留的接口,每个接口对应一个客户化函数,这些出口函数有标准处理程序传入的参数和输出参数,用户可根据系统输入参数做条件编写适合本企业流程的逻辑,然后通过输出参数传输回。
(二)用户增强分类
SAP的用户增强通常包括下面3类。
1.E类:Enhancement exits,即通常所谓的用户出口(User_exit )
用户出口也叫功能出口(Function Exit)。
使用Tcode:SE37搜索EXIT*,找到的函数大都是做系统预留的出口函数,前面说过,用户出口是标准程序留给用户的接口,标准程序通常不允许用户任意修改,如果修改需要申请Access Key,而且修改标准程序可能导致的错误
erp公司
通常是不负责的。在SAP中,自定义的程序通常以保留字Y或Z开头,因此,出口函数中都预包含了一个Z开头的程序。
2.C类:GUI接口(GUI codes)
3.S类:屏幕增强(Screen Exit)
比如,在建立采购订单,工单和固定资产主数据时,系统都预留屏幕增强,也就是说允许用户自定义用户输入界面并编写相应的输入输出处理程序。
在各类增强中,可能还用户自己定义结构或表格,系统对应类型T类。比如增强MM06E005
允许用户建立两个结构CI_EKKODB和CI_EKPODB。
接下来将重点介绍功能出口的应用。
(三)组织用户增强
相关增强表格:
MODSAP:增强表格
TFDIR:包括出口函数在内的所有函数表(E类)
CUATEXTS:修改 GVI 界面,界面: 菜单文本被客户(C类)
TSDIR:动态程序区 CALL CUSTOMER SUBSCREEN(S类)
TSDIR:动态程序区 CALL CUSTOMER SUBSCREEN(S类)
* 对于以EXIT开头的出口函数,TFDIR-MAND值为C表示此出口函数被激活。
相关增强检查函数:
MODX_FUNCTION_ACTIVE_CHECK:检查E类用户出口是否被激活。
MODX_MENUENTRY_ACTIVE_CHECK:检查C类增强激活状况
MODX_SUBSCREEN_ACTIVE_CHECK: 检查S类增强激活状况
你可能会发现,SAP的各模块的任何一个事务码(Tcode)对应的标准程序都留下了大量的用户出口,正是SAP灵活的配置功能和强大的用户出口才使其产品轻松应对各种复杂需求成为可能,系统还为能快速找到和激活这些增强进行了有效组织,各类增强被记录在table中并且提供了相关检查函数,从而更方便企业用户。
熟悉ABAP开发的朋友通常都收集了一个可以输入事务码快速找到系统留下的所有出口的程序,下表就是一个检测系统增强被激活的简单参考程序。
(以下ABAP code在原作者的基础上经过调试,修正了一些格式错误,可以正常输出结果)
*&---------------------------------------------------------------------*
*& Report ZFINDACTEXIT
* 该程序可以检测出系统所有被激活的用户增强.
* By oliver. on 2009/10/21 .
* Used to find out all the activated user-exit of SAP .
REPORT ZFINDACTEXIT .
TABLES: MODSAP,TFDIR.
DATA : BEGIN OF ITAB_EXIT OCCURS 0,
FUNCNAME LIKE TFDIR-FUNCNAME,
MAND LIKE TFDIR-MAND,
NAME LIKE MODSAP-NAME,
END OF ITAB_EXIT .
DATA : FIELD1( 30).
SELECT A~FUNCNAME A~MAND B~NAME INTO TABLE ITAB_EXIT
FROM TFDIR AS A INNER JOIN MODSAP AS B
ON A~FUNCNAME = B~MEMBER
WHERE A~MAND = 'C' AND A~FUNCNAME = B~MEMBER .
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement Name',
21 SY-VLINE ,
22 'Activated Exit Function',
95 SY-VLINE.
WRITE:/( 95) SY- ULINE.
LOOP AT ITAB_EXIT.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 SY-VLINE,
2 ITAB_EXIT-NAME HOTSPOT ON,
21 SY-VLINE ,
22 ITAB_EXIT-FUNCNAME,
95 SY-VLINE.
ENDLOOP.
AT LINE-SELECTION.
GET CURSOR FIELD FIELD1.
SET PARAMETER ID 'MON' FIELD SY-LISEL+ 1( 10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
*& Report ZFINDACTEXIT
* 该程序可以检测出系统所有被激活的用户增强.
* By oliver. on 2009/10/21 .
* Used to find out all the activated user-exit of SAP .
REPORT ZFINDACTEXIT .
TABLES: MODSAP,TFDIR.
DATA : BEGIN OF ITAB_EXIT OCCURS 0,
FUNCNAME LIKE TFDIR-FUNCNAME,
MAND LIKE TFDIR-MAND,
NAME LIKE MODSAP-NAME,
END OF ITAB_EXIT .
DATA : FIELD1( 30).
SELECT A~FUNCNAME A~MAND B~NAME INTO TABLE ITAB_EXIT
FROM TFDIR AS A INNER JOIN MODSAP AS B
ON A~FUNCNAME = B~MEMBER
WHERE A~MAND = 'C' AND A~FUNCNAME = B~MEMBER .
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement Name',
21 SY-VLINE ,
22 'Activated Exit Function',
95 SY-VLINE.
WRITE:/( 95) SY- ULINE.
LOOP AT ITAB_EXIT.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 SY-VLINE,
2 ITAB_EXIT-NAME HOTSPOT ON,
21 SY-VLINE ,
22 ITAB_EXIT-FUNCNAME,
95 SY-VLINE.
ENDLOOP.
AT LINE-SELECTION.
GET CURSOR FIELD FIELD1.
SET PARAMETER ID 'MON' FIELD SY-LISEL+ 1( 10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.