先看标准的语法:
ON CHANGE OF dobj [OR dobj1 [OR dobj2] ... ].
statement_block1
[ELSE.
statement_block2]
ENDON.
Effect
The statements ON CHANGE OF and ENDON, which are forbidden in classes, define a control structure that can contain two statement blocks:statement_block1 and statement_block2. AfterON CHANGE OF, any number of data objects dobj1, dobj2... of any data type can be added, linked byOR.
The first time a statement ON CHANGE OF is executed, the first statement blockstatement_block1 is executed if at least one of the specified data objects is not initial. The first statement block is executed for each additional execution of the same statementON CHANGE OF, if the content of one of the specified data objects has been changed since the last time the statementON CHANGE OF was executed. The optional second statement blockstatement_block2 after ELSE is executed if the first statement block is not executed.
For each time the statement ON CHANGE OF is executed, the content of all the specified data objects is saved as an auxiliary variable internally in the global system. The auxiliary variable is linked to this statement and cannot be accessed in the program. The auxiliary variables and their contents are retained longer than the lifetime of procedures. An auxiliary variable of this type can only be initialized if its statementON CHANGE OF is executed while the associated data object is initial.
Note
This control structure is particularly prone to errors and should be replaced by branches with explicitly declared auxiliary variables.
例子:
DATA : BEGIN OF TAB OCCURS 0,
ID TYPE CHAR01,
NAME TYPE CHAR10,
END OF TAB.
DATA : NUM TYPE I.
TAB-ID = '1'. TAB-NAME = 'A001'. APPEND TAB.
TAB-ID = '1'. TAB-NAME = 'A002'. APPEND TAB.
TAB-ID = '2'. TAB-NAME = 'A002'. APPEND TAB.
TAB-ID = '2'. TAB-NAME = 'A002'. APPEND TAB.
NUM = 0 .
LOOP AT TAB.
ON CHANGE OF TAB-ID .
NUM = NUM + 1.
ENDON.
ENDLOOP.
WRITE : / NUM.
NUM = 0 .
LOOP AT TAB.
ON CHANGE OF TAB-ID OR TAB-NAME.
NUM = NUM + 1.
ENDON.
ENDLOOP.
WRITE : / NUM.
结果:
用途:
对于内表判断的操作尤为重要,省去了好多变量以及if判断,值得注意的是,第一次进去肯定累加,收藏。