- 增强的概念
- 增强的分类
- 常用的增强
- 增强实战
一、增强的概念
增强就是SAP系统中标准程序的出口,在该出口中由用户根据企业实际需求编写客户化逻辑代码。
增强是SAP系统设计时考虑到企业实际的流程有可能和系统默认标准流程不同,在标准流程框架下专门留的接口。
每个接口对应一个客户化函数,这些出口函数有标准处理程序传入的参数和输出参数,用户可根据系统输入参数做条件编写适合本企业流程的逻辑,然后通过输出参数传输回。
二、增强的分类
1.用途分类
E类
Enhancement exits ,即通常所谓的用户出口( User_ exit )。用户出口也叫功能出口(Function Exit)。
使用Tcode:SE37,搜索EXIT*,找到的函数大都是做系统预留的出口函数,前面说过,用户出口是标准程序留给用户的接口,标准程序通常不允许用户任意修改,如果修改需要申请Access Key ,而且修改标准程序可能导致的错误erp公司通常是不负责的。在SAP中自定义的程序通常以保留字 Y或Z开头,因此,出口函数中都预包含了一个 Z 开头的程序。
C类
GUI接口(Gui Codes)。菜单增强就属于这类增强。
S类
屏幕增强(Screen Exit)。 比如,在建立采购订单,工单和固定资产主数据时,系统都预留屏幕增强,也就是说允许用户自定义用户输入界面并编写相应的输入输出处理程序。
T类
在各类增强中,可能还 用户自己定义结构或表格,系统对应类型T类。比如增强MM06E005允许用户建 立两个结构CI_ EKKODB和CI_ EKPODB。(数据库增强)
2.发展分类
第一代增强(增强嵌入标准程序中)
第一代增强(基于源代码的增强)是sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码,它们在发布的时候都是空的,集中在一些文件名倒数第二个字符为Z的包含程序中,由于在标准程序中,所以所有程序的全局数据都可以使用,但同时 系统升级时会被新版本覆盖;这种源代码增强和屏幕增强的说明可以从事务码spro后台配置中相关模块的路径里面找到; 一般是以UserExit_ 打头的子模块。这类增强事先要到service marketplace申请对象键(ACCESS KEY) ,然后才能修改这些子程序。
第二代增强(SMOD,CMOD)
第二代增强(基于函数模块的增强) , 用事务SMOD和CMOD来维护;
在SAP发布的早期版本中, Call Function 'EXIT_ 主程序_ XXX' 来调用函数模块;而在较新的版本中使用Call Customer-Function ' XXX' 调用函数模块的。第二代增强函数名构成: Exit_ 主程序名’XXX(3 digital number)’, 这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码Include ’ZXXXXXXX' , 修改时无需像第一代增强一样需要Access Key,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样 随便使用程序的全局数据,只能使用接口中传递进来的参数。
第三代增强(BADI,SE18/SE19)
第三代增强(基于面向对象概念的增强BADI ( business add-in ) ),源代码发布以接口的方式,通过接口的方法调用来实现使用的。用户增强实际上是实现-个或多个基于这个接口的实现类,因为接口类实际上是一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(adapter)来区别用于不同的业务场景的。这种增强是用事务SE18和SE19来实现的。
第四代增强 ( Enhancement Framework )
第四代其实是第三代的加强switch Framework。 当sap进入newweaver 7.0以后推出的新增强体系,主要包含四个方面:
Source Code EnhancementImplicit enhancement option 隐式增强
Explicit enhancement option 显示增强
Enhancement pointSAP增强
Enhancement sectionSAP New Enhancement Framework代码增强
Function Group EnhancementClass Enhancement.
三、常用的增强
1.常用增强——第一代增强:销售订单屏幕增强与功能增强;
(增强点在程序SAPMA45A中有明显标志)
查看该程序子例程以USEREXIT_开头的即为增强出口,这些出口就包含在上图的INCLUDE程序中。
2.常用增强——第二代增强:成本中心屏幕增强;
增强点在程序SAPMV45A中有明显标志先SE93找到KS01 (成本中心创建)对应程序SAPLKMA1 ,然后SE11查询表 TADIR找不到对应开发类,通过SE38查看SAPLKMA1开发类为KBAS ,然后再用SE11查询表TADIR可以查到可用增强 点有COCCA001、COCCA002、 COOMEP01、COOMKA01. COOMKS01、COOMKSO2、 COOMKS03、COOMLA01 ,然后将这些增强点在MODSAP中查询,就可以发现只有COOMKS01可以对成本中心主数据屏幕做增强,并且此增强点包括了屏幕增强、菜单增强、表增强、功能增强。
3.常用增强——第三代增强:BADI增强—生产订单收获
4.常用增强——第四代增强:BTE增强—修改客户最终检查
四、增强实战
1.第一代增强
销售订单屏幕增强:销售订单抬头屏幕增强(VA01/VA02/VA03)
(销售订单抬头其他不可以做增强,附加数据A和附加数据B可以做增强)
A.确定需求,找到增强位置:销售订单抬头附加数据B做增加字段的增强
O.增强点确认:
SE93->VA02
当判断程序是否是目标程序时,可以通过加字段的方式进行验证。
点击格式(/布局),根据弹出的框,进行修改
需要向SAP申请Access Key来修改SAP标准程序。
或者根据键值工具,生成键值,输入访问的键值后就可以修改标准程序了。(这种情况在sap中没有备案,当sap升级时,不能保证修改的程序依然存在。)
添加文本进行测试
B.屏幕增强实现
(第四类增强,往标准表中拓展字段)
在屏幕中添加字段,需要把字段放在数据库中的一个值中,
SE11,输入透明表VBAK,在字段中找到修改标准表的一些方法,如.APPEND/.INCLUDE等方法,可以用来修改标准表。
然后同样APPEND一个自己开发的方法:如ZVBAK_HY.创建步骤如下:
根据之前创建的学员信息表,在组件的位置添加一个学号的字段。
(如果没有表的话需要重新创建域和学号等数据元素)
(2)激活完后,需要把创建的结构拓展到标准表中
se11,打开VBAK表,点击编辑时,同样需要Access Key输入访问键值。
在VBAK表中创建结构,把刚才创建好的结构添加进来
(3)使用创建好的结构进行屏幕的定义。
总结:第一代增强,需要获取sap的准许才能修改,需要向sap发送请求,同时也可以通过“Sap Key Generator 算码器”工具获取授权。接下来修改程序时,除了需要修改屏幕文本信息代码,还需要修改数据库字段,对标准表字段进行增强,用附加结构APPEND的方式,最后在定义屏幕时就可以使用添加的结构,然后通过PO或PI的操作,把数值放入BAPI中。
2.第二代增强(通过CMOD实现)
采购订单抬头屏幕增强(ME21N/ME22N/ME23N)
(MM06E005在采购凭证中的客户字段)
A.屏幕增强位置
O.增强点确认:
可以通过查找的方式,首先查找第一代增强SE93->ME23N
然后第二代增强查找,SE37打开“MODX_FUNCTION_ACTIVE_CHECK”函数,设置37行断点
运行TCODE-ME23N,打开一个采购订单,系统在断点处终止。
触发MODSAP表,找到增强实现function的编号
找到的编号即为第二代增强的增强点
打开sap增强界面,事物代码SMOD,然后输入上面的编号“MM06E005”
B.增强点实现
事务代码:CMOD
输入刚才的增强编号
注:第三类增强只允许做一次。
查看“YMM06”的增强
然后点击“组件”
当激活后,选择下面“0101”的屏幕出口,然后输入文本描述
都激活后,输入“/OME23N”,查看增强效果
接下来做其他的增强,如读取数据、写数据等
总结:第二代增强的实现方式:首先同样需要确定增强位置;然后使用SE37打开“MODX_FUNCTION_ACTIVE_CHECK”函数,设置一个断点,找到变量,触发断点,再反查SAPMOD的表然后找到系统增强点的编号,根据编号属性的描述信息,最终确定要修改的增强点。
3.第三代增强
交货单抬头屏幕增强(VL01N/VL02N/VL0N)
A.屏幕增强位置
点击抬头,会发现有与你有BADI输入相同描述的选项出现
O.增强点确认
通过第一代、第二代(SE37进入后,debug函数"MODX_FUNCTION_ACTIVE_CHECK"查找)都没有找到增强点,接下来查找第三代增强(与第二代增强的区别是使用的函数不一样)。
BADI查找方法:
SE37打开函数“SXV_GET_CLIF_BY_NAME”,第10行设置断点
设置断点后,运行TCODE-VL02N打开一个交货单
打开调试界面后,点击F8执行
定位BadI:"LE_SHP_TAB_CUST_HEAD"
se18,输入"LE_SHP_TAB_CUST_HEAD",查看BAPI
B.屏幕增强实现
SE19实现增强,画屏幕,增强表结构,表数据,写逻辑。