一:基于源代码的增强
1.定义
源代码增强以子程序形式发布,可以用PERFORM调用这些子程序,发布的时候是空的,提供一个空代码的子过程,用户可以添加自己的代码。
2.特点
需要修改sap的标准代码。
屏幕增强以客户屏幕形式发布,包含在标准程序中没有什么特别规律。
源代码增强和屏幕增强的说明可以从事务码spro后台配置中相关模块的路径里面找到。
可以用se11打开透明表,为数据表追加新的字段。
3.增强操作
首先到service marketplace申请对象键,才能修改这些子程序。
4.查找增强方法
第一步:打开SE38输入欲增强的程序;
第二步:选择显示对象列表按钮,查找以”UserExit”开头的子程序,根据子程序前面的注释文档来查找用户出口;
5.缺点
这种更改标准程序的方法现在很少使用,可能因为系统升级不能工作;而且改变了全局变量,还可能会破坏系统原有的逻辑。
二:出口
1.定义
标准程序最后要调用的一个函数或者功能模块,这个函数或功能模块的输入已经由Sap定义好。
2.类型
源代码、屏幕和表结构增强。
3.特点
正常的业务系统不能满足实际需求,可以在出口中增加一些功能,来达到要求。
自己写的SAP出口程序在系统升级时会被保留,如果是标准程序更改会被覆盖。
4.如何查找出口
可以通过配置文档的帮助和SAP library寻找业务系统的出口,sap library在’implementation guide’中寻找出口,在说明文档中描述相关的出口。
5.怎么写出口程序
(1)专门管理出口程序的事务代码是CMOD(实现)、SMOD(维护);
(2)出口函数有标准处理程序传入的参数和输出参数;
(3)针对数据表的增强是CI_结构,这些结构以.INCLUED结构的形式包含在SAP发布的数据库表中,可以通过向这些结构中添加字段而对数据表进行增强。
三:基于函数模块的增强
1.定义
源代码增强以函数模块形式发布,使用CALL CUSTOMER-FUNCTION调用这些函数模块,发布时只有一句代码INCLUDE xxxxxxx。增强的时候,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写对应的代码。
2.特点
只能使用接口中传递的参数,不能使用调用程序的全局变量。
屏幕增强也包含在函数模块所属的函数组中。
专门管理出口程序的事务代码是CMOD。
四:基于面向对象概念的增强
1.定义
面向对象的增强就是BADI(Business Add-Ins),源代码增强以接口形式发布,也是通过接口(类接口)的方法调用来使用。
用户增强时,实际是实现一个(或多个)基于这个接口的实现类,对一个增强可以有多种不同的源代码,通过过滤器应用于不同的业务场景。
2.特点
通过EXIT_HEADLER查找BADI。
使用事务码SE18创建、SE19实现。
五:Switch Framework
1.定义
SAP从NetWeaver7.0以后推出的新增强体系,对BADI做出了改进,叫做新BADI。还新增了Enhancement SpotheEnhancement Section以及隐式增强点的概念,基本可以在面向对象里实现处处皆可增强的作用。
2.特点
可以在任何有ENHANCEMENT-POINT的地方做增强。
只能在程序的头和尾做增强。
不像user-exit那么难找,不像badi那么麻烦,只需要在业务所对应的FM种找到ENHANCEMENT-POINT就可以,系统升级也不影响。