未処理エスケープ・メッセージの例
次のシナリオで、エスケープ・メッセージが出され、それが起こったプロシージャーで処理できなかった時に
起こるイベントについて説明します。このシナリオでは次のことが想定されています。
- PGM1 と PGM2 という 2 つのプログラムがあり、これらは同じ活動化グル ープで実行されます。 それぞれには PRC1 と PRC2 という対応するプロシージャーが含まれています。
- PRC1 は PGM2 を動的に呼び出し、PRC2 が制御を受け取ります。
- PRC1 の CALL 命令コードには呼び出しに対するエラー標識があります。
- PRC2 には RPG 例外処理プログラムがコーディングされていません。 すなわち 、SUBST 命令に対するエラー標識がコーディングされておらず、また *PSSR エラー処理サブルーチンも ありません。
- PRC2 には演算項目 1 が負数である SUBST 命令があります。
PGM1 が PGM2 を呼び出す時に、SUBST 命令が試みられると、 例外メッセージ RNX0100 が生成されます。 図 1 は、 このシナリオと発生するイベントを説明しています。
図 1. 処理不能エスケープ・メッセージのシナリオ

ここで次のことが起こります。
- PRC2 の SUBST 命令ではエラー標識も活動状態の MONITOR グループもなく、*PSSR エラー処理サブルーチンもコーディングされていないために、PRC2 はプログラム・エラーを処理することができず、エラーは処理不能となります。
- エラーは機能チェックでないので、PRC1 にパーコレートされます (呼び出し スタックを押し上げます)。
- PRC1 は同じ例外メッセージを受け取り (処理し)、CALL 命令のエラー標識 をオンに設定しますが、その影響で PRC2 が終了します。
- ここで処理は、PRC1 の CALL ステートメントの後のステートメントから続 行されます。
注: 説明した同じ例外処理イベントは、プロシージャー呼び出し (CALLB 命令) にも
適用します。