【AS400】修正したはずのプログラムが正しく反映されない?
GitなどのVersion管理システム(IBMならば、Team Concertでしょうか)で運用していれば、表題のような問題は発生しないかもしれませんが、 個人的にちょくちょくこういうことがありました(本来あってはいけません)。
修正したはずのプログラムが反映されていない!といった場合の確認事項をまとめておこうと思います。
確認1「ソースとオブジェクトのタイムスタンプを確認する」
まずは、最後に修正したソースが、正しくオブジェクト化されているかを確認しておきます。
①ソースの最終変更日の確認
ファイル
WRKMBRPDM TIGER/CLLESRC SAMP08*
- WRKMBRPDMコマンドより 「Opt=8.記述の表示」で確認できます。
PDM を使用したメンバーの処理
ファイル . . . . CLLESRC
ライブラリー . TIGER 位置指定 . . . . . .
オプションを入力して,実行キーを押してください。
2= 編集 3=コピー 4= 削除 5= 表示 6= 印刷 7= 名前の変更
8= 記述の表示 9= 保管 13=テキスト の変更 14=コンパイル 15=モジュール 作成 ...
OPT メンバー タイプ テキスト
8 SAMP08C CLLE OUTQ 存在チェック
終わり
パラメーターまたはコマンド
===>
F3= 終了 F4= プロンプト F5= 最新表示 F6= 作成
F9= コマンドの複写 F10= コマンド入力 F23=オプション の続き F24=キー の続き
- 変更日+変更時刻がソースの最終更新日時となります。
メンバー記述の表示
メンバー . . . . . . . : SAMP08C
ファイル . . . . . . . : CLLESRC
ライブラリー . . . . : TIGER
メンバーのタイプ . . . : CLLE
作成日 . . . . . . . . : 15/01/16
作成時刻 . . . . . . . : 07:30:00
変更日 . . . . . . . . : 15/01/16
変更時刻 . . . . . . . : 07:40:00
保管日 . . . . . . . . :
保管時刻 . . . . . . . :
復元日 . . . . . . . . :
復元時刻 . . . . . . . :
レコード数 . . . . . . : 20
削除済みレコード . . . : 0
テキスト . . . . . . . : OUTQ 存在チェック
F3= 終了 F12= 取り消し
ソース行
- CL,RPGともに、行の右端にて最終更新日付を確認できます。(下記のソースでは、すべて同じ日付なのですが・・・)
PGM000: PGM PARM(&P@OUTQ &P@EXIST) 150116
150116
DCL VAR(&P@OUTQ) TYPE(*CHAR) LEN(10) /* OUTQ */ 150116
DCL VAR(&P@EXIST) TYPE(*CHAR) LEN(01) /* EXIST FLG */ 150116
CHGVAR VAR(&P@EXIST) VALUE('1') 150116
150116
CHKOBJ OBJ(&P@OUTQ) OBJTYPE(*OUTQ) 150116
MONMSG MSGID(CPF9800) EXEC(DO) 150116
CHGVAR VAR(&P@EXIST) VALUE('0') 150116
ENDDO 150116
MONMSG MSGID(CPF9999) EXEC(DO) 150116
CHGVAR VAR(&P@EXIST) VALUE('0') 150116
ENDDO 150116
150116
150116
PGM999: ENDPGM
②オブジェクト作成日時の確認
- WRKOBJコマンドより 「Opt=8.記述の表示」で確認できます。
WRKOBJ OBJ(TIGEROBJ/SAMP08C)
オブジェクトの処理
オプションを入力して,実行キーを押してください。
2= 権限の編集 3= コピー 4= 削除 5= 権限の表示 7= 名前の変更
8= 記述の表示 13= 記述の変更
OPT オブジェクト タイプ ライブラリー 属性 テキスト
8 SAMP08C *PGM TIGEROBJ CLLE OUTQ 存在チェック
終わり
オプション 5, 7 および 13 のパラメーターまたはコマンド
===>
F3= 終了 F4= プロンプト F5= 最新表示 F11= 名前とタイプの表示
F12= 取り消し F16= 位置指定の繰り返し F17= 位置指定 F24= キーの続き
- 作成日/時刻がオブジェクトに変換されてタイムスタンプです。
オブジェクト記述の表示-明細
ライブラリー 1 の 1
オブジェクト . . . . : SAMP08C 属性 . . . . . . . . : CLLE
ライブラリー . . . : TIGEROBJ 所有者 . . . . . . . : USERNAME
ライブラリー ASP 装置 . : *SYSBAS ライブラリー ASP グループ : *SYSBAS
タイプ . . . . . . . : *PGM 1 次グループ . . . . : *NONE
ユーザー定義の情報 :
属性 . . . . . . . . . . . . . . . . :
テキスト . . . . . . . . . . . . . . : OUTQ 存在チェック
作成情報 :
作成日/時刻 . . . . . . . . . . . . : 15/01/16 07:50:00
作成ユーザー . . . . . . . . . . . . : USERNAME
作成システム . . . . . . . . . . . . : SYSTEMNAME
オブジェクト定義域 . . . . . . . . . : *USER
かなりベタですが、日時が ①>②となっていれば、最後に修正したソースがコンパイルされていない可能性があります。
確認2「論理ファイルをリレーションを確認(論理ファイル使用時)」
論理ファイルを使用している場合の話です。
以前、論理ファイルを作成した際、全然別なライブラリーリストの状態でコンパイルしてしまい、データ更新処理をアプリで実行するものの、ターゲットのデータが更新されないという問題を起こしたことがありました。
必要なデータを呼び出せない、または正しく追加・更新されないといった場合には、論理ファイルの関連性を確認してください。
作法としては、論理ファイルを作成したら、DSPDBRコマンドで、どの物理ファイルと関係しているかを、必ず確認しましょう!
確認3「実行時のライブラリーリストを確認」
こちらは基本中の基本ですが、DSPLIBLやEDTLIBLコマンドにて、アプリを実行しているライブラリーリストを確認したほうが良いでしょう。
EDTLIBL or DSPLIBL
ホント、初歩的なログになってしまいましたが、自戒の念をこめて投稿しておきたいと思います。