概念介绍
SAP软件第四代增强有二种,分别为显式增强和隐式增强,显式增强就是手动加入到程序中的Enhancement-options,隐式增强就是系统内置的Enhancement-options,本文重点介绍隐式增强的应用。
第四代增强其实是第三代增强的进一步加强,都属于面向对象语言的接口技术的应用,但第四代增强使SAP增强实施更具灵活性,四代增强可以直接在源代码里面写增强了代码了,输入参数也不像二代,三代那样被限制,可以自己定义,所以实际业务中很多二代三代增强无法实现需求可以用四代增强实现。
看看SAP各事务码的源代码,可以发现这类增强已大量分布在SAP源程序的各个地方,使用面向对象技术来设计增强架构,使SAP增强变得更加灵活,能够更加适应不同的业态和行业的定制化需求,我想这也是SAP在ERP领域为何能成为世界排名第一原因之一。
ABAP程序中的以下位置一般都存在隐式增强点:
1、在可执行程序,函数组,模块池,子例程池和包含程序的源代码的最后一行之后可添加隐式增强点。
2、在执行procedure的第一行和最后一行之后可添加隐式增强点。
3、在源代码插件的第一行之前和之后(在ENHANCEMENT之后和ENDENHANCEMENT之前)可添加隐式增强点。
4、在本地类的声明部分的可见性部分的末尾可添加隐式增强点。
5、在本地方法声明的同名形式参数列表的末尾可添加隐式增强点。
6、在结构定义中使用BEGIN OF和END OF在语句之前加上END OF可添加隐式增强点。
在ABAP编辑器中显示隐式增强点,可以在程序编辑界面选择【编辑】→【增强操作】→【显示隐式增强点】。
比如:以功能模块ZWS_GETMAKTX为例说明,进入SAP的功能模块(SE37)的编辑界面。
点击【显示隐式增强选项】可以看到隐式增强点
需要注意的是隐式增强点的增强实现只能附加到单个主程序,这意味着当以下情况适用时,隐式增强点在include程序中不可用:
1、include程序不包含在主程序中。
2、include程序在主程序中不止一次include。
3、include程序包含在多个程序中,并且这些程序都没有被选为ABAP Workbench中的相关主程序。
4、include程序包含在多个程序中,并且这些程序中的至少一个包含限制的显式增强点(即,使用添加INCLUDE BOUND定义的点)。
下面通过一个例子来说明下隐式增强的实施步骤
以下面程序为例说明
上面一个简单程序要实现功能:用户输入一个 净价和折扣 ,自动计算全价和折扣价。
执行后如下
输入1000和10结果如下:
折扣价功能模块Z_CALC_PRICE没有进行计算,所以为输入0。
未实施隐式增强的功能模块Z_CALC_PRICE(如下),输入参数只有一个净价,输出只有一个全价 ,所以只能计算全价 ,不能计算折扣价。
现在通过隐式增强,增强功能模块Z_CALC_PRICE,实现计算折扣价。增强要求:输入参数,增加折扣率 ,输出参数增加折扣价 ,代码增加计算折扣价公式。
增强功能模块Z_CALC_PRICE的实施步骤:
1.增加输入,输出参数
按如下步骤操作
继续如下操作
继续如下操作
继续如下操作
继续如下操作
继续如下操作
继续如下操作
上面输入输出参数增强完成后,还需要实施功能模块的代码增强,步骤如下
继续如下操作
继续如下操作
继续如下操作
继续如下操作
继续如下操作
激活后完成功能模块的增强了
回到程序 Z_FM_ENHANCEMENT 执行看看增强效果
测试增强效果
执行结果如下
以上就是功能模块的隐式增强。
其他程序、子程序、方法的隐式增强步骤和上面一样,通过上面例子可以看到隐式增强方式非常灵活,几乎可以按自己要求直接在SAP源代码的很多位置直接添加增强代码。