未処理エスケープ・メッセージの例

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

PGM1 が PGM2 を呼び出す時に、SUBST 命令が試みられると、 例外メッセージ RNX0100 が生成されます。 図 1 は、 このシナリオと発生するイベントを説明しています。

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