【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解

news/2024/11/18 2:34:35/

【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解

  • 1、Tcode
  • 2、概念
  • 3、增强选项类型
  • 4、增强实现类型
  • 5、增强操作方式
  • 6、增强选项与增强实现关系
  • 7、增强实施建议

1、Tcode

SE18:Business Add-Ins: Definitions(增强点定义/查看),用于增强选项的查看与维护。
在这里插入图片描述
SE19:Business Add-Ins: Implementations(增强实施),基于增强点创建和维护增强实施。
在这里插入图片描述

2、概念

(1)Enhancement Spot(增强容器),用于组织增强选项,一个Spot内可以有多个增强选项,一般一个程序建一个Spot即可。
(2)Enhancement Options(增强选项),包含以下两种类型的增强选项:Point、Section,一个程序可以建多个Option。
(3)Enhancement Implementation Point,在ABAP程序中定义的一个位置,用于插入增强实施代码。
(4)Enhancement Implementation Section,在ABAP程序中定义的一个区域,其中的代码将会被增强实施替换。
在这里插入图片描述

3、增强选项类型

(1)显式增强选项:
ENHANCEMENT-POINT/SECTION zen_name SPOTS zspots_name STATIC .
显式增强选项由增强点管理,必须事先插入到源代码中,并通过增强实现进行增强。
(2)隐式增强选项
隐式增强选项由增强框架提供,不需要开发人员做任何特定准备,它们不必属于容器(增强点)。
它们也通过增强实现得到增强。

4、增强实现类型

(1)静态形式(Declaration):增强选项添加STATIC,对应隐式增强实现时的声明类型,一般用于数据声明的增强。当增强实现所在包的switch状态为开和备用(On & Stand-by)时,代码会被执行;对于ENHANCEMENT-SECTION中的数据声明,可以重新定义。
(2)动态形式(Code):增强选项不添加STATIC,对应隐式增强实现时的代码类型,一般用于可执行代码的增强。当增强实现所在包的switch状态为开(On )时,代码才会被执行。对于ENHANCEMENT-SECTION中的数据声明,为静态全局变量,不能被替换。
两者区别
当增强实施未设置switch时,代码都会执行,但静态形式的效率更高一些。
不建议使用静态SECTION,因为会更改数据声明,可能导致不可预料的问题。
在这里插入图片描述

5、增强操作方式

参考:【SAP Abap】SAP第四代增强开发DEMO
增强Demo:

REPORT yz_demo_enhancement_4g.WRITE: / 'BEGIN,来自主程序'.
SKIP." 静态增强点
ENHANCEMENT-POINT YPOINT1 SPOTS YSPOTS1 STATIC .
*$*$-Start: YPOINT1-----------------------------------------------------------------------------$*$*
ENHANCEMENT 1  YEH001.    "active versiondata: gv_po1(10) VALUE 'Test1'.write: / '增强点1-静态YPOINT1实施:' && gv_po1.
ENDENHANCEMENT.
ENHANCEMENT 2  YEH002.    "active version
*write: / '增强点1-静态YPOINT1实施2:' && gv_po1.
ENDENHANCEMENT.
*$*$-End:   YPOINT1-----------------------------------------------------------------------------$*$*SKIP.
" 动态增强点
ENHANCEMENT-POINT YPOINT2 SPOTS YSPOTS1 .
*$*$-Start: YPOINT2-----------------------------------------------------------------------------$*$*
ENHANCEMENT 2  YEH001.    "active versionwrite: / '增强点2-YPOINT2实施,获取YPOINT1中的变量:' && gv_po1.data: gv_po2(10) VALUE 'Test2'.write: / '增强点2-YPOINT2实施:' && gv_po2.
ENDENHANCEMENT.
*$*$-End:   YPOINT2-----------------------------------------------------------------------------$*$*SKIP.
" 静态增强段(数据能重定义)
ENHANCEMENT-SECTION YSECTION1 SPOTS YSPOTS1 STATIC .DATA: gv_sec1(10) VALUE 'SEC1'.WRITE: / 'YSECTION1预留代码:' && gv_sec1. " 实施后代码被替代
END-ENHANCEMENT-SECTION.
*$*$-Start: YSECTION1---------------------------------------------------------------------------$*$*
ENHANCEMENT 3  YEH001.    "active versionDATA: gv_sec1 type d VALUE '20230517'.  " 变更数据定义WRITE: / '增强段1-静态YSECTION1实施:' && gv_sec1.write: / '增强段1-静态YSECTION1实施,获取YPOINT1中的变量:' && gv_po1.
ENDENHANCEMENT.
*$*$-End:   YSECTION1---------------------------------------------------------------------------$*$*SKIP.
WRITE: / '主程序-获取YSECTION1中的变量:' && gv_sec1.
SKIP." 静态增强段(数据不能重定义)
ENHANCEMENT-SECTION YSECTION2 SPOTS YSPOTS1 .DATA: gv_sec2(10) VALUE 'SEC2'.               "此处变量在其定义后全局可用WRITE: / 'YSECTION2预留代码:' && gv_sec2.     " 实施后代码被替代,不再执行
END-ENHANCEMENT-SECTION.
*$*$-Start: YSECTION2---------------------------------------------------------------------------$*$*
ENHANCEMENT 4  YEH001.    "active version"DATA: gv_sec2(10) VALUE 'SEC2'.              "不能重定义"WRITE: / 'YSECTION2预留代码:' && gv_sec2.  "不能获取被替换代码中的变量write: / '增强段2-YSECTION2实施:不能重定义变量'.write: / '增强段2-YSECTION2实施,获取YPOINT2中的变量:' && gv_po2.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Enhancement Exit YSECTION2, Enhancement YEH001, End                                                                                               A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  YEH003S.    "active version
*write: / '增强段2-YSECTION2实施,来自静态隐式增强'.
ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*
ENDENHANCEMENT.
ENHANCEMENT 1  YEH002.    "active versionWRITE: / '增强实施2 YEH002:不能获取被替代代码中的变量'. " 仅此第一个实施生效
ENDENHANCEMENT.
*$*$-End:   YSECTION2---------------------------------------------------------------------------$*$*SKIP.
WRITE: / '主程序-获取YSECTION2中的变量:' && gv_sec2.     "可以获取SKIP.
WRITE: / 'END,来自主程序'.

6、增强选项与增强实现关系

一个增强点可以有多个增强实现代码,按创建顺序从上到下排序,执行顺序亦是如此;
一个增强段可以有多个增强实现,按创建顺序从上到下排序,但只有第一个实现生效;
一个增强实现,可以跨多个增强点/段,代码块按实施顺序显示为:ENHANCEMENT 1,2,3,…,它们同属于一个实现,同时生效,其中的代码可以有一定的逻辑连贯性。

7、增强实施建议

相关功能可以在一个实施中实现,不相关的功能建议分开实施。

原创文章,转载请注明来源-X档案


http://www.ppmy.cn/news/73318.html

相关文章

深度解析Qt背景设计:从基础到高级,从Widget到Quick

深度解析Qt背景设计:从基础到高级,从Widget到Quick 一、Qt背景设计的基础知识(Basic Knowledge of Qt Background Design)1.1 Qt背景的基本概念(Basic Concepts of Qt Background)1.1.1 QWidget和QQuickIte…

网易游戏开发实习生一面面经

面试时长20min(没有手撕代码) 1、介绍一下自己 2、MonoBehaviour是干什么的 3、说一下Update和FixedUpdate、LateUpdate的区别 4、关于xlua你了解多少 5、你觉得xlua有什么优缺点的地方 6、对Unity插件有了解吗 7、说一下shared_ptr和weak_ptr&#xff1…

C++ map用法总结(整理)

1,map简介 map是STL的一个关联容器,它提供一对一的hash。 第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value); map以模板(泛型)方式实现,可以存储任意类型的…

2023五一数学建模B题完整思路

已更新五一数学建模ABC题思路,文章末尾获取! B题思路: 问题1:附件1为该快递公司记录的2018年4月19日—2019年4月17日的站点城市之间(发货城市-收货城市)的快递运输数据,请从收货量、发货量、快递数量增长/减少趋势、…

厚积薄发|迭代为什么叫冲刺?

上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道。–《道德经》 软件工程从原始的作坊式工作方式,经过了哪些思考、哪些方案的试探,才在不断地尝试与改善后,走…

java接口与实现

文章目录 一、Java接口二、Java实现接口三、Java接口回调四、Java接口与多态五、Java接口参数六、Java接口与抽象类的比较七、Java接口的UML图总结 一、Java接口 接口是Java语言中一种重要的数据类型,通常使用关键字interface来定义一个接口。 接口的定义和类的定…

成功的产品经理,应该了解一定的开发知识

产品经理在互联网产品开发中扮演着协调和推动的重要角色。然而,由于产品经理没有直接的实际权力,与开发团队合作时可能会遇到各种挑战。当你给开发人员分配任务时,他们可能会找各种借口推脱工作。 在项目开发中,所有成员必须共同…

丢与网站常用Permit 离线签名之实战案例和原理讲解

目录 背景 现象分析 正确应对 原理分析之Permit 参考 背景 5 月 11 日,0x9f4a15.....56e8f8因误点钓鱼网站(大家千万别点!