2012年9月3日
1.SAP 增强方式一般来说有五种:
:user-exit→用户出口
:Modifcation→修改SAP标准程序,这种方式风险较高,升级后有影响。
:BADI→用于BAPI的增强(Bussiness Add_Ins)
:ENHANCEMENT-POINT→未来sap增强的趋势,应用场合广范,好处是不像user-exit那么难找,不像badi那么麻烦,只需在业务所对应的FM中找就到ENHANCEMENT-POINT就可以,系统升级也不会有影响,只有你想不到的,没有你改不了的。特点是可以在任何有ENHANCEMENT-POINT的地方做增强。
:隐式的ENHANCEMENT-POINT→特点是只能在程序的头和尾做增强。
SAP有四种基本用户出口的类型:
:菜单出口-Menu Exits,定义自己的菜单
:屏幕出口-Screen Exits,定义自己的屏幕
:功能模块出口-Function Module Exits,在SAP应用程序中添加功能
:关键字出口-Keyword Exits,在ABAP/4字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按F1后会出现你自定义的说明文档
2.出口和增强
什么是出口?顾名思义,就是一段程序执行到最后必经的一段程序。
为什么会有出口呢?因为正常的业务系统不能满足实际需求,这时可以在出口中增加一些功能来达到要求。
SAP的用户出口总共有四代:
:第一代→基于源代码的增强,SAP提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改SAP的标准代码。
:第二代 →基于函数模块的增强,SAP提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。
:第三代 →基于面向对象概念的增强,SAP提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD <instance>(相关的TCODE是SE18和SE19),可以通过EXIT_HANDLER这个单词查找BADI。BADI对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中(参见SECE包)。
:第四代→Switch Framework,SAP从在NetWeaver 7.0以后推出的新增强体系,它对BAdI做出改进,改叫新BAdI了,还新增Enhancement Spot和Enhancement Section以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。
User exits are places in the SAP standard code that are designed to insert code by the customer. It happens often that some values are set by default by SAP but are not appropriate for the business. In a user exit (or enhancement) you can correct this. [ Let's say you are in a sales order and have dimension specified. Before saving, you need to determine the weight according to an own algorithm. Or you have your own credit check rules, so before saving you block the order when needed. This code could be found in a user-exit. ]
There are now four generations of userexits.
generation: these are FORM routines within the code, usually named "userexit…. " that can be filled with own code.
generation: these are special function calls that are invoked with "CALL CUSTOMER_FUNCTION"; they are defined with transaction SMOD and activated with CMOD.
generation: they are called BAdI -- Business Add-in -- and use ABAP dynamic classes instead function calls. They are handled via SE18/SE19 and normally placed in the code via a static method call to class CL_EXIT_HANDLER.
generation: there is a new concept announced for the NetWeaver 2004s that consolidates all userexits in a common framework.
3.BAPI和BAdI
BAPI is nothing but a FUNCTION MODULE,only it is RFC enabled. That's all.
BAdI is nothing but user-exit,only more extended and is CLASS/OO based.
BAPI是一些可用于往SAP系统中上传数据的公共程序。实际上是一种特殊的RFC,BAPI是面向对象程序设计方法中的一组程序接口,它允许用户通过SAP将第三方软件整合成SAP专有产品。即为了完成一些特殊的商业任务(如上传交易数据等)R/3系统中内置了BAPI。
BAdI是SAP系统提供的基于面向对象的程序增强技术。SAP在标准程序中提供了BAdI接口,用户可以根据自己的要求查询可用的BAdI然后去编程实现。
User Exit类似于抽象函数,需要由用户来实现。也是一种程序增强技术,同样可以查找合适的User Exit然后在程序中编程实现。但是如果update后相应的增强编码会丢失。