2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IBM i (旧AS400)の自己学習メモ コマンド編01 DSPPGMREF 依存しているファイル・プログラムの一覧を作成

Posted at

自己学習メモインデックス

IBM i (旧AS400)の自己学習メモ インデックス

概要

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

出力ファイルの項目情報

参考:https://www.ibm.com/support/pages/detailed-file-field-description-required-file-qadsppgm-format-qwhdrppr-outfile-dsppgmref-command

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を使ってデータを取得する方法についても後で記事にしようと思います。)

IBM i (旧AS400)の自己学習メモ ツール編01 データ転送

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?