一、User EXIT
这种出口据说是第一代的用户出口,它们include在SAP标准程序的源代码里,可以说他们是源代码的一部分,你改了这种出口就相当于改了SAP标准程序,是需要申请access key才能更改的,不需要建立PROJECT。很多标准程序里心ZZ或者Z结尾的包括程序里都有以user_exit_开始的子程序,例如上面mv50afz1里的user_exit_save_document.我做绝大部分SD的出口里,都是这种形式的。
二、Customer exit
可以把这种出口看成第二代的的出口,好像增强(ehancement)就是指这类,不知道我有没有理解正确,这种出口又包括了六种不同的类型.
1)function exit,2)menu exit,3)table exit,4)field exit,5)screen exit,6)keyword exit,但我的好像只做过第一种,就是function exit.这种出口是以FM的形式存在的,其开发的方式,就像Herman_wenzhenzh所说的那样,找到相关的增强后,建立PROJECT,然后在componemt里有FM,在FM里有以Z开始INCLUDE程序,双击这个INCLUDE程序进入后就可以根据FM里IMPORT/EXPORT/CHANGING/TABLE等来开发你们的需求。这些增强是不需要申请ACCESS KEY的,因为他们不属于SAP标准程序里的一部分。这种增强FM的命名方式是EXIT_programname_NNN,NNN是3个数字的序号,实际上在SAP的标准程序里,会用到下面的方式调用该增强的逻辑:call customer-function 'NNN',从而来达到用户的需求。SD好像也有这种形式的增强,但是我没有怎么做过,不太好说那一个能实现楼主的需求。我做的MM里很多都是这种形式的。其他的例如menu exit/screen exit我就没有怎么做过,不好说什么。
三、BADI
这是基于面向对像的第三代增强。自己也只做过两次,特别是自己对SAP的面向对像还搞不清楚,寒~~`一时之间说不出个所以。前面介绍的两种出口增强,都是SAP提供固定的点给用户进行开发,而BADI这种增强,则让顾问们很自由地定义需要增强的地方,据说SAP很多的行业方案就是用这种形式来扩展的。
如果你需要找某一个出口/增强,还是回去看SPRO,每一个模块里都基本有system modificatio或者BADI的说明,这样能更快找到相关的东西。