SAP增强四

隐式增强

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

显示增强

显式增强就是手工加入到程序中的Enhancement options,有两种显式增强:

ENHANCEMENT-POINT: 只有一个预留点, 没有代码,用来在程序中直接插入新的功能代码,其概念与BADI的USER_EXIT类似,标准程序预留了部分已定义好的增强点可以让ABAP做插入代码来实现这个增强(也可以自定义增强点,但不能自定义增强选项,增强选项一定是系统预留下来的,如果没有增强选项则该处不可做增强),但是不能做屏幕和菜单增强。

其最大的优势在于方便,可以使用程序中已定义的变量,不像BTE和Customer EXIT中只能使用函数接口传过来的参数。

一般增强步骤:

1、DEBUG标准程序找到需要增强的位置,点EDIT->SHOW IMPLICIT ENHANCEMENT OPTIONS查看是否有预留增强选项(标准程序不能自己创建enhancement option ,只能使用系统预留的)。

2、创建增强点实现

为自己程序创建显示增强选项Explicit Enhancement options

 

单击[创建选项]菜单进入创建增强选项界面,输入增强点名及增强容器名(以Z开头),确认回车。

注:Enhancement Spot 就是SE18中的Enhancement Spot

 

 

 

 随后Editor上会多出一条语句,然后单击按钮切换增强模式。

 

 

 

 光标定位到增强语句上,单击[创建实现]菜单项创建增强点实现。

 

注:Enhancement Spot相当于一个容器,创建一个增强点的必要条件是要有一个容器。每个增强点都可以创建到这个容器当中,也可以再创建一个容器。

删除这个容器的方法:在本地对象或它的包中删除或在SE18中删除,激活程序,退出后再打开程序。

ENHANCEMENT-SECTION: 用来替换原有的功能代码,ENHANCEMENT-SECTION 和 END-ENHANCEMENT-SECTION之间有代码, implementation 之后, 替换旧代码,只执行新代码,原来的代码不再执行。

两者的区别是:enhancement-point没有代码,只有一个预留点,允许在这个位置插入新代码(implementation),而enhancement-section和end-enhancement-section.之间有代码,implementation之后,替换旧代码,只执行新代码,原来的代码不再执行。

隐式增强:使用系统预留的增强选项,一般在FORM FUNCTION METHOD第一行和最后一行,直接创建增强实施

显式增强:需要先创建增强选项,再创建增强实施

II. 查找方法1. 隐式增强:隐式增强一般在FORM FUNCTION METHOD第一行和最后一行

 

 

 

 2. 隐式增强:隐式增强可通过菜单栏 编辑->增强操作->显示隐式增强 显示隐藏增强

 

 

 

 3. 隐式增强:光标定位到系统预留的增强选项,再点击增强按钮创建增强实施,即可创建增强实施

 

 

 

 

4. 显式增强:通过菜单栏 编辑->增强操作->创建增强选项

 

5. 显式增强:光标定位到手动创建的增强选项,再点击增强按钮创建增强实施,即可创建增强实施

 

 

 

 

 

 

 转载https://blog.csdn.net/qq_30797051/article/details/108946959 

SAP源代码中语法形式如下:
显式增强:

隐式增强:

以MIGO事务码为例,查看MIGO源代码,就会发现源代码里面有很多上面那样语法形式语句存在

进入源代码查询界面后,点击如下 显示隐式增强

 

如下就是 SAP源代码中部分的的显式增强和隐式增强增强点

 

四代增强虽然比较灵活,但难点在于需要直接阅读源代码,才能找到对应的Enhancement-Point,才能去写增强代码实现对应功能。

下面就通过一个案例程序介绍一下四代增强是如何编写和实施的

1 .通过se38 写一个简单 ZIM_4G_ENHACE程序来说明

代码如下:

REPORT ZIM_4G_ENHACE.

PARAMETERS weekday TYPE s_weekday_00.

START-OF-SELECTION.

  CASE weekday.

    WHEN '1'.

      WRITE 'Monday'.

      EXIT.

    WHEN '2'.

      WRITE 'Tuesday'.

      EXIT.

    WHEN '3'.

      WRITE 'Wednesday'.

      EXIT.

    WHEN '4'.

      WRITE 'Thursday'.

      EXIT.

    WHEN '5'.

      WRITE 'Friday'.

      EXIT.

  ENDCASE.

现在需要在如下位置建立四代增强点

操作步骤如下

 

 

 

 

保存后,看源程序如下:

保存**后,完成在源程序中增加了一个4代显式增强点.
上面步骤只是在程序中建立了一个增强点,并没有执行什么动作,就相当于建立一个容器。如果需要实施增强,还需要进行实例化,下面会介绍如何进行实例化实施增强的步骤。
上面增强点是ENHANCEMENT-POINT 开头, 另外我们在读源程序时候发现有 ENHANCEMENT-SECTION 开头增强点,这两者是有差别的 ENHANCEMENT-SECTION 后面会有代码,如果没有去实施它时,标准程序会执行 ENHANCEMENT-SECTION 后面会有代码,但如果去实施增强,实例化这个增强,则增强代码会取代原 ENHANCEMENT-SECTION 后面会有代码,原来代码就不执行了。
比如如下在 ZIM_4G_ENHACE程序中增加 ENHANCEMENT-SECTION, ENHANCEMENT-SECTION后面会有代码:MESSAGE ‘Invalid weekday input’ TYPE ‘I’. (增加ENHANCEMENT-SECTION增强点步骤略和上面类似),如果不实施ENHANCEMENT-SECTION 增强,则执行MESSAGE ‘Invalid weekday input’ TYPE ‘I’. 这个语句,如果实施了增强,则增强代码就会取代它(下面将详细介绍)

按ENHANCEMENT-POINT 增强点建立步骤,建立如下 ENHANCEMENT-SECTION 增强点

以上步骤已在程序ZIM_4G_ENHACE中建立了ENHANCEMENT-POINT 和 ENHANCEMENT-SECTION 语法开头的增强点。

下面要介绍如何去实施增强,也就实例化它们.

 

 

 

 

 

 

 

 

 

 

执行程序ZIM_4G_ENHACE效果如下:

看下面执行效果
ENHANCEMENT-SECTION 增强点,目前并未实例化,也就是没有实施增强,但仍执行ENHANCEMENT-SECTION 和
END-ENHANCEMENT-SECTION 之间的代码,等下如果去实施它,则这个代码就不会再执行,被增强实施部分代码取代.

继续,出现如下界面

是执行了 ENHANCEMENT-POINT 增强点进行增强实施,即实例化的程序代码.

 

 下面在再对ENHANCEMENT-SECTION 增强点进行增强实施,即实例化,看看效果

实例化步骤和ENHANCEMENT-POINT一样,所以步骤省略。
ENHANCEMENT-SECTION 增强实施代码如下红色框:

**后执行程序ZIM_4G_ENHACE效果如下:

点执行弹出如下界面,已取代原来的代码,原来代码不在执行。

 

最后总结下ENHANCEMENT-SECTIONNHANCEMENT-POINT 区别

  1. ENHANCEMENT-SECTION和ENHANCEMENT-POINT 定义和实现的方法与一样。
  2. ENHANCEMENT-POINT没有代码,只有一个预留点,当实例化它时允许在这个位置插入增强代码。
  3. ENHANCEMENT-SECTION和END-ENHANCEMENT-SECTION之间有代码,当实例化之后,替换旧代码,只执行新代码,原来的代码不再执行。

版权声明:本文为weixin_40672823原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_40672823/article/details/105994981

 

posted @ 2023-04-03 16:19  kang09  阅读(102)  评论(0编辑  收藏  举报