XREFPGM
プログラム相互参照とともに役に立つのが CHGFMT
コマンドである。
CHGFMTコマンドは指定したデータ・ベース(物理ファイル)のレコード・レイアウトをデータを損傷すること無く、データそのものも置き換えてくれる。
例えばあるデータ・ベースに新しいフィールドを挿入したい場合もあるだろうし、あるフィールドの
長さやタイプを変更したい場合もあるだろう。
適用業務の開発途上ではデータ・ベースのレイアウト変更は頻繁に行われる。
このときDDSソースだけを新しいレイアウトにSEUで編集しておいてからCHGFMT コマンドを
実行すれば、CHGFMTコマンドは QTEMPに一時的にそのデータ・ベースのBACKUPを
とっておいてから、従属している論理ファイルをすべて削除して、物理ファイルも削除する。
次に新しい物理ファイルを新しいDDSソースに基づいて作成してQTEMP からデータを
CPYF *MAP *DROP
によって戻す。
最後に従属論理ファイルを元のように再作成してくれる。
このように一連の流れの作業を CHGFMT コマンドは連続して行ってくれる。
人手によるデータ・ベースの変更はメンバー数の指定を再作成のときに間違ったりしてあとあと、
実際の業務で動作しなくなったりするミスがつきものである。
CHGFMT によって機械的に変更すれば人手によるミスも起こらない。
さらに前もって XREFPGM によって影響のあるプログラムなどを調べておいてCHGFMTの
実行後に再コンパイルすれば完璧に移行を行うことができる。
ソフトウェア・ハウスなどでは必須のコマンドといえる。
ただし CHGFMT はオブジェクトが作成された元のソースを検索するのでCRTDUPOBJ や
RSTOBJ によって生成されたデータ・ベースには適用できない。
あらかじめ DSPOBJD によって調べておいたほうが良い。
またデータ変更を扱うのであるから、あらかじめ BACKUPをとっておいてから
CHGFMT
コマンドを実行 していただきたい。
コマンド CHGFMT を導入して、
CRTCMD CMD(MYLIB/CHGFMT) PGM(MYLIB/CGHFMTCL) SRCFILE(MYSRCLIB/QCMDSRC) MTTFILE(MYLIB/CHGFMTCMD) AUT(*ALL)
でコンパイル
コマンド RTVFD を導入して、
CRTCMD CMD(MYLIB/RTVFD) PGM(MYLIB/RTVFDCL) SRCFILE(MYSRCLIB/QCMDSRC) ALLOW(*BPGM *IPGM) AUT(*ALL)
でコンパイル
CLP CHGFMTCMD を導入して
オブジェクト・ライブラリー名'MYLIB
'をSEU で変更して
CRTCLPGM MYLIB/CHGFMTCMD SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
でコンパイル
CLP RTVFDCL を導入して
オブジェクト・ライブラリー名'MYLIB
'を
SEU で変更して
CRTCLPGM MYLIB/RTVFDCL SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
でコンパイル
CLP PFCOPY を導入して
CRTCLPGM MYLIB/PFCOPY SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
でコンパイル
CLP RPFCPY を導入して
CRTCLPGM MYLIB/RPFCPY SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
でコンパイル
CLP CHGFMTCL を導入して
オブジェクト・ライブラリー名'MYLIB
'をSEU で変更して
CRTCLPGM MYLIB/CHGFMTCL SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
でコンパイル
RPG CHGFMT を導入して
CHGFMT
コマンドを実行させてRPG:CHGFMT
のコンパイルに必要なファイルを作成させてから、
CRTRPGPGM MYLIB/CHGFMT SRCFILE(MYSRCLIB/QRPGSRC) AUT(*ALL)
でコンパイル