ABAP内表循环事件块
AT FIRST…ENDAT
在遍历至第一条数据时执行该代码块
AT LAST…ENDAT
在遍历至最后一条数据是时执行该代码块
ON CHANGE OF…ENDON
指定其中一个字段,当该字段发生变化时,执行该代码段,
执行时机:
- 第一行
- 指定字段与上一条不一致时
代码如下:
*声明一个结构
DATA: BEGIN OF gs_alv,
va1 TYPE char2,
va2 TYPE char2,
va3 TYPE char2,
va4 TYPE char2,
END OF gs_alv.
*声明内表
DATA: gt_alv LIKE TABLE OF gs_alv.
*赋值宏
DEFINE append_va.
gs_alv-va1 = &1.
gs_alv-va2 = &2.
gs_alv-va3 = &3.
gs_alv-va4 = &4.
APPEND gs_alv TO gt_alv.
CLEAR gs_alv.
END-OF-DEFINITION.
*给内表赋值
append_va '11' '11' '11' '11'.
append_va '11' '11' '11' '22'.
append_va '22' '11' '11' '33'.
append_va '11' '22' '33' '44'.
*输出表内容:
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv1>).
WRITE:/1 <fs_alv1>-va1,5 <fs_alv1>-va2,9 <fs_alv1>-va3,13 <fs_alv1>-va4.
ENDLOOP.
*遍历内表,测试on change of 。。。。endon语句,输出触发的那一行
write:/ sy-uline.
write:/'on change of'.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_02>).
on CHANGE OF <fs_02>-va3.
WRITE:/1 <fs_02>-va1,5 <fs_02>-va2,9 <fs_02>-va3,13 <fs_02>-va4.
endon.
ENDLOOP.
测试结果如下:
AT NEW…ENDAT
遍历时会检查指定字段及左面所有字段,当其中之一发生改变,则执行该代码段,比如:
指定字段为上例中的va3,则程序会检查va1,va2,va3这三个字段,当其中之一发生变化,则会执行该代码段。其中第一行必执行
代码如下:
write:/ sy-uline.
write:/'AT NEW '.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_01>).
AT NEW va3.
WRITE:/1 <fs_01>-va1,5 <fs_01>-va2,9 <fs_01>-va3,13 <fs_01>-va4.
ENDAT.
ENDLOOP.
测试结果如下:
AT END OF…ENDAT
遍历时会检查指定字段,及左面所有字段,当其中之一与下一行不一致时,执行该代码段,与AT NEW相反,该语句必然执行的是最后一行
代码如下:
write:/ sy-uline.
write:/'AT END OF '.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_03>).
AT end of va3.
WRITE:/1 <fs_03>-va1,5 <fs_03>-va2,9 <fs_03>-va3,13 <fs_03>-va4.
ENDAT.
ENDLOOP.
测试结果如下: