ABAP 增强知识点

news/2024/6/2 18:20:57 标签: 数据库, ABAP, SAP, SAB ABAP

一、增强类型

菜单增强

屏幕增强

功能模块增强

表/结构增强

二、增强的发展

一代增强:用户出口增强

二代增强:函数增强

三代增强:BADI增强

四代增强:显示增强和隐式增强

三、增强简介:

一代增强:用户出口增强

系统提供一个空代码的子过程,用户可以添加自己的代码来实现需求,这类增强都需要修改SAP的标准代码,源代码增强以子程序形式发布,在SAP的发行版本中,使用PERFOMR调用这些子程序,它们在发布时都是空的,这些子程序可以使用程序中的所有全局数据。

二代增强:Enhancement函数增强

源代码增强:以函数模块形式发布,使用CALL CUSTOMER-FUNCTION调用,这些函数模块中,这些函数模块中只能使用接口中传递的参数,不能使用程序的全局变量。

屏幕增强:也包含在函数增强所属的函数组中。

数据表的增强:通常时ci_结构,这些结构以.INCLUDE结构的形式包含在SAP发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。

上述这类增强通过事务码SMOD进行维护,CMOD进行实现。SMOD中的一个增强可以包含上述的源代码、屏幕和表增强。

Enhancement比较重要的表MODSAP,组件功能模块名(Member):里面记录了所有enhancement的增强;表TFDIR,包括出口函数在内的所有函数表,字段MAND(值为C表示此出口函数被激活)

三代增强:BADI接口增强

BADI是基于面向对象的SAP增强技术:SAP预定义了接口,由客户来实例化继承相应的接口,应用程序通过调用来获得用户定义的类的实例,BADI对象的信息存储SXS_INTER、SXC_EXIT、SXC_CLASS和SXC_ATTR这四个表,SE18定义接口功能,SE19创建实现类并编写代码。

SAP保证所有的BADI接口兼容向上,版本更新既不会影响标准版本中增强的调用,也不会影响接口调用的正确性。BADI的源代码增强以接口形式发布,也是通过接口的方法调用来使用,用户增强时,实际是实现一个(或多个)基于这个接口的实现类。由于接口可以有多个实现类,所以对一个增强可以有多种不同的源代码,它们通过过滤器应用于不同的业务场景。

BADI也能做屏幕增强,取决于系统是否预留了接口,先找二代留下的屏幕增强出口,如果没有,再查找三代,代码实现时,将参数放入到全局变量里,程序的原有代码,后续会对全局变量进行数据处理;对于增强具体选什么方法进行实现,只有网上搜索,和代码尝试,实现的具体功能,可以参考方法描述,或者打断点进行测试

关于三代增强的实现:

(1)关于判断是否是符合需求的BADI方法,BADI都是一些接口,通过传入传出的参数去判断,是否是自己所需的数据和需要处理的数据。

(2)BADI内,类的方法是没有代码的,需要用户去实例化,然后写入代码,用BADI来实现需求

(3)对于BADI实现的具体操作,首先要创建一个BADI的实现(BADI是面向对象的思想,可以把BADI理解为一个类),然后双击方法进去写代码,并激活,然后再激活增强,(先是激活程序,后是激活增强,不是一个东西),一般来说测试增强前,都要检测确认下增强是否被激活

四代增强(Enhancement Framework)

隐式增强:就是系统内置的 Enhancement options,是系统本身就预留的,如在:执行程序、包含程序、函数组、对话模块、结构的结尾处;Form例程、函数模块、方法等的开始和结尾处。

显式增强:就是通过代码加入到程序中的 Enhancement options,有两种显式增强:ENHANCEMENT-POINT 和 ENHANCEMENT-SECTION。也可以自定义显式增强点,但不能自定义增强选项,增强选项一定是系统预留下来的,如果没有增强选项则该处不可做增强。此类增强最大的优势在于方便,可以使用程序中已定义的变量,不像 BADI 和 EXIT 只能使用函数接口传过来的参数。


http://www.niftyadmin.cn/n/132507.html

相关文章

DEJA_VU3D - Cesium功能集 之 102-简单曲线箭头(标绘+编辑)

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码,…

【C++】缺省参数函数重载

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、缺省参数1.1 缺省参数的概念1…

ctfshow_crypto_妈呀完了writeup

目录一、题目原题二、解题步骤1.去掉01串中的空格2.把01二进制串转换成十进制数3.将十进制整数转换成bytes三、后记一、题目原题 题目给了一串01和一个png图片,打开看了提示说“图文无关”: 图片附件如下: 二、解题步骤 1.去掉01串中的空…

day27_css

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、CSS 零、 复习昨日 见代码 一 、引言 1.1CSS概念 ​ 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通…

STM32 延时函数(简单粗暴不精确)

简单的粗略延时 有时候不需要精确延时,比如只希望在一定的时间内切换一下GPIO的电平,就可以使用下面简单的函数: void delay(u16 delaytime) { u16 i0; while(delaytime--){i12000; //自己定义while(i--) ; }}int main() {while(1)…

(二十四)操作系统-吸烟者问题

文章目录一、问题描述二、问题分析1.关系分析2.整理思路3.设置信号量三、实现四、总结一、问题描述 假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要…

【源码库】在调用 createApp 时,Vue 为我们做了那些工作?

在使用Vue3时,我们需要使用createApp来创建一个应用实例,然后使用mount方法将应用挂载到某个DOM节点上。 那么在调用createApp时,Vue再背后做了些什么事情呢?今天就来扒一扒Vue3的源码,看看调用createApp发生了些什么…

Spring Bean实例创建装载过程分析-spring源码学习(2)

随着Spring框架的应用越来越广泛,对Spring Bean的实例创建装载过程的了解就显得尤为重要。本文将围绕这一主题,为大家详细介绍Spring Bean实例创建装载的整个过程,并透彻解析其细节。 时序图 一、Spring Bean实例的创建过程 Spring Bean实例…