Tools

5. CHGFMT 物理ファイル様式の変更

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)

でコンパイル