プログラム例外/エラー処理サブルーチン

プログラム例外/エラーが起こった時に制御を受け取るユーザー作成の RPG IV サブルーチンを識別するためには、サブルーチンの BEGSR 命令の演算項目 1 に *PSSR を指定してください。命令コードの 73 から 74 桁目に標識が指定されていない場合、命令に (E) 拡張がない場合、そのステートメントがそのエラーを処理できる MONITOR グループ内にない場合、あるいは命令コードで予期されていない例外 (すなわち、SCAN 命令時の配列指標エラー) が起こった場合には、プログラム例外/エラーが起こった時点でこのサブルーチンに制御が移されます。 さらに、サブルーチンは EXSR 命令から呼び出すこともできます。 ファイル仕様書の INFSR キーワー ドに *PSSR を指定して、ファイル例外/エラーが起こった場合に制御を受け取る ことができます。

どの RPG IV 命令コードも、プログラム例外/エラー処理サブルーチンの中で使用することができます。ENDSR 命令はサブルーチンに対する最後の指定でなけ ればならず、ENDSR 命令の演算項目 2 の記入項目には、そのサブルーチンの実行 後の戻り点が指定されます。 演算項目 2 における有効な記入項目の説明については、ファイル例外/エラー処理サブルーチン (INFSR)を参照してください。

プログラム例外/エラー処理サブルーチンを指定する場合には、以下の点に留意 してください。
  • EXSR 命令の演算項目 2 に *PSSR を指定することによって、*PSSR サブルー チンを明示的に呼び出すことができます。
  • *PSSR サブルーチンの ENDSR 命令の実行後に、RPG IV 言語によって、演算項目 2 に指定されたフィールド、サブフィールド、または配列要素が ブランクにリセットされます。これによって、発生した例外/エラーに最も適したサブルーチン内の戻り点を 指定することができます。 サブルーチンの終わりで演算項目 2 にブランクが入っていた場合には、RPG IV のデフォルトのエラー処理プログラムが制御を受け取り、サブルーチンが EXSR または CASxx 命令によって呼び出されていた場合には、制御はその EXSR または ENDCS の後の次の順次命令に戻されます。
  • ファイル例外/エラー以外のものが起こった場合には、常にプログラム例外/エラー処理サブルーチンが制御を受け取ることになるので、サブルーチンの実行中 も例外/エラーが起こることがあります。 サブルーチンの実行中に例外/エラー が起こった場合には、そのサブルーチンが再び呼び出されます。プログラマーが この問題を避けるようにサブルーチンをコーディングしていなければ、これがプ ログラム・ループの原因となります。
  • CRTBNDRPG または CRTRPGMOD コマンドのいずれかで OPTIMIZE(*FULL) を使 用した場合には、例外処理時に参照するすべてのフィールドを、フィールドに対 する定義仕様書の NOOPT キーワードによって宣言しなければなりません。 これにより、ユーザー・プログラムで実行する時に、例外処理時に参照されるフ ィールドが確実に現在の値を持つことになります。
  • *PSSR をサブプロシージャーの中で定義し、各サブプロシージャーにはその 独自の *PSSR を入れることができます。 サブプロシージャー内の *PSSR は、そのサブプロシージャーに対してローカルな ものであることに注意してください。 サブプロシージャーに同じ例外ルーチンを共用させたい場合には、各 *PSSR で共 用プロシージャーを呼び出すことが必要です。