江正军增强总结:
https://www.cnblogs.com/jiangzhengjun/p/4265513.html
学习资料
B站学习视频
转型入行SAP优选ABAP开发 系统学习SAP技术顾问教程 增强和接口 易拓SAP培训
找到了几篇很详细的资料,看了一下,觉得写得很好,很详细。
ABAP 增强
sap 四代增强查找方式
什么是增强
- 增强是标准程序预留的开发出口,当标准流程满足不了客户需求的时候,业务顾问用配置也没有办法解决,就需要用到增强。
四代增强及其优缺点
第一代增强(User exit)
第一类增强是基于源代码的增强,很好找,实现简单,网上的资料也很多,但是第一代增强在系统升级以后会被覆盖,建议写一个本地函数或者自建新程序文件来保存。
查找方法
1. 标准程序查
标准程序->系统->状态->点击程序(子 dynpro)->搜索USEREXIT_或者主程序中Include名称倒数第二位字符为Z的为USEREXIT增强点
根据出口名称和注释了解用途,也可以继续在网上进行搜索
2. 事务代码SPRO查
事务代码 SPRO->SAP参考IMG->点击望远镜搜索增强->点击小眼镜查看增强
3.SE80开发类VMOD查
SE80->输入包 VMOD ->打开包含文件
这种的,熟悉了第一代增强后,容易找到地方。
使用方法
1.保存在文件里,使用INCLUDE Z[模块]E[编号] IF FOUND语句
使用了IF FOUND语句,如果该文件已经建了,就会走该文件里面的逻辑,采用增强里面包含文件的方法,也便于后续自己查找增强。
在文件里面使用函数
这里的变量可以参考
2. 程序变量含义总结
"SY-TCODE 该系统变量可以判断运行标准程序的TCODE
"[表名]当前循环item
"[X表名]所有新值(创建用) 其中UPDKZ为更新标识 I新增 D删除 U修改
"[Y表名]所有旧值(修改,删除用) 其中UPDKZ为更新标识 I新增 D删除 U修改
"T180-TRTYP的值可以用来判断状态,常用的有,H 添加 V更改 A显示
"LEAVE TO TRANSACTION 'XXXX'AND SKIP FIRST SCREEN.离开到事务代码XXXX,并跳过初始屏幕
这是在网上查到的表相关变量的用法:
sd增强中的xvbap yvbap vbap内表存放不同的值(ser-exit:FORM USEREXIT_SAVE_DOCUMENT)
创建订单时:
XVBAP --> 存放当前所有的item,内容为新值
YVBAP --> 空,表明没有修改过任何item,当然也不存在旧值
VBAP --> 循环item时的,存放当前item的内容
修改订单时:
XVBAP --> 存放当前所有的item,内容为新值
YVBAP --> 仅存放修改过的item,并且存放的是修改前的旧值
VBAP --> 循环item时的,存放当前item的内容
删除订单时:
XVBAP --> 存放当前所有的item,内容为新值(但数量为0)
YVBAP --> 存放数据库里已保存的item,存放的是数据库里的旧值
VBAP --> 循环item时的,存放当前item的内容
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/champaignwolf/article/details/46225111
应用案例
1. 通过源码出口来增强VA01功能实例
程序中所看到的变量及内表数据都可以在用户出口对应的子程序中直接引用,系统执行中的一些业务数据会被暂时存在指定的内表中供出口程序判断和使用。根据这些子程序的名称及简介可以初步判断其调用的过程,例如子程序USEREXIT_SAVE_DOCUMENT_PREPARE则会在订单维护(VA01和VA02)保存前调用,下面以实例来介绍出口应用。
例如:在SAP标准功能中,保存销售订单一般不会判断采购订单编码,本例中需要实现在订单创建时,若订单类型为ZOR1,要求必须填入采购订单号,否则无法保存。
通过F1键查找屏幕字段的技术信息,在订单创建事务代码VA01中可以找到订单类型在屏幕中的字段名称为VBAK-AUART,采购订单编码在屏幕中的字段名称为VBKD-BSTKD,对应字段可以直接在用户出口中进行引用,出口代码如下所示:
*---------------------------------------------------------------------*
* FORM USEREXIT_SAVE_DOCUMENT_PREPARE *
*----------------------------------------------------------