SAP增强技术详解
©冰河BHSJ原创
内容目录
第一代增强技术:基于源码增强(子函数subroutine)......................................................2
基本概念................................................................................................................................................................2
通过实例说明实施步骤...................................................................................................................................2
第二代增强技术:基于函数出口增强(功能模块Function)............................................2
基本概念................................................................................................................................................................2
通过实例说明实施步骤...................................................................................................................................3
第三代增强技术:基于类的增强(BADI技术)....................................................................12
概念介绍:........................................................................................................................................................12
通过实例说明实施步骤................................................................................................................................12
第四代增强技术:显式和隐式增强技术....................................................................................32
基本概念.............................................................................................................................................................32
通过实例说明实施步骤................................................................................................................................35
1.显式增强实施步骤............................................................................................................................35
2.隐式增强实施步骤............................................................................................................................45
SAP增强技术详解
©冰河BHSJ原创
一代增强技术:基于源码增强(子函数subroutine)
基本概念
➢这些Form集中存储在一些文件名倒数第二个字符为Z的包含程序中(如后面销售
凭证主程序SAPMV45A中的MV45ATZZ、MV45AOZZ等Include文件)
➢这些Form的名称一般是以UrExit_打头的子模块,所以一般找到所要增强的主程
序,再查找UrExit_关键字即可找到相关的出口
➢Form源代码增强事先要到rvicemarketplace申请对象键(ACCESSKEY),然后
才能修改这些子程序
➢另外,可以在SPRO中搜索USEREXIT关键字来查找
通过实例说明实施步骤
略
由于一代增强由于目前基本上不使用,所以本文也不再进行详细介绍。本文主要针对
SAP二代,三代、四代增强技术的基本概念原理和具体的实施步骤做详细介绍和讲解。
二代增强技术:基于函数出口增强(功能模块Function)
基本概念
➢基于函数出口增强(Function):用SMOD(激活增强,只需一次激活)和CMOD
(实现增强)维护;在SAP发布的版本中,使用CALLCUSTOMER-FUNCTION<3
位数字>调用函数模块的,所以你可以通过在程序中查找cusomer-function来查找
增强,出口函数名称由三部分组成:EXIT_<程序名>_<3位数字>(注:这里的<程
序名>即指调用此出口函数的程序名),这样你就可以找到对应的增强函数了。
➢针对数据表的增强出口是“CI_”打头的结构,这些结构将.INCLUDE结构的形式包
含到时相应的数据表中,用户可以通过向这些结构中添加字段从而达到对数据表字
段的增加
SAP增强技术详解
©冰河BHSJ原创
通过实例说明实施步骤
1.找到增强用户出口
SAP增强技术详解
©冰河BHSJ原创
打完断点退出后,输入需要查找增强用户出口的事务码,以me21n为例
SAP增强技术详解
©冰河BHSJ原创
回车,进入如下调试界面
在表MODSAP中查找这个用户出口程序名的出口名称
SAP增强技术详解
©冰河BHSJ原创
以上是查询到增强名称和对应增强点,一般业务顾问是可以做的。
如下增强实施一般需要ABAP顾问来做。
2.找到增强用户出口程序和对应出口名称后,下面开始实施增强
SAP增强技术详解
©冰河BHSJ原创
保存进入如下界面
SAP增强技术详解
©冰河BHSJ原创
在这
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
编写完成增强代码后,进入CMOD可以进行激活或不激活项目的控制
SAP增强技术详解
©冰河BHSJ原创
点击上图显示,再点击“组件”进入如下界面:
SAP增强技术详解
©冰河BHSJ原创
第三代增强技术:基于类的增强(BADI技术)
概念介绍:
➢SAPR/34.0之前ABAP完全是面向过程的语言,面向对象的编程技术是在SAPR/3
4.0后版本中逐渐改造增加进去的,至目前ABAP已基本包含了面向对象的所有技
术,所以完全可以说ABAP是面向对象的编程语言,虽然目前ABAP面向过程编程
方法仍可以解决业务中大部分需求,但未来面向对象技术应用在SAP中一定会越来
越多.下面要介绍的BADI增强就是使用面向对象技术来实现的。
➢BADI维护是通过SE18、SE19事务来来维护的。SE18用于创建及维护BADI对象;
SE19用于维护BADI的实例
通过实例说明实施步骤
步骤1:查找增强点,即要找到对应事务码的BADI的名称和它的方法,它的方法也就所谓
的增强点,写增强代码的地方.
BADI的查找三种方法:
1、主程序都会调用cl_exitHandler=>get_instance(这只是经典BADI是这样来调用的,
如果是新式的BADI,则调用为GETBADIhandle-BADI定义名、CALLBADI
handle->method)来判断对象是否存在,并返回实例。我们可以在24中对类
cl_exitHandler=>get_instance方法进行调试,运行一个tcode,看一下exit_name的值,
这就是要找的BADI
2、在主程序中搜索cl_exitHandler,查看它所引用(TYPEREFTO)的接口名,根据接口命
名规则IF_EX_
3、通过程序查找
以方法1为例说明:
先运行SE24,查看类对象CL_EXITHANDLER,在其方法:GET_INSTANCE的14行(CALL
METHODCL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE)打上一个断点。
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
退出或另开页面,输入需要查询是否存在badi的事务码,比如你想查询MIGO,就输入
MIGO,按正常操作步骤执行MIGO,可以找到那一步存在badi.下面以SAP官方提供的
学习BADI的程序为例来说明如何实施badi增强,此程序对应TCODE为bc425_chng00
接下来运行事务代码,当有BADI时将会被执行,这时在DEBUG模式下,会进入类
CL_EXITHANDLER的GET_INSTANCE方法,按F6执行这个方法之后,点参数EXIT_NAME
查看其对应的值,所有的方法实现都在此类对象中,此时就是我们所要找的BADI
SAP增强技术详解
©冰河BHSJ原创
点击修改后,因为这步骤后存在badi,系统进入如下debug调试界面
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
通过上面步骤,我们找出了这个TCODE对应的badi名称BC425_00FLIGHT2,这个是
其中之一,现以这个BADI为例说明,如何实施BADI增强.
步骤2:实施BADI增强.BADI其实是使用面向对象语言的接口技术,增强其实就是实现
BADI接口的方法。
进入SE19,选择CreateImplementation中的ClassicBADi
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
双击GET_DATA
SAP增强技术详解
©冰河BHSJ原创
双击PUT_DATA
增强代码写完后激活
一般BADI增强(非屏幕和菜单增强),完成这些步骤,激活后算完成了.
本例BAID是屏幕增强,即需要在TCODE对应的程序界面增加附加屏幕,比如上面
TCODE未实施屏幕增强前显示如下,
现在需要在红色框中增加一个自己设计的屏幕,显示一些其他参数或供用户输入一些信
息.
SAP增强技术详解
©冰河BHSJ原创
下面步骤介绍如何增加附加屏幕
回到上面6步骤界面如下
上图2个栏位应该输入什么?因为是屏幕增强,这里要求设计一个子屏幕。屏幕增强
还需进行如下步骤进行操作
输入80进入如下界面
SAP增强技术详解
©冰河BHSJ原创
回车后进入如下
SAP增强技术详解
©冰河BHSJ原创
记下这个屏幕号,后面步骤要用到.
SAP增强技术详解
©冰河BHSJ原创
保存,返回
SAP增强技术详解
©冰河BHSJ原创
双击get_instance.创建如下程序
双击get_data.创建如下程序
SAP增强技术详解
©冰河BHSJ原创
双击put_data.创建如下程序
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
回到最前面的疑问处,如下栏位输入上面31步骤记下的程序名和17步骤创建的子屏
幕编号0500
SAP增强技术详解
©冰河BHSJ原创
完成后最后点击激活,完成此BADI的屏幕增强。
再次执行TCODE下面是效果:
第四代增强技术:显式和隐式增强技术
基本概念
SAP第四代增强-Enhancement-Point,分为2种显式增强和隐式增强,显式增强就是
手动加入到程序中的Enhancementoptions,隐式增强就是系统内置的Enhancement
options。第四代增强其实是第三代上的加强,都属于面向对象语言的接口技术的应用,
但第四代增强使SAP增强实施更具灵活性,四代增强可以直接在源代码里面写增强了
代码了,输入参数也不像二代,三代那样被限制,可以自己定义。所以实际业务中很多
二代三代增强无法实现需求可以用四代增强实现。阅读SAP各事务码的源代码,可以发
现这类增强已大量分布在SAP源程序的各个地方。使用面向对象技术来设计架构程序
的增强,使SAP增强变得更加灵活,能够更加适应不同的业态和行业的定制化需求,我
SAP增强技术详解
©冰河BHSJ原创
想这也是SAP在ERP领域为何能成为世界排名第一原因之一。
在SAP源代码中语法形式如下:
显式增强:
隐式增强:
以MIGO事务码为例,查看MIGO源代码,就会发现源代码里面有很多上面那样语法形
式语句存在
进入源代码查询界面后,点击如下显示隐式增强
SAP增强技术详解
©冰河BHSJ原创
如下就是SAP源代码中部分的的显式增强和隐式增强增强点
四代增强虽然比较灵活,但难点在于需要直接阅读源代码,才能找到对应的Enhancement-
Point,才能去写增强代码实现对应功能。
SAP增强技术详解
©冰河BHSJ原创
通过实例说明实施步骤
1.显式增强实施步骤
下面就通过一个案例程序介绍一下四代显式增强是如何编写和实施的
1.通过38写一个简单ZIM_4G_ENHACE程序来说明
代码如下:
REPORTZIM_4G_ENHACE.
PARAMETERSweekdayTYPEs_weekday_00.
START-OF-SELECTION.
CASEweekday.
WHEN'1'.
WRITE'Monday'.
EXIT.
WHEN'2'.
WRITE'Tuesday'.
EXIT.
WHEN'3'.
WRITE'Wednesday'.
EXIT.
WHEN'4'.
WRITE'Thursday'.
EXIT.
WHEN'5'.
WRITE'Friday'.
EXIT.
ENDCASE.
现在需要在如下位置建立四代增强点
SAP增强技术详解
©冰河BHSJ原创
操作步骤如下
SAP增强技术详解
©冰河BHSJ原创
保存后,看源程序如下:
SAP增强技术详解
©冰河BHSJ原创
保存激活后,完成在源程序中增加了一个4代显式增强点.
上面步骤只是在程序中建立了一个增强点,并没有执行什么动作,就相当于建立一个容
器。如果需要实施增强,还需要进行实例化,下面会介绍如何进行实例化实施增强的步
骤。
上面增强点是ENHANCEMENT-POINT开头,另外我们在读源程序时候发现有
ENHANCEMENT-SECTION开头增强点,这两者是有差别的ENHANCEMENT-SECTION
后面会有代码,如果没有去实施它时,标准程序会执行ENHANCEMENT-SECTION后面
会有代码,但如果去实施增强,实例化这个增强,则增强代码会取代原ENHANCEMENT-
SECTION后面会有代码,原来代码就不执行了。
比如如下在ZIM_4G_ENHACE程序中增加ENHANCEMENT-SECTION,
ENHANCEMENT-SECTION后面会有代码:MESSAGE‘Invalidweekdayinput’TYPE‘I’.(增
加ENHANCEMENT-SECTION增强点步骤略和上面类似),如果不实施ENHANCEMENT-
SECTION增强,则执行MESSAGE‘Invalidweekdayinput’TYPE‘I’.这个语句,如果实施
了增强,则增强代码就会取代它(下面将详细介绍)
按ENHANCEMENT-POINT增强点建立步骤,建立如下ENHANCEMENT-SECTION增
强点
SAP增强技术详解
©冰河BHSJ原创
以上步骤已在程序ZIM_4G_ENHACE中建立了ENHANCEMENT-POINT和
ENHANCEMENT-SECTION语法开头的增强点。
下面要介绍如何去实施增强,也就实例化它们.
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
执行程序ZIM_4G_ENHACE效果如下:
看下面执行效果
ENHANCEMENT-SECTION增强点,目前并未实例化,也就是没有实施增强,但仍执行
ENHANCEMENT-SECTION和
END-ENHANCEMENT-SECTION之间的代码,等下如果去实施它,则这个代码就不会再
执行,被增强实施部分代码取代.
SAP增强技术详解
©冰河BHSJ原创
继续,出现如下界面
是执行了ENHANCEMENT-POINT增强点进行增强实施,即实例化的程序代码.
下面在再对ENHANCEMENT-SECTION增强点进行增强实施,即实例化,看看效果
实例化步骤和ENHANCEMENT-POINT一样,所以步骤省略。
ENHANCEMENT-SECTION增强实施代码如下红色框:
SAP增强技术详解
©冰河BHSJ原创
激活后执行程序ZIM_4G_ENHACE效果如下:
点执行弹出如下界面,已取代原来的代码,原来代码不在执行。
SAP增强技术详解
©冰河BHSJ原创
最后总结下ENHANCEMENT-SECTION和NHANCEMENT-POINT区别
EMENT-SECTION和ENHANCEMENT-POINT定义和实现的方法与一样。
EMENT-POINT没有代码,只有一个预留点,当实例化它时允许在这个位置插入
增强代码。
EMENT-SECTION和END-ENHANCEMENT-SECTION之间有代码,当实例化之后,
替换旧代码,只执行新代码,原来的代码不再执行。
2.隐式增强实施步骤
下再通过一个例子了解隐式增强实施步骤
SAP增强技术详解
©冰河BHSJ原创
如何查找隐式增强
隐式增强就是系统内置的Enhancementoptions,是系统本身就预留的,如在:执行程序,
包含程序,函数组,对话模块的结尾;Form例程,函数模块,方法等的开始和结尾;结构
的结尾这些地方都会有。以如下图标标示。
要查看SAP程序,子程序,功能模块,方法隐式增强点,以功能模块Z_CALC_PRICE为
例说明。
打开SAP程序编辑器,进入程序编辑界面。
SAP增强技术详解
©冰河BHSJ原创
实施隐式增强点例子说明
以下面程序为例说明
上面一个简单程序要实现功能,用户输入一个净价和折扣,自动计算全价和折扣价
执行后如下,
SAP增强技术详解
©冰河BHSJ原创
输入1000和10结果如下
折扣价,功能模块Z_CALC_PRICE没有进行计算,所以为输入0
未实施隐式增强的功能模块Z_CALC_PRICE如下,输入参数只有一个净价,输出只有
一个全价,所以只能计算全价,不能计算折扣价
SAP增强技术详解
©冰河BHSJ原创
现在通过隐式增强,增强功能模块Z_CALC_PRICE,实现计算折扣价。增强要求:输入参
数,增加折扣率,输出参数增加折扣价,代码增加计算折扣价公式。
操作步骤:
增加输入,输出参数
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
上面输入输出参数增强完成后,还需要实施功能模块的代码增强,步骤如下
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
SAP增强技术详解
©冰河BHSJ原创
激活后完成功能模块的增强了
回到程序Z_FM_ENHANCEMENT执行看看增强效果
SAP增强技术详解
©冰河BHSJ原创
执行结果如下
以上就是功能模块的隐式增强。其他程序、子程序、方法的隐式增强步骤和上面一样.
隐式增强方式非常灵活,几乎可以按自己要求直接在SAP源代码的很多位置直接添加
增强代码。
本文发布于:2022-11-25 16:00:04,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/19452.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |