在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.
执行结果如下图: