ABAP开发基础知识:10)数据流控制

    在SAP业务处理中,存在许许多多数据流,分别管控着不同的业务模式。下面介绍如何通过ABAP语法来实现数据流程管控。

    1)使用IF语句实现分支

      [Syntax]
      IF <condition1>.
          <statement block>.
      ELSEIF <condition2>.
          <statement block>.
      ELSE.
          <statement block>
      ENDIF.

      [For Example]
      DATA xx TYPE N VALUE 6.
      IF xx = 5.
         WRITE: / 'The value of xx is',5.
      ELSEIF xx = 6.
         WRITE: / 'The value of xx is',6.
      ELSE.
         WRITE: / 'The value of xx is',7.
      ENDIF.

    2)使用CASE...WHEN...ENDCASE语句实现分支

      [Syntax]
      CASE <f>.
        WHEN <f1>.
           <statement block>.
        WHEN <f2>.
           <statement block>.
        WHEN ...
        WHEN OTHERS.
           <statement block>.
       ENDCASE.

     [For Example]
     
DATA xx TYPE N VALUE 8.
      CASE xx.
       WHEN 5.
         WRITE: / 'The value of xx is',5.
       WHEN 6.
         WRITE: / 'The value of xx is',6.
       WHEN 7.
         WRITE: / 'The value of xx is',7.
       WHEN OTHERS.
         WRITE: / 'The value of xx is',8.
      ENDCASE.


   
3)使用LOOP...ENDLOOP语句实现循环控制
     LOOP语句通常用于实现内表数据的循环读取及操作。

     [For Example]
     LOOP AT itab.
       WRITE:itab.
     ENDLOOP.

    4)使用DO语句实现内部循环次数控制。
      DO 语句可以指定循环次数。

     [Syntax]
     DO.
       [<n> TIMES]
       [VARYING <f> FROM <f1> NEXT <f2>].
       <statement block>
     ENDDO.
     注:
     n:可以是数字或者变量,如果n是0或者负数,系统不执行该循环。
     TIMES:循环次数。
     VARYING:选项在每次循环中给变量<f>重新赋值。
     使用DO语句时要避免死循环,如果不使用TIMES选项,则在语句块中至少包含一个EXIT、STOP、REJECT语句,以使系统能退出循环。

      [For Example]
      DO 5 TIMES.
        WRITE:/ 'This Index is',SY-INDEX.
      ENDDO.

      DO语句内部还可以实现多层嵌套,为了保证程序可读性,建议嵌套最多不要超过6层。

      [For Example]
      DATA do_index TYPE N.
      DO 5 TIMES.
        do_index = SY-INDEX.
        WRITE:/ 'This Index is',do_index.
        DO 2 TIMES.
           WRITE:/ 'First Index Loop is',do_index, 'The Next Index Loop is',SY-INDEX.
        ENDDO.
      ENDDO.
      执行结果如下图:

    5)使用WHILE条件循环
      [Syntax]
      WHILE <condition> [VARY <f> FROM <f1> NEXT <f2>].
         <statement block>
      ENDWHILE.
     
循环终止CONTINUE、CHECK、EXIT

      [For Example]
      无条件终止循环(CONTINUE):
      DATA while_index TYPE N VALUE 0.
      WHILE while_index < 5.
        while_index = while_index + 1.
        IF while_index = 3.
          CONTINUE.
        ENDIF.
        WRITE:/ 'while_index',while_index.
      ENDWHILE.
      执行结果如下图:



有条件终止循环(CHECK):
DATA while_index TYPE N VALUE 0.
WHILE while_index < 5.
  while_index = while_index + 1.
  CHECK while_index BETWEEN 2 AND 5. 
  WRITE:/ 'The while_index is',while_index.
ENDWHILE.
执行结果:

完全终止循环(EXIT):
DATA while_index TYPE N VALUE 0.
WHILE while_index < 5.
  while_index = while_index + 1.
  IF while_index = 3.
    EXIT.
  ENDIF.
执行结果:

     6)使用ONCHANGE实现循环内部数据管控
      当循环的数值发生变动时,可以用表达式ONCHNAGE来触发数值变动事件。
      [For Example]
      DATA while_index TYPE N VALUE 0.
      WHILE while_index < 5.
        while_index = while_index + 1.
        DO 2 TIMES.
          ON CHANGE OF while_index.
            WRITE:/ 'The while_index has change value is',while_index.
          ENDON.
          WRITE:/ 'SY-INDEX=',SY-INDEX.
        ENDDO.
      ENDWHILE.
      执行结果如下图:

原文地址:https://www.cnblogs.com/foxting/p/2437682.html