zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    EL表达式与JSTL
    jsp
    Servlet 会话
    Servlet 常用类
    Servlet
    Java 网络编程
    CentOS系统下安装python3+Django
    转载Alpine Linux常用命令
    转载Alpine基础
    CentOS启动docker1.13失败(Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.)
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157046.html
Copyright © 2011-2022 走看看