SAP 增强—第一代增强User exit
增强Enhancement
是针对SAP标准功能的扩展,关键字:源码、增强点(并不是可以随意增强,而是SAP预留的增强点处才能增强)
1、基于SAP源代码的增强,第一代增强
对SAP所预留的空的子过程进行编码,用户可以编辑此子过程,并在这个子过程中添加自定义的代码,以增加SAP标准程序的控制功能
2、基于函数的增强,第二代增强
SAP为此类出口提供了相应的函数,依据函数结构指定的传入/传出参数,程序执行时,调用该函数并检查相应的代码
3、SAP BADI(Business Add-in),第三代增强
使用面向对象的方式实现增强
通常:仅当二代增强无法实现时才会使用BADI三代增强
相关介绍可参考:http://bbs.vsharing.com/Information/ERP/668329-1.html
第一代出口-User exit
该类增强主要存在于销售与分发SD模块中。即SD较多程序都是基于源码控制来实现增强的。
实例增强内容:
A、 基于销售订单VA01创建SO
B、 当选择ZUSS类型的销售订单时,要求做增强使得PO NUMBER必输(例如钢铁企业,可能需要有了PO后才安排产能,即按单生产)
业务模拟:
1、事务代码VA01下,查找字段名称
订单类型:VBAK-AUART
采购订单编号VBKD-BSTKD
2、SPRO后台找已有的用户出口
A、与销售订单相关的的用户出口
注意:上图用户出口是第一代增强,业务附加项(Business Add-In:BADI)是第三代增强
B、点击销售凭证类用户出口文档,查找对应的用户出口(根据需要:在保存SO前对PO号进行必输检查):
C、使用SE80,选择Package下的VMOD类(该开发类包括了SD和MM几乎所有的一代增强出口处),从而查到源代码出口MV45AFZZ。
也可以使用SE38输入程序名称进入标准程序
D、在标准程序中找到需要的增强出口(FORM:USEREXIT_SAVE_DOCUMENT_PREPARE ),并按需要增加或修改代码:
开发或测试增强时,最好是先加上类似上图的第一个IF语句,以便此刻只有开发人员自己才会触发这个增强,不会影响其他用户使用该标准程序。(这样就不会导致在写这个增强的时候别人用不了这个程序或者相应的事务码)
3、使用SE38在标准程序中找出口:
A、输入事务代码VA01,点击上方“系统”-->“状态”查看标准程序名称(SAPMV45A):
B、SE38输入程序名称SAPMV45A,点击Display 显示程序一般为Module Pool属性的程序,程序里还有很多include程序,第一代增强通常在include程序中,其include程序名特点是程序名倒数第二为为‘Z’。
使用搜索功能,输入“USEREXIT*”搜索出口(会出现很多,可以根据描述来确定是否是我们想要的出口):
双击需要增强的出口“USEREXIT_SAVE_DOCUMENT_PREPARE”,并按需要增加或修改代码,保存**即可(一般是需要access key,因为修改了SAP标准代码):
注意:一般实现一代增强需要申请access key才能更改代码,相当于修改了SAP的标准程序。
优点:实现简单
缺点:修改源码程序,需要有access key,且SAP升级时自开发的增强程序会被覆盖