关于增强知识的整理

最近在学习增强,总结如下:对于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 增强知识整理相关推荐

  1. abap alv新增行数据_ABAP_ALV_最好教程 最全知识整理.doc

    ABAP_ALV_最好教程 最全知识整理 ABAP ALV 知识整理 亿力科技 ABAP开发组 目 录 一.ALV简介3 1.简介3 2.ALV_GRID介绍3 3.其它描述3 二.开发ALV的基本流 ...

  2. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  3. keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...

    Keil软件"C语言"与"汇编"混编 相关知识整理 用Keil在C中嵌入汇编1 在Keil中嵌入汇编2 介绍直接嵌入汇编代码的方法4 采用汇编可能会有的好处5 ...

  4. *Java软件开发面试知识整理*

    Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...

  5. 小学语文毕业知识整理与复习题

    小学语文毕业知识整理与复习题 2011年07月23日 小学语文是义务教育阶段的一门基础学科,担负着全面提高学生语文素养的重任.经过六年的学习,大多数学生已具备了一定的语文素养,但是由于学生的个体差异, ...

  6. keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf

    Keil软件"C语言"与"汇编"混编 -- 相关知识整理.pdf Keil 软件软件C 语言语言与与汇编汇编混编混编 相关知识整理相关知识整理 用 Keil 在 ...

  7. ABAP ALV 总结整理

     ABAP ALV 总结整理 目录 一.ALV简介 1.简介 2.ALV_GRID介绍 3.其它描述 二.开发ALV的基本流程 三.ALV相关开发细节 1.标准ALV与对象ALV的共同开发细节 2 ...

  8. 高教版《管理学》(第四版)重点知识整理

    高等教育出版社<管理学>(第四版)重点知识整理 **注:只含本书1-13章课程,其中不包含第四章和第九章 v 第一章·管理活动与管理理论 Ø 第一节 管理活动 一.管理的定义 管理是指组织 ...

  9. MYSQL数据库常用知识整理

    为什么80%的码农都做不了架构师?>>>    MYSQL数据库常用知识整理 什么是MYSQL MYSQL的特性 MYSQL存储引擎的分类以及数据文件的介绍 MYSQL赋权 MYSQ ...

最新文章

  1. python自学网课-python网课学习笔记--4
  2. 20180724 (面向对象:类的命名空间和查询顺序丶组合)
  3. 利用邻接表完成图的BFS和DFS
  4. SpringBoot笔记:SpringBoot集成SpringbootAdmin监控
  5. Linux 安装Anroid Studio 0.8
  6. python加密与解密_Python加密与解密,pythonCrypt,和
  7. 允许同站跨域Nginx配置方案
  8. 美国燃油“动脉”被黑客切断,网络安全走向哪里?专访山石网科|拟合
  9. 【codevs30521022】多米诺覆盖,二分图
  10. UIButton的几种触发方式
  11. mvc各层简单清晰的描述
  12. Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins问题的解决
  13. 提高语音识别率:必须加入深度学习吗?
  14. RXJAVA之Subject
  15. oracle 分组随机抽取,Oracle 中实现随机抽取数据
  16. 百度搜索引擎优化入门篇——来自百度的一封信
  17. 第十五章 Caché WebSocket
  18. 树莓派 zero 通过 max31865 连接 PT100 热电阻 测量温度
  19. 人力资源管理中的能力素质模型
  20. vue 项目总结一组件开发的配置和例子

热门文章

  1. matlab节点连通率,利用matlab仿真最小发射功率下wsn的连通性和覆盖率.docx
  2. hadoop与spark环境搭建命令简易教程(Ubuntu18.04)
  3. 程序猿的自救 从零备考NSCA/CSCS 2 阻力运动生物力学
  4. 春招,秋招面试题总结
  5. Primo.Ramdisk.Srv.Mui.Setup安装配置教程
  6. 改良IFDS扰动流场三维避障规划算法实现
  7. Kubernetes-调度、节点亲和反亲和、pod亲和反亲和、Taints污点的处理
  8. 【数据库系统】数据库系统概论====第十三章 数据库技术发展
  9. 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_关于笔记本电池更换的建议
  10. Ubuntu下lede源码的下载与编译