サブプロシージャー内の例外処理プログラム

サブプロシージャー内の例外処理プログラム (リニア・メイン・プロシージャーとして指定されたものを含む) は、 サイクル・メイン・プロシージャー内の例外処理プログラムとは次の点で異なっています。
  • グローバル・ファイルを使用している場合、ユーザーはそのファイルの INFSR サブルーチンをコーディングできないため、ファイル・エラーの処理には エラー標識、'E' 命令コード拡張、または MONITOR グループを使用しなければなりません。
  • デフォルトの処理プログラムはありません。言い換えるとユーザーは、 照会メッセージを見ることはありません。
サブプロシージャー内の例外処理は、サブプロシージャー用に生成された RPG サイクル・コードが ないために、基本的にサイクル・メイン・プロシージャーと異なっています。 結果として、サブプロシージャー用のデフォルトの例外処理プログラムがないために、 サイクル・メイン・プロシージャーのデフォルトの処理プログラムが呼び出された 場合には、サブプロシージャーの異常終了が発生します。これは次のことを意味します。
  • サブプロシージャー内の *PSSR サブルーチンの ENDSR 命令の演算項目 2 はブランクでなければなりません。 サイクル・メイン・プロシージャー内のブランクの演算項目 2 は、 結果としてデフォルトの処理プログラムに制御が渡されることになります。 サブプロシージャーでは、ENDSR に達した場合には、サブプロシージャーが異 常終了し、サブプロシージャーの呼び出し元に RNX9001 が通知されます。
  • *PSSR がなく、機能チェックが起こった場合には、プロシージャーが 呼び出しスタックから除去され、例外が呼び出し元にパーコレートされます。
  • サブプロシージャー内のエラーについての照会メッセージは出されないの で、一部の入出力エラーに使用可能な '再試行' 機能へはアクセスできません。 サブプロシージャー内でレコード・ロック・エラーが予想される場合には エラー標識、または 'E' 拡張をコーディングして、状況がロックされているレコードに関連してい るかどうかを検査する必要があります。

グローバル・ファイルの PSDS および INFDS がモジュールの有効範囲を持っていることに注意してください。 メイン・プロシージャーおよびサブプロシージャーともにこれらを アクセスすることができます。

ヒント

*PSSR は、それがコーディングされているプロシージャーに対して ローカルであるので、共通のエラー処理ルーチンとするためには、エラーを処理するための プロシージャーをコーディングし、各ローカル *PSSR からそのプロシージャーを 呼び出すことができます。