关于enhancement point的简单使用 (ABAP 增强)
这是一个普通的report,没有任何增强。(如图1)
代码中插入一个增强点。(如图2,图3)
ZENH_SPOT01相当于一个容器,创建一个增强点的必要条件是要有一个容器。每个增强点(如ZENH_POINT01)都可以创建到这个容器当中,也可以再创建一个容器。删除这个容器的方法:在本地对象或它的包中删除或在SE18中删除,激活程序,退出再进。
插入后的代码。(如图4)
以上只是设置了一个enhancement point,而没有去实现它,这时执行程序输出的内容和插入enhancement point
之前没有变化。实际项目中我们要做的事情是:实现(implementation)SAP预留给我们的enhancement point。
具体操作如下:
1.切换到增强状态(如图5)
点完后原有的代码不能编辑,只能对代码进行增强。
2.实现Enhancement point(如图6),光标要定位到这行代码上。
弹出窗口(如图7)。
3.增强之后的代码(如图8,图9),在增强状态下激活一次。
4.然后在非增强状态下激活一次。(如图10)
5.可以看到增强后的效果。(如图11)
ENHANCEMENT 1 ZENH_IMP01. "active version
ENDENHANCEMENT.
增强的修改,edit->enhancement operations->change implementation.
ENDENHANCEMENT.
增强的修改,edit->enhancement operations->change implementation.
对于ENHANCEMENT-SECTION, 定义和实现的方法与ENHANCEMENT-POINT一样。两者的区别是:enhancement-point
没有代码,只有一个预留点,允许在这个位置插入新代码(implementation).
而enhancement-section和end-enhancement-section.之间有代码,implementation之后,替换旧代码,只执行
新代码,原来的代码不再执行。
编辑状态下能create option.编辑状态下不能编辑增强块,只能编辑其它地方。
增强状态下能对某个option create implementation.增强状态下只能编辑增强块,不能编辑
增强状态下能对某个option create implementation.增强状态下只能编辑增强块,不能编辑
其它地方.
"例:
REPORT ztest_enhpoint.
ENHANCEMENT-SECTION ZENH_SECTION01 SPOTS ZENH_SPOT02 .
WRITE:/ 'SECTION 01'.
END-ENHANCEMENT-SECTION.
*$*$-Start: ZENH_SECTION01----------------------------------------------------------------------$*$*
ENHANCEMENT 2 ZENH_IMP01. "active version
write:/ 'SECTION 02'.
ENDENHANCEMENT.
*$*$-End: ZENH_SECTION01----------------------------------------------------------------------$*$*
WRITE:/ 'aaa'.
ENHANCEMENT-POINT ZENH_POINT01 SPOTS ZENH_SPOT01 .
*$*$-Start: ZENH_POINT01------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZENH_IMP01. "active version
write:/ 'ENH,aaa'.
ENDENHANCEMENT.
ENHANCEMENT 1 ZENH_IMP02. "active version
write:/ 'ENH,bbb'.
ENDENHANCEMENT.
*$*$-End: ZENH_POINT01------------------------------------------------------------------------$*$*
WRITE:/ 'bbb'.
* 先创建一个enhancement point在容器spot01里,并创建它的2个实现;
* 又创建一个enhancement section在容器spot2里,在section中输出'section 01',再选中section01,创建implimentation,
* 在这里不创建新的imp,而是选择ZENH_IMP01.(这样也可以,说明一个程序中的imp可以随时用,id增加了1),修改imp,输出'section 01'.
* 执行结果,我发现Section 01不再输出了。。