ON CHANGE OF
基本形式
ON CHANGE OF dobj [OR dobj1 [OR dobj2] ... ].
statement_block
ENDON.
機能:
命令 ON CHANGE OF および ENDON はクラス内で は禁止されています。命令ブロックstatement_block を記述で きる制御構造を定義します。 ON CHANGE OF の後には、任意のデ ータ型のデータオブジェクト dobj1、dobj2 などを OR で結んで追加することができます。
命令 ON CHANGE OF が初め て実行されると、指定したデータオブジェクトのうち 1 つ以上が初期状態でない場 合に命令ブロックが実行されます。同じ命令 ON CHANGE OF が追加実行されるたびに、命令 ON CHANGE OF が前回実行 された以降に指定したデー タオブジェクトのいずれか の内容が変更された場合、命令ブロックが実行されます。
命令 ON CHANGE OF が実行 されるたびに、指定したデ ータオブジェクトすべての 内容がグローバルシステム で内部的に補助変数として 保存されます。補助変数は この命令にリンクしており 、プログラム内でアクセス することはできません。補助変数とその内容は、 プロシー ジャの存続期間より長く保 存されます。この種の保存 変数を初期化できるのは、 関連付けられたデータオブ ジェクトが初期状態であるうちに命令 ON CHANGE OF が実行される場合だけです。
補足説明:
この制御構造はクラス内で は禁止されており、きわめ てエラーになりやすいので 、明示的に宣言した補助変数を使用する 分岐に書き換えてください。
例:
DATA spfli_wa TYPE spfli. SELECT * FROM spfli INTO spfli_wa ORDER BY carrid. ... ON CHANGE OF spfli_wa-carrid. ... ENDON. ... ENDSELECT.
以下のプログラムセクションでは、明示的な補助変数 carrid_buffer を使用する IF 制御構造に ON 制御構造を書き換える方法を示します。
DATA carrid_buffer TYPE spfli-carrid.
CLEAR carrid_buffer.
SELECT *
FROM spfli
INTO spfli_wa
ORDER BY carrid.
...
IF spfli_wa-carrid <> carrid_buffer.
carrid_buffer = spfli_wa-carrid.
...
ENDIF.
...
ENDSELECT.

浙公网安备 33010602011771号