RPG

491. EXTNAME の使い方

EXTNAME によるデータのBACKUP方法を紹介する。
_

DSPF を使ってデータ・ベースを更新するプログラムを
作成するときに DSPFのフィールド名をデータ・ベースの
フィールド名とは異なる名前に命名する人が多いようであるが
DSPFのフィールド名とデータ・ベースのフィールド名を
異なる名前にするとプログラム中でフィールドの数の分だけ
MOVE演算を繰り返さなければならない。
BAKCUPにフィールドの個数分だけの演算と
そして戻すときにもフィールドの個数分だけの演算が
必要となる。
このような無駄な演算を避けるには
DSPFのフィールド名とデータ・ベースのフィールド名は
必ず同じ名前を使用しておけばよい。

そうなるとデータ・ベースのレコードにCHAINなどで
アクセスしたときにフィールド値が入れ替わってしまうことに
なる。
それを防ぐためにフィールドの値をBACKUPしておいて
また戻すという作業が必要になる。
どうしてもBACKUP と RECOVERYの演算はやはり必要である。
このとき効果を発揮するのが DS に EXTNAME を
組み合わせたBACKUP & RECOVERY の手法である。

 D DSPDTA        E DS                  EXTNAME(SHOHIN)

 C                 MOVE    DSPDTA     SAVDTA
 C      *LIKE      DEFINE  DSPDTA     SAVDTA
 C                 SETOFF                         90
 C      SHOKEY     CHAIN   SHOHIN                 90
 C                 MOVE    SAVDTA     DSPDTA
 C  90             WRITE   SHOHINR
 C N90             UPDATE  SHOHINR

といった具合である。
商品マスター: SHOHIN のデータ全体は

 D DSPDTA        E DS                  EXTNAME(SHOHIN)

で EXTNAME で DSPDTA として定義しておいて
データのBACKUPは

                  MOVE   DSPDTA    SAVDTA
       *LIKE      DEFINE DSPDTA      SAVDTA

として 一気に SAVDTA に BACKUPすることができる。
わずか一行の演算だけでレコード情報全体のBACKUPができるのである。

これによってDSPFではデータ・ベースと同じ名前のフィールド名を使うことも
できて何よりプログラムは見た目にも非常にスッキリしたものとなる。

なおEXTFILEてば DSPFのレコードもBACKUPとして利用することができて
レコード名も指定することができる。

 D DSPDTA        E DS                  EXTNAME(STRDFUFM:SEQREC)

このように EXTNAME を使うだけでプログラムはスマートに記述することが
できて演算も少なくて済むようになる。
演算が少ないということは余計なバグの発生も抑えられるということでもある。
_