`
guanhuaing
  • 浏览: 1196493 次
文章分类
社区版块
存档分类
最新评论

ABAP--关于abap语言的一个错误的理解

 
阅读更多

在这么多年的SAP使用中,我一直以为不包块在任何事件块内的abap语句sap会自动添加到START-OF-SELECTION事件块中,但今天无意被一个新同事发现不是这样。

仔细查阅SAP的abap语言帮助,帮助对于“不包块在任何事件块内的abap语句”是这样定义的:在REPORT或者PROGRAM 语句到第一个处理块(处理块不仅仅指事件块,也包含过程等)之间出现的语句。这些语句才会自动插于到START-OF-SELECTION事件块中。具体参见示例

示例1

REPORT demo_abap_events_1.

WRITE / 'Statement 1'.

FORM routine.
WRITE / 'Subroutine'.
ENDFORM.

WRITE / 'Statement 2'.
PERFORM routine.
WRITE / 'Statement 3'.

执行的结果:

Statement 1

在该例子中的红色部分语句就没有添加到START-OF-SELECTION事件块中

示例2

REPORT demo_abap_events_2.

WRITE / 'Statement 1'.

FORM routine.
WRITE / 'Subroutine'.
ENDFORM.

START-OF-SELECTION.
WRITE / 'Statement 2'.
PERFORM routine.
WRITE / 'Statement 3'.

执行的结果:

Statement 1

Statement 2

Subroutine

Statement 3

在该例子中的所有语句就没有添加到START-OF-SELECTION事件块中。

当然你按规范的方法写代码就不会出现上面的情况了,规范的代码如下:

REPORT demo_abap_events_3.

START-OF-SELECTION.
WRITE / 'Statement 1'.
WRITE / 'Statement 2'.
PERFORM routine.
WRITE / 'Statement 3'.

FORM routine.
WRITE / 'Subroutine'.
ENDFORM.

另外提醒大家注意的在事件块中定义的变量是全局,且不要认为是事件块范围有效。

详细的变量有效范围说明参见:

http://blog.csdn.net/compassbutton/archive/2007/06/14/1652392.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics