ILE RPG プロシージャーが同一活動化グループ内の ILE CL プロシージャーに よって呼び出される時に、呼び出し元が状況メッセージまたは通知メッセージについて 監視している場合には、ILE CL の呼び出し元は、この ILE RPG プロシージャー が無視しようとしていた通知メッセージまたは状況メッセージにより、 制御権を得る場合があります。
例えば、ILE RPG プロシージャーがプリンター・ファイルにレコードを書き込む ときに、実際のプリンター・ファイルのレコード長が、RPG プロシージャーで 宣言された短いレコード長である場合には、通知メッセージ CPF4906 が RPG プロシージャーに送られます。 RPG 例外処理はこのメッセージをパーコレートするため、 デフォルト応答の 'I' がこのメッセージを無視します。 これを使用すると、出力操作が正常に続行され、 RPG プロシージャーが次の命令に進みます。
ただし、ILE CL MONMSG が制御を得ると、制御は、MONMSG の処置 または ILE CL プロシージャーの次のステートメントにただちに渡されます。
この問題は、多くの場合 ILE CL 呼び出し元の MONMSG で発生しますが、 CEEHDLR を使用して使用可能になっている ILE 条件処理プログラムを 使用する ILE RPG を含めて、通知メッセージと状況メッセージを 監視できる、他の ILE 言語でも生じる可能性があります。
この問題が検出される場合、これを避けるには次の 2 つの方法があります。
この処理プログラムの汎用性を高めて、重大度 0 (通知) と重大度 1 (警告) の メッセージをすべて無視するようにすることもできます。
図 141 は、CPF4906 を無視する ILE 条件処理プログラムの 例を示します。
*---------------------------------------------------------------- * 処理プログラム定義 *---------------------------------------------------------------- D Action S 10I 0 D Token DS D MsgSev 5I 0 D MsgNo 2A D 1A D Prefix 3A D 4A *---------------------------------------------------------------- * 処置 *---------------------------------------------------------------- D Handle C 10 D Percolate C 20 *---------------------------------------------------------------- * 重大度 *---------------------------------------------------------------- D Info C 0 D Warning C 1 D Error C 2 D Severe C 3 D Critical C 4 C *ENTRY PLIST C PARM Token C PARM dummy 1 C PARM Action *---------------------------------------------------------------- * これが CPF4906 であれば通知メッセージを処理、それ以外は * パーコレート *---------------------------------------------------------------- C IF Prefix = 'CPF' AND C MsgNo = X'4906' C EVAL Action = Handle C ELSE C EVAL Action = Percolate C ENDIF C RETURN
図 142 は、すべての状況および通知メッセージを無視する場合に 演算をコーディングする方法を示します。 エスケープ・メッセージおよびファンクション・チェックは 重大度 2 以上になります。
*---------------------------------------------------------------- * 情報メッセージまたは警告メッセージを処理、それ以外は * パーコレート *---------------------------------------------------------------- C IF MsgSev <= Warning C EVAL Action = Handle C ELSE C EVAL Action = Percolate C ENDIF C RETURN
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.