第四代增强 增强基本概念
The basic concepts in the Enhancement Framework are:
- Enhancement options: positions in repository objects where you can make enhancements. Enhancement options can be explicit and implicit.
- Enhancement spots: containers for explicit enhancement options.
- Enhancement implementation elements: these contain the actual enhancement, for example, the source code to be added.
- Enhancement implementations: containers for both enhancement implementation elements of both implicit and explicit enhancement options.
增强框架中的基本概念是:
增强选项:被增强对象中的位置,您可以在其中进行增强。 增强选项可以是显式和隐式的。
增强点:作为显式增强选项的容器。增强点分为2种类型:Object Plug-in (BAdI),只能作为BADI的容器;Source Code Plug-In,只能作为源代码增强的容器
增强实现元素:这些元素包含实际增强功能,例如,要添加的源代码。
增强实现:作为隐式和显式增强选项的增强实现元素的容器。
增强选项分为两类:
隐式增强选项由增强框架提供,不需要开发人员做任何特定准备,它们不必属于容器(增强点)。ENHANCEMENT-SECTION;ENHANCEMENT-Point.
显式增强选项必须被事先被开发人员插入到源代码中。 必须通过增强点让其他的开发人员知道。 NEW BADI.
可用通过如下方式定义显式增强:
在ABAP程序中明确标记源代码点或节。 为了增强,可以通过源代码插件增强或替换它们。
在ABAP程序中包含业务加载项(BAdI)。 然后,这些程序通过具有预定义接口的对象插件得到增强。
显式增强选项由增强点管理,并通过增强实现进行增强。
ENHANCEMENT-POINT ze_point1 SPOTS ze_point_test2 . *$*$-Start: ZE_POINT1---------------------------------------------------------------------------$*$* ENHANCEMENT 1 ze_co_aaa. "active version * ENDENHANCEMENT. *$*$-End: ZE_POINT1---------------------------------------------------------------------------$*$* ENHANCEMENT-SECTION ze_section SPOTS ze_point_test2 . gv_i = gv_i + 1. END-ENHANCEMENT-SECTION. GET BADI gr_newbad. CALL BADI gr_newbadi->showtimes IMPORTING string = DATA(gv_string) RECEIVING time = DATA(gv_i).
框架提供了隐式增强选项。它们总是存在,不需要增强点。它们也通过增强实现得到增强。隐式增强选项包括:
- Specific options in ABAP programs - such as the end of the program - which can be enhanced by source code plug-ins. There are implicit enhancement points at the beginning and the end of each form, function module, method (of a global or local class) and the end of a report or include and each local structure. As for methods of local classes, you can enhance parameters of all types. There are also implicit options to add something in a defining section of a global class or to add the whole section (for example, a protected section) if it does not exist.
- Parameter interfaces of function modules which can be enhanced with new optional parameters.
- New methods, attributes, and events, which can be added to global classes. Each method of a global class offers pre-, post- and overwrite exits and options to add new optional parameters.
- Enhancement of a Web Dynpro object you have a lot of different implicit enhancement options offered by the framework. There are enhancement options for:
- UI elements
- Pre- and post-methods of Web Dynpro methods
- New methods
- New navigation paths
- New actions
- New attributes
- New nodes that hold the data for the UI elements.
下图显示了增强点和增强实现的概述。 左侧部分显示了增强点的相关术语以及它们之间的关系。 它仅适用于显式增强选项。 隐式增强选项不需要增强点。
右侧部分显示了增强实现的相关术语以及它们之间的关系。 这适用于显式和隐式增强选项的增强实现。
在实现方面,所有实现元素,无论它们是否增强隐式或显式增强选项都属于其他容器。
定义侧的容器和实现侧的容器以特定的基数分配给彼此。
分组增强功能
所有显式增强选项和所有增强实现元素都必须是容器的一部分。这是由框架的工具强制执行的。增强选项及其实现不得归为一类,因为它们属于不同的开发阶段。
在增强框架中,有定义端增强选项的容器和实现端实现的容器:
简单的容器
这些只能包含增强选项或增强实现元素。这些容器不能嵌套。一个基本容器只能容纳一种类型的元素。例如,一个简单的容器不能同时保存BAdI和增强选项。
复合容器
为了为嵌套结构腾出空间,有复合容器可以容纳基本容器和其他复合容器。这些复合容器可以包含用于不同增强类型的基本容器。由于这些复合容器可以嵌套,因此您可以构建一个真正满足项目需求的结构。一个简单的结构如下所示:
从头开始创建增强功能时,始终必须先创建相应的容器。 这类似于创建方法。 方法始终是类的一部分。 同样,没有独立的BAdI。 每个BAdI都是增强点的一部分,它是作为传输对象的点。 这就是为什么你不能建立一个新的BAdI,只是忘记了你可能习惯使用经典BAdI的方式。 也不可能首先构建BAdI并在以后处理它如何适应容器的结构。 构建BAdI时,必须从一开始就将BAdI放在相关结构中。 但只有简单的容器才是强制性的。 工具不强制执行复合增强点和复合增强实现。