ABAP 增强知识点
一、增强类型
菜单增强
屏幕增强
功能模块增强
表/结构增强
二、增强的发展
一代增强:用户出口增强
二代增强:函数增强
三代增强:BADI增强
四代增强:显示增强和隐式增强
三、增强简介:
一代增强:用户出口增强
系统提供一个空代码的子过程,用户可以添加自己的代码来实现需求,这类增强都需要修改SAP的标准代码,源代码增强以子程序形式发布,在SAP的发行版本中,使用PERFOMR调用这些子程序,它们在发布时都是空的,这些子程序可以使用程序中的所有全局数据。
二代增强:Enhancement函数增强
源代码增强:以函数模块形式发布,使用CALL CUSTOMER-FUNCTION调用,这些函数模块中,这些函数模块中只能使用接口中传递的参数,不能使用程序的全局变量。
屏幕增强:也包含在函数增强所属的函数组中。
数据表的增强:通常时ci_结构,这些结构以.INCLUDE结构的形式包含在SAP发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
上述这类增强通过事务码SMOD进行维护,CMOD进行实现。SMOD中的一个增强可以包含上述的源代码、屏幕和表增强。
Enhancement比较重要的表MODSAP,组件功能模块名(Member):里面记录了所有enhancement的增强;表TFDIR,包括出口函数在内的所有函数表,字段MAND(值为C表示此出口函数被激活)
三代增强:BADI接口增强
BADI是基于面向对象的SAP增强技术:SAP预定义了接口,由客户来实例化继承相应的接口,应用程序通过调用来获得用户定义的类的实例,BADI对象的信息存储SXS_INTER、SXC_EXIT、SXC_CLASS和SXC_ATTR这四个表,SE18定义接口功能,SE19创建实现类并编写代码。
SAP保证所有的BADI接口兼容向上,版本更新既不会影响标准版本中增强的调用,也不会影响接口调用的正确性。BADI的源代码增强以接口形式发布,也是通过接口的方法调用来使用,用户增强时,实际是实现一个(或多个)基于这个接口的实现类。由于接口可以有多个实现类,所以对一个增强可以有多种不同的源代码,它们通过过滤器应用于不同的业务场景。
BADI也能做屏幕增强,取决于系统是否预留了接口,先找二代留下的屏幕增强出口,如果没有,再查找三代,代码实现时,将参数放入到全局变量里,程序的原有代码,后续会对全局变量进行数据处理;对于增强具体选什么方法进行实现,只有网上搜索,和代码尝试,实现的具体功能,可以参考方法描述,或者打断点进行测试
关于三代增强的实现:
(1)关于判断是否是符合需求的BADI方法,BADI都是一些接口,通过传入传出的参数去判断,是否是自己所需的数据和需要处理的数据。
(2)BADI内,类的方法是没有代码的,需要用户去实例化,然后写入代码,用BADI来实现需求
(3)对于BADI实现的具体操作,首先要创建一个BADI的实现(BADI是面向对象的思想,可以把BADI理解为一个类),然后双击方法进去写代码,并激活,然后再激活增强,(先是激活程序,后是激活增强,不是一个东西),一般来说测试增强前,都要检测确认下增强是否被激活
四代增强(Enhancement Framework)
隐式增强:就是系统内置的 Enhancement options,是系统本身就预留的,如在:执行程序、包含程序、函数组、对话模块、结构的结尾处;Form例程、函数模块、方法等的开始和结尾处。
显式增强:就是通过代码加入到程序中的 Enhancement options,有两种显式增强:ENHANCEMENT-POINT 和 ENHANCEMENT-SECTION。也可以自定义显式增强点,但不能自定义增强选项,增强选项一定是系统预留下来的,如果没有增强选项则该处不可做增强。此类增强最大的优势在于方便,可以使用程序中已定义的变量,不像 BADI 和 EXIT 只能使用函数接口传过来的参数。
更多推荐
所有评论(0)