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

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

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

1、Tcode

SE18:Business Add-Ins: Definitions(增强点定义/查看),用于增强选项的查看与维护。
【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解_第1张图片
SE19:Business Add-Ins: Implementations(增强实施),基于增强点创建和维护增强实施。
【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解_第2张图片

2、概念

(1)Enhancement Spot(增强容器),用于组织增强选项,一个Spot内可以有多个增强选项,一般一个程序建一个Spot即可。
(2)Enhancement Options(增强选项),包含以下两种类型的增强选项:Point、Section,一个程序可以建多个Option。
(3)Enhancement Implementation Point,在ABAP程序中定义的一个位置,用于插入增强实施代码。
(4)Enhancement Implementation Section,在ABAP程序中定义的一个区域,其中的代码将会被增强实施替换。
【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解_第3张图片

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,因为会更改数据声明,可能导致不可预料的问题。
【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解_第4张图片

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 version
  data: 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 version
  write: / '增强点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 version
  DATA: 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 version
  WRITE: / '增强实施2 YEH002:不能获取被替代代码中的变量'. " 仅此第一个实施生效
ENDENHANCEMENT.
*$*$-End:   YSECTION2---------------------------------------------------------------------------$*$*

SKIP.
WRITE: / '主程序-获取YSECTION2中的变量:' && gv_sec2.     "可以获取

SKIP.
WRITE: / 'END,来自主程序'.

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

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

7、增强实施建议

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

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

你可能感兴趣的:(SAP,Abap,开发语言)