CANCEL ステートメントは、参照されるサブプログラムが次に呼び出されるとき、初期状態になるようにします。
| フォーマット |
|---|
|
ID-1 をウィンドウ化日付フィールドにすることはできません。
リテラル-1 または ID-1 の内容は、 関連する CALL ステートメント内に指定される ID のリテラルまたは内容と同じでなければなりません。
CANCEL ステートメントには、クラスまたはメソッドの名前を指定しないでください。
呼び出されたサブプログラムに対して CANCEL ステートメントを実行した後、そのサブプログラムは、当該プログラムに対して論理的関連を失います。サブプログラムによって記述された外部データ・レコード中のデータ項目の内容は、 サブプログラムが取り消されても変更されることはありません。 実行単位内でいずれかのプログラムが、同じサブプログラムを指名して CALL ステートメントを実行した場合、そのサブプログラムは、その初期状態で実行されます。
CANCEL ステートメントが実行されるとき、その CANCEL ステートメントに参照されるプログラムに入っている他のすべてのプログラムも、取り消されます。個別にコンパイルされたプログラム内のプログラムが 現れる順番とは逆の順序で、それらの各包含プログラムに対して、 有効な CANCEL ステートメントが実行された場合も、その結果は同じになります。
CANCEL ステートメントは、明示的な CANCEL ステートメントに指定されたプログラム内の、 内部ファイル結合子と関連するすべてのオープン・ファイルをクローズします。それらのファイルと関連する USE プロシージャーは実行されません。
以下のいずれかの方法で、呼び出されたサブプログラムを取り消すことができます。
次のどちらかのプログラムを指定した CANCEL ステートメントが実行されたときは、 何の処置も取られません。
マルチスレッド環境の場合、プログラムは、スレッド上のアクティブなプログラムを 指定して CANCEL ステートメントを実行することはできません。 指定するプログラムは、完全に非アクティブでなければなりません。
呼び出されるサブプログラムには、CANCEL ステートメントを入れることができます。 ただし、呼び出されるサブプログラムは、 呼び出し側プログラム自体を直接または間接に取り消す CANCEL ステートメントを実行することはできません。 または、呼び出しの階層内でそのプログラム自体より上位にある他のプログラムを取り消す CANCEL ステートメントを実行することもできません。 それを行うと、実行単位が終了します。
CANCEL ステートメント内で指名されるプログラムは、呼び出されてもまだ EXIT PROGRAM または GOBACK ステートメントを実行していないプログラムでなければなりません。
ただし、CANCEL ステートメントを実行するプログラムが呼び出し階層において取り消すプログラムより上位または等しいレベルであれば、 取り消し側プログラムは呼び出していないプログラムを取り消すことができます。以下に例を示します。
A calls B and B calls C (When A receives control, it can cancel C.) A calls B and A calls C (When C receives control, it can cancel B.)