自己学習メモインデックス
概要
IBM i (旧AS400)の自己学習メモ12 PF/LFのカラム追加に伴う再コンパイルの記事で、PFに対してカラム追加を行うケースにおいて、参照しているRPGプログラムなどを再コンパイルしないと、実行時にCPF4131
というエラーが発生すると触れました。
今はPUB400.comに少量のPF/LF/DSPF/CL/RPGを作ってお勉強中ですが、今後増えていった場合や、実際に業務で触れているAS400には相当量のオブジェクトが存在しています。
ファイルへのカラム追加に伴う本番環境への影響範囲ってどうやったら調べられるのか、疑問点についてアドバイスをいただき、DSPPGMREF
コマンドで、プログラムオブジェクトを中心に、どんなPF/LF/DSPF/RPGなどと依存関係にあるのか確認することができるということだったので、ここではDSPPGMREF
を使ってみようと思います。
DSPPGMREFを使ってみる
以下実際に実行したコマンドの例です。
DSPPGMREF PGM(YAMAGUCHI1/*ALL) OUTPUT(*OUTFILE) OUTFILE(YAMAGUCHI1/WPGMREFP)
このコマンドでは、YAMAGUCHI1ライブラリ内の全*PGMオブジェクトを対象にしています。
例えば、システム改修に伴い、修正する必要のあるRPGプログラムだけを指定してもいいと思います。
出力結果のデータサンプル
データ転送ツールなどを利用して、出力したファイルYAMAGUCHI1/WPGMREFP
の中身を見ると以下のようなデータが取得できます。
残念ながら出力されるファイルのCCSIDはDBCSの設定は弄れないようで、日本語のコメント部分などは文字化けしてしまいますが、業務で利用しているAS400であれば、ちゃんと日本語で出てくれると思います。
WHLIB | WHPNAM | WHTEXT | WHFNUM | WHDTTM | WHFNAM | WHLNAM | WHSNAM | WHRFNO | WHFUSG | WHRFNM | WHRFSN | WHRFFN | WHOBJT | WHOTYP | WHSYSN | WHSPKG | WHRFNB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
YAMAGUCHI1 | CLPGM00 | Hello World| | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM00 | Hello World| | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM00 | Hello World| | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM01 | sample cl program01 sysval qdate | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM01 | sample cl program01 sysval qdate | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM01 | sample cl program01 sysval qdate | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM02 | sample cl program02 output *print | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM02 | sample cl program02 output *print | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM02 | sample cl program02 output *print | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM03 | sample cl program03 | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM03 | sample cl program03 | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM03 | sample cl program03 | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM04 | sample cl program03 | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM04 | sample cl program03 | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM04 | sample cl program03 | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM05 | sample cl program05 *bcat | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM05 | sample cl program05 *bcat | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM05 | sample cl program05 *bcat | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM06 | sample cl program06 decimal calc | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM06 | sample cl program06 decimal calc | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM06 | sample cl program06 decimal calc | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM07 | sample cl program07 decimal calc | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM07 | sample cl program07 decimal calc | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM07 | sample cl program07 decimal calc | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM08 | Sample CL Program qdate yyyymmdd | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM08 | Sample CL Program qdate yyyymmdd | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM08 | Sample CL Program qdate yyyymmdd | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM09 | sample cl program09 if | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM09 | sample cl program09 if | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM09 | sample cl program09 if | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM10 | sample cl program select case | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM10 | sample cl program select case | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM10 | sample cl program select case | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM11 | Sample CL Program IF roop | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM11 | Sample CL Program IF roop | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM11 | Sample CL Program IF roop | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM12 | Sample CL Program Do While loop | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM12 | Sample CL Program Do While loop | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM12 | Sample CL Program Do While loop | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM13 | Sample CL Program For loop | 3 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM13 | Sample CL Program For loop | 3 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM13 | Sample CL Program For loop | 3 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM14 | Sample CL Program DCLF RCVF | 4 | 1200501105212 | SAMPLE | QTEMP | SAMPLE | 1 | 1 | SAMPLE | 2E120A651C813 | 1 | F | *FILE | PUB400 | P | 1 |
YAMAGUCHI1 | CLPGM14 | Sample CL Program DCLF RCVF | 4 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM14 | Sample CL Program DCLF RCVF | 4 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM14 | Sample CL Program DCLF RCVF | 4 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM15 | Sample CL Program DCLF RCVF MTOKISKP/L00 | 4 | 1200501105212 | MSAMPLEL00 | YAMAGUCHI1 | MSAMPLEL00 | 1 | 1 | MSAMPLER | 262BD0D623C3F | 3 | F | *FILE | PUB400 | P | 1 |
YAMAGUCHI1 | CLPGM15 | Sample CL Program DCLF RCVF MTOKISKP/L00 | 4 | 1200501105212 | QLECWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM15 | Sample CL Program DCLF RCVF MTOKISKP/L00 | 4 | 1200501105212 | QCLSRV | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | CLPGM15 | Sample CL Program DCLF RCVF MTOKISKP/L00 | 4 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | DSP01 | YAMAGUCHI1 | DSP01 | 6 | 3 | PANEL01 | 13415278A5945 | 3 | F | *FILE | PUB400 | P | 6 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | DSP01 | YAMAGUCHI1 | DSP01 | 6 | 3 | PANEL02 | 11F909D714561 | 5 | F | *FILE | PUB400 | P | 6 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | DSP01 | YAMAGUCHI1 | DSP01 | 6 | 3 | PANEL03 | 0180221C5D7E4 | 2 | F | *FILE | PUB400 | P | 6 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | DSP01 | YAMAGUCHI1 | DSP01 | 6 | 3 | M1 | 08F8DF04447AD | 4 | F | *FILE | PUB400 | P | 6 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | DSP01 | YAMAGUCHI1 | DSP01 | 6 | 3 | CLRGRD | 0041425C7DD05 | 2 | F | *FILE | PUB400 | P | 6 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | DSP01 | YAMAGUCHI1 | DSP01 | 6 | 3 | KSEN | 0132311D54381 | 2 | F | *FILE | PUB400 | P | 6 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | MTOKISKL00 | YAMAGUCHI1 | MTOKISKL00 | 1 | 1 | MTOKISKR | 4812D0FEED49D | 5 | F | *FILE | PUB400 | P | 1 |
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | QRNXIE | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | QRNXIO | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | QRNXUTIL | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 | ||||
YAMAGUCHI1 | RPG01 | ??Y???s?u???j???]?RPG | 6 | 1200501105212 | QLEAWI | QSYS | 0 | 0 | 0 | *SRVPGM | PUB400 | P | 0 |
出力ファイルの項目情報
WHPNAM | Program |
---|---|
WHTEXT | Text 'description' |
WHFNUM | Number of objects referenced |
WHDTTM | Retrievel date: century/date/time |
WHFNAM | Object referenced: 1=*EXPR |
WHLNAM | Library referenced: 1=*EXPR |
WHSNAM | File name in source program: =*EXPR |
WHRFNO | Number of record formats referenced. -1=See WHRFNB |
WHFUSG | 1=I,2=O,3=I/O,4=U,5=I/U,6=O/U,7=I/O/U,8=N/S,0=N/A |
WHRFNM | Record format referenced |
WHRFSN | Format level identifier |
WHRFFN | Number of fields |
WHOBJT | Object type: F=File, P=Program, D=Data area |
WHOTYP | Object type |
WHSYSN | System Name (Source System, if file is DDM) |
WHSPKG | PGM=P, SQLPKG=S, SRVPGM=V, MODULE=M, QRYDFN=Q |
WHRFNB | Number of record formats referenced. |
活用案
DSPPGMREFで、本番環境で利用しているプログラムの依存関係(ファイルやプログラム)を洗い出す作業をしたい場合、WHOBJT
の列が、F/Pとなっているものを抽出して影響範囲を調査するのがいいのかなぁと思います。
Fだけ、Pだけの一覧を常に最新化しておき、ファイル定義の変更やプログラムの改修の影響範囲調査に役立てられればと思います。
このコマンドの情報をご教示いただきました @yamurata さんありがとうございます。
勉強になりました!!
最後に補足
この記事でコマンド出力結果のデータを掲載しています。
このデータ自体は、5250の画面でWRKQRYの結果などからちまちまテキスト作成したのではなく、データ転送ツールを利用した結果をExcelに出力してその結果をMarkdownに変換して貼り付けました。
データ転送ツールの使い方については別途記事を用意しましたのでそちらを参考にしてください。
(データ転送ツールを使うのちょっと面倒なので、EclipseのDBeaverを使ってデータを取得する方法についても後で記事にしようと思います。)