ABAP 增强知识整理
关于增强知识的整理
最近在学习增强,总结如下:对于SAP标准程序的增强共有四种类型,用户出口增强(User Exit),函数增强(Enhancement),BADI增强(经典BADI和新式BADI),隐式增强和显式增强(explicit Enhancement ,implicit Enhancement),接下来会分别介绍。
一代增强:用户出口增强
系统提供一个空代码的子过程,用户可以添加自己的代码来实现需求,这类增强都需要修改SAP的标准代码,源代码增强以子程序形式发布,在SAP的发行版本中,使用PERFOMR调用这些子程序,它们在发布时都是空的,这些子程序可以使用程序中的所有全局数据。
一代增强的查找方法:
先找到要增强的主程序(可用SE93或系统->状态),然后找到UserExit_开头的子模块,可根据命名模糊判断其可以进行增强的功能
二代增强:Enhancement函数增强
- 源代码增强:以函数模块形式发布,使用CALL CUSTOMER-FUNCTION调用,这些函数模块中,这些函数模块中只能使用接口中传递的参数,不能使用程序的全局变量。
- 屏幕增强:也包含在函数增强所属的函数组中。
- 数据表的增强:通常时ci_结构,这些结构以.INCLUDE结构的形式包含在SAP发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
上述这类增强通过事务码SMOD进行维护,CMOD进行实现。SMOD中的一个增强可以包含上述的源代码、屏幕和表增强。
Enhancement比较重要的表MODSAP,组件功能模块名(Member):里面记录了所有enhancement的增强;表TFDIR,包括出口函数在内的所有函数表,字段MAND(值为C表示此出口函数被激活)
二代增强的查找方法:
第一种方法,在程序中搜索customer-function找到后面的3位数字编号,出口函数名称由三部分组成:EXIT_<程序名>_<3位数字>,通过找到的出口函数名到MODSAP表里查找对应的出口对象(即增强点),再通过SMOD查看这个增强点
第二种方法,通过调试系统相关函数:MODX_FUNCTION_ACTIVE_CHECK,找出口函数,通过找到的出口函数名到MODSAP表里查找对应的出口对象(即增强点),再通过SMOD查看这个增强点
第三种方法,SE93先查找到对应的程序名,然后SE11查询数据表TADIR(限定PGMID=“R3TR”、 OBJECT= “PROG”、OBJ_NAME=程序名)找对应开发类,如果找不到对应开发类,通过SE38查看程序,在菜单 “转到-属性”中找开发类。然后再用SE11查询数据表TADIR(限定PGMID=“R3TR”、 OBJECT= “SMOD”、DEVCLASS=开发类)就可找到此程序可用的增强点。
关于二代增强实例的注意事项:
(1) 屏幕增强时,屏幕字段名的前缀必须要设置为系统预先定义好的全局EKKO_CI内表类型名,这样的屏幕字段就可以自动与该内表进行交互,EKKO_CI即为系统预先预先定义好的增强屏幕所需的结构类型
当向预留结构CI_EKKODB中扩展字段时,EKKO_CI也会自动得到扩展,还有EKKO表结构也会被扩充。
(2) 对于增强的子屏幕,屏幕字段的前缀名一定要是EKKO_CI,这样才能与增强预留结构EKKO_CI进行数据交互,将最终内表中的数据读取到子屏幕绑定的内表中,再将子屏幕绑定的内表中的数据转存到最终全局变量的内表中
(3)最后想要使增强生效,必须同时激活,增强点,增强函数,和增强函数里的包含程序
关于二代增强的其他举例:
(1)如在ME23N中,找到的屏幕增强共有6个,含义是在此程序中,共预留了6个相关的屏幕增强出口,但是具体增强在什么位置,需要代码尝试后,才知道。
(2)屏幕增强一般需要配合功能增强来使用,屏幕增强将数据整合到函数组的全局变量,然后再通过功能增强的函数,将数据整合到程序的全局变量
(3)关于判断多个函数功能增强之间,有没有符合增强需求的,可通过查看描述,然后代码尝试,或者网上搜索来进行匹配
三代增强:BADI接口增强
BADI是基于面向对象的SAP增强技术:SAP预定义了接口,由客户来实例化继承相应的接口,应用程序通过调用来获得用户定义的类的实例,BADI对象的信息存储SXS_INTER、SXC_EXIT、SXC_CLASS和SXC_ATTR这四个表,SE18定义接口功能,SE19创建实现类并编写代码。
SAP保证所有的BADI接口兼容向上,版本更新既不会影响标准版本中增强的调用,也不会影响接口调用的正确性。BADI的源代码增强以接口形式发布,也是通过接口的方法调用来使用,用户增强时,实际是实现一个(或多个)基于这个接口的实现类。由于接口可以有多个实现类,所以对一个增强可以有多种不同的源代码,它们通过过滤器应用于不同的业务场景。
BADI也能做屏幕增强,取决于系统是否预留了接口,先找二代留下的屏幕增强出口,如果没有,再查找三代,代码实现时,将参数放入到全局变量里,程序的原有代码,后续会对全局变量进行数据处理;对于增强具体选什么方法进行实现,只有网上搜索,和代码尝试,实现的具体功能,可以参考方法描述,或者打断点进行测试
三代增强的查找方法:
(1)在SE24中对类cl=>get_instance方法进行调试,运行一个tcode,看一下exit_name的值,就是要找的BADI
举例:用SE24进行DEBUG查找BADI时,输入tcode:MM01以后,会分别进入到3个BADI,选择视图的时候,会有1个BADI,进入tcode后,还会有BADI,所以,对于同一个tcode的不同操作,不同的界面,会分别有不同的BADI
(2)在主程序中搜索cl_exitHandler,查看它所引用(TYPE REF TO)的接口名,根据接口命名规则 IF_EX_< badi >,得到badi名称
(3)ST05选择“table buffer trace"而不是常用的"SQL trace",然后查找表和视图(SXS_INTER、SXC_EXIT,SXC_CLASS和SXC_ATTR),找到对应BADI
关于三代增强的实现:
(1)关于判断是否是符合需求的BADI方法,BADI都是一些接口,通过传入传出的参数去判断,是否是自己所需的数据和需要处理的数据。
(2)BADI内,类的方法是没有代码的,需要用户去实例化,然后写入代码,用BADI来实现需求
(3)对于BADI实现的具体操作,首先要创建一个BADI的实现(BADI是面向对象的思想,可以把BADI理解为一个类),然后双击方法进去写代码,并激活,然后再激活增强,(先是激活程序,后是激活增强,不是一个东西),一般来说测试增强前,都要检测确认下增强是否被激活
四代增强:隐式增强和显式增强(explicit Enhancement & implicit Enhancement)
四代增强包含隐式增强点和显式增强点,下图为显式增强点,系统预留的增强点,
隐式增强点需要用户手动添加,然后写入代码,首先查看可以进行隐式增强的地方
可以进行隐式增强的FORM,会出现下图的虚线标志,含义是可以在此处进行隐式增强,一般会出现在FORM的头部和尾部,点击增强的图标按钮,进入增强模式
然后创建增强,书写代码
四代增强对BADI做出了改进,基本可以在面向对象的程序里实现处处皆可增强,但是此种不建议使用,只有无法通过前三种增强实现时,才考虑四代增强
附:SAP自定义权限对象链接
https://mp.weixin.qq.com/s?__biz=MzAwODA2MjA2Mg==&mid=2247484793&idx=1&sn=08efa5545b0d16be53236a34e577a035&chksm=9b75d078ac02596e67a75defacd83b15aaedb05fba76843538d4c7019dc9fd0952e207dc52bb&mpshare=1&srcid=0818rytr9aKufWo07NbY2fsI&sharer_sharetime=1597713352759&sharer_shareid=c76365b69f75b7f20a4cbbf6b91bb777&from=singlemessage&scene=1&subscene=10000&clicktime=1597713392&enterid=1597713392&ascene=1&devicetype=android-29&version=27001139&nettype=ctnet&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AWJ5ZqOtbl%2B240SC7OFMglg%3D&pass_ticket=d3GP39vrUly10QZjrSqOb1QZ4h%2BbavWMwbyniPTNfWpdMJOav78oskCVskX0Vj7W&wx_header=1
ABAP 增强知识整理相关推荐
- abap alv新增行数据_ABAP_ALV_最好教程 最全知识整理.doc
ABAP_ALV_最好教程 最全知识整理 ABAP ALV 知识整理 亿力科技 ABAP开发组 目 录 一.ALV简介3 1.简介3 2.ALV_GRID介绍3 3.其它描述3 二.开发ALV的基本流 ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
- keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...
Keil软件"C语言"与"汇编"混编 相关知识整理 用Keil在C中嵌入汇编1 在Keil中嵌入汇编2 介绍直接嵌入汇编代码的方法4 采用汇编可能会有的好处5 ...
- *Java软件开发面试知识整理*
Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...
- 小学语文毕业知识整理与复习题
小学语文毕业知识整理与复习题 2011年07月23日 小学语文是义务教育阶段的一门基础学科,担负着全面提高学生语文素养的重任.经过六年的学习,大多数学生已具备了一定的语文素养,但是由于学生的个体差异, ...
- keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf
Keil软件"C语言"与"汇编"混编 -- 相关知识整理.pdf Keil 软件软件C 语言语言与与汇编汇编混编混编 相关知识整理相关知识整理 用 Keil 在 ...
- ABAP ALV 总结整理
ABAP ALV 总结整理 目录 一.ALV简介 1.简介 2.ALV_GRID介绍 3.其它描述 二.开发ALV的基本流程 三.ALV相关开发细节 1.标准ALV与对象ALV的共同开发细节 2 ...
- 高教版《管理学》(第四版)重点知识整理
高等教育出版社<管理学>(第四版)重点知识整理 **注:只含本书1-13章课程,其中不包含第四章和第九章 v 第一章·管理活动与管理理论 Ø 第一节 管理活动 一.管理的定义 管理是指组织 ...
- MYSQL数据库常用知识整理
为什么80%的码农都做不了架构师?>>> MYSQL数据库常用知识整理 什么是MYSQL MYSQL的特性 MYSQL存储引擎的分类以及数据文件的介绍 MYSQL赋权 MYSQ ...
最新文章
- python自学网课-python网课学习笔记--4
- 20180724 (面向对象:类的命名空间和查询顺序丶组合)
- 利用邻接表完成图的BFS和DFS
- SpringBoot笔记:SpringBoot集成SpringbootAdmin监控
- Linux 安装Anroid Studio 0.8
- python加密与解密_Python加密与解密,pythonCrypt,和
- 允许同站跨域Nginx配置方案
- 美国燃油“动脉”被黑客切断,网络安全走向哪里?专访山石网科|拟合
- 【codevs30521022】多米诺覆盖,二分图
- UIButton的几种触发方式
- mvc各层简单清晰的描述
- Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins问题的解决
- 提高语音识别率:必须加入深度学习吗?
- RXJAVA之Subject
- oracle 分组随机抽取,Oracle 中实现随机抽取数据
- 百度搜索引擎优化入门篇——来自百度的一封信
- 第十五章 Caché WebSocket
- 树莓派 zero 通过 max31865 连接 PT100 热电阻 测量温度
- 人力资源管理中的能力素质模型
- vue 项目总结一组件开发的配置和例子
热门文章
- matlab节点连通率,利用matlab仿真最小发射功率下wsn的连通性和覆盖率.docx
- hadoop与spark环境搭建命令简易教程(Ubuntu18.04)
- 程序猿的自救 从零备考NSCA/CSCS 2 阻力运动生物力学
- 春招,秋招面试题总结
- Primo.Ramdisk.Srv.Mui.Setup安装配置教程
- 改良IFDS扰动流场三维避障规划算法实现
- Kubernetes-调度、节点亲和反亲和、pod亲和反亲和、Taints污点的处理
- 【数据库系统】数据库系统概论====第十三章 数据库技术发展
- 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_关于笔记本电池更换的建议
- Ubuntu下lede源码的下载与编译