タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【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


ホント、初歩的なログになってしまいましたが、自戒の念をこめて投稿しておきたいと思います。