SmartPad4iのアプリケーションにて、IBMiプログラム側でエラーが発生した場合には、ジョブログが出力されます。
ジョブログからもエラー原因を突き止めることができますが、より詳細なプログラムの情報を得るために、プログラムダンプを取得することもできます。
Tipsでは、IBMi側プログラムでエラーが発生した際に、プログラムダンプを出力する方法についてご紹介します。
プログラムダンプについて
ダンプ命令によってモジュールのダンプを行うと、プログラム内のフィールド、ファイル、標識、データ構造、配列の詳細情報を出力できます。
そのため、エラー発生時にプログラムのダンプを出力すると、エラーに至った詳細な情報を取得できます。
ダンプファイルは待ち行列QEZDEBUGにQPPGMDMPとして出力されます。
ダンプには、プログラムでエラーが発生した際の詳細な情報が出力されています。
例えば、上記ダンプファイルの場合、「プログラムの状況」で「呼び出し側プログラムがエラー。」が表示されていて、エラーのステートメントは14300(143行目)であることが分かります。
エラーが発生したRPGプログラムの143行目を確認すると、CALL ‘ERRAPP’を呼び出し時に「メッセージ・タイプ」では、「オブジェクトを分析解決することができない。…」が表示されているため、ERRAPPのオブジェクトが存在しないことがエラーの原因であると特定できます。
このように、ダンプを出力するとエラー原因を簡単に見つけることができます。
SmartPad4iでの設定方法
通常のIBMiプログラムでエラーが発生した場合、「ダンプを出力する」「終了する」等のメッセージ応答を行うことができます。
しかし、SmartPad4iでは、IBMiプログラム(RPG,COBOL)はSP4Iサブシステム下でバッチジョブとして動作します。
IBMiプログラム側でエラーが発生した場合、ジョブが終了してしまうため、エラーが発生してからダンプを取得することはできません。
バッチジョブのエラー発生時にプログラムダンプを出力するため、「システム応答リスト」を利用して自動応答を設定します。
システム応答リストの追加
システム応答リストは、ADDRPYLE コマンドで追加できます。
◆ADDRPYLE
https://www.ibm.com/docs/ja/i/7.4?topic=ssw_ibm_i_74/cl/addrpyle.html
システム応答リストの設定例は以下になります。
・RPG
ADDRPYLE SEQNBR(9700) MSGID(RPG0000) RPY('D')
・RPGLE
ADDRPYLE SEQNBR(9800) MSGID(RNQ0000) RPY('D')
・COBOL
ADDRPYLE SEQNBR(9900) MSGID(LBE0000) RPY('D')
自動応答を実行するための処理
自動応答リストに設定を追加後、SmartPad4iの環境設定用のCLプログラムでCHGJOBコマンドを実行して自動応答を有効に変更します。
CHGJOB INQMSGRPY(*SYSRPYL)
この設定を行うことで、IBMiプログラム側でエラーが発生した際に、ダンプファイルが出力されるようになります。
ダンプファイルを出力することが可能となりますが、エラー発生時にはSmartPad4iアプリケーションでエラー画面が表示されず、アプリケーションが終了します。
そのため、原因不明なアプリケーションエラーが発生した際にのみ、組込みを行い、調査終了後には
CHGJOB INQMSGRPY(*SYSRPYL) をコメントに変更して元の設定に戻してください。