「568.プログラム開発の順序と選択」で https://www.as400-net.com/rpg/18327/
で読者の興味を集めたようなのでもう少し詳しく解説いる。
オフィスクアトロの開発手法について特徴的なことを
フォーカスして説明する。
■ コマンドを活用する
受注開発していた時代よりプログラムの指定操作には
コマンドを積極的に活用していた。
_
例えば得意先マスターの一覧表を出力する範囲指定を
するのには
[コマンド: PGM102] http://218.44.135.18/QSYS.LIB/QTRSRC.LIB/QCMDSRC.FILE/PGM102.MBR
得意先マスター一覧表 (PGM102)
選択項目を入力して,実行キーを押してください。
得意先コード . . . . . . . . . から
9999 まで
出力 . . . . . . . . . . . . . *PRINT *, *LPR, *PDF, *PRINT
[解説]
コマンド : PGM102 を呼び出してこのようにプロンプト表示させるには
?QTROBJ/PGM102
とメニュー項目に記述すればコマンド全体がF4キーを押したときと
同じようにプロンプト表示される。
多くのIBM i開発者はこのような指示画面を作るのにも
DSPFを作ってCLPまたはRPGによって表示しがちであるが
DSPFを使用するには多くの開発工数を必要とするし
保守も大変になる。
■ コマンドを使う利点
指示画面はコマンドにしておけば
DSPFのように画面全体の設計やデザインを行う必要はない。
i5/OS でいつも最適化してバランスよく表示してくれるのである。
_
・画面デザインの必要がない
・24×80 でも 28×132でもOSがデザインを再配置してくれる。
・社内のどの画面も同じバランスで配置することができる。
つまりすべてコマンド表示に統一しておけば
社内の業務画面はどの画面を見ても同じようなバランスで
統一されて表示されるという大変大きなメリットがある。
■ DSPFを使う理由
指示画面をDSPFで使う理由は
・DSPFしか知らないのでそれが使えるから。
・他の方法を知らない。
・他の方法を勉強するのが面倒だから
・コマンドは簡単なことしか使えない。
・コマンドは細かな制御はできないから。
というあまり適切でない理由が大半を占めるが
コマンドの使い方にまだ精通していないからという
理由であればこの機会にコマンドを使うほうが
DSPFを使うよりスマートであり簡単であることを
学習して欲しい。
■ コマンドでも何でもできる
_
コマンドでは細かな制御はできないと思っているのは
誤解である。
先のコマンド画面をもう一度見て欲しい。
得意先マスター一覧表 (PGM102)
選択項目を入力して,実行キーを押してください。
得意先コード . . . . . . . . . から
9999 まで
出力 . . . . . . . . . . . . . *PRINT *, *LPR, *PDF, *PRINT
[解説]
得意先コードは ____ から 9999 までと初期値が示されている
だけでなく「から」「まで」と値に続く説明が捕捉されている。
これは
0005.00 PARM KWD(TKEND) TYPE(*CHAR) LEN(4) DFT(9999) + 0006.00 CHOICE(*PGM) CHOICEPGM(QTROBJ/PGM106P)
とコマンド・ソースで示されるように
CHOICEPGM(QTROBJ/PGM106P)
としてプログラム選択:PGM106Pによるものである。
PGM106Pとは
0001.00 PGM PARM(&CMDPRM1 &RTNVAR)
0002.00 DCL VAR(&CMDPRM1) TYPE(*CHAR) LEN(21)
0003.00 DCL VAR(&CMD) TYPE(*CHAR) LEN(10)
0004.00 DCL VAR(&KWD) TYPE(*CHAR) LEN(10)
0005.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
0006.00 DCL VAR(&RTNVAR) TYPE(*CHAR) LEN(2000)
0007.00
0008.00 CHGVAR VAR(&CMD) VALUE(%SST(&CMDPRM1 1 10))
0009.00 CHGVAR VAR(&KWD) VALUE(%SST(&CMDPRM1 11 10))
0010.00 CHGVAR VAR(&TYPE) VALUE(%SST(&CMDPRM1 21 1))
0011.00 /*( テキスト )*/
0012.00 IF COND(&TYPE *EQ 'C') THEN(DO)
0013.00 IF COND((&KWD *EQ 'HNSFROM ') *OR (&KWD *EQ +
0014.00 'SHFROM ') *OR (&KWD *EQ 'TKFROM ') +
0015.00 *OR (&KWD *EQ 'SRFROM ')) THEN(DO)
0016.00 CHGVAR VAR(&RTNVAR) VALUE(' から ')
0017.00 ENDDO
0018.00 ELSE CMD(DO)
0019.00 CHGVAR VAR(&RTNVAR) VALUE(' まで ')
0020.00 ENDDO
0021.00 RETURN
0022.00 ENDDO
0023.00
0024.00 ENDPGM
で示されるようにこのパラメータの名前が TKFROMであれば
「から」を返し、そうでなければ「まで」を返すという
CLPによって制御されている。
例えば &KWDに FROM という文字列が含まれていれば
%SCANで判断して「まで」を返すというように決めておけば
一般化することができる。
これでIBMコマンドのパラメータの後続のテキストを
自由に設定することができることがわかったと思う。
