CLP の中で OS400の上位リリースだけで対応されているコマンドを
下位リリースでコンパイルするにはどのようにすれば良いのであろうか?
例えば STRTCPSVR SERVER(*NETSVR) というネット・サーバーの起動コマンドを
実行したいものとする。
SERVER(*NETSVR) というオプションは OS400 V4R4M0 からのサポートであるので V3R7M0 などでの下位リリースの環境でコンパイルしようとすると
オプションが正しくないというコンパイル・エラーとなってコンパイルすることはできない。
開発会社が OS400 V4R5M0 で客先の実行環境が V5R3M0 であって、
V5R3M0 ではじめてサポートされたコマンドなどを
CLP の中に組み込みたい場合も出てくるであろう。
このようなコンパイル・エラーを回避するには、そのコマンドを QCMDEXCの中に梱包してしまうことである。
下記はその例である。
&CMDSTR
という文字列の中に 「STRTCPSVR SERVER(*NETSVR)」 という コマンドを入れて QCMDEXC によって実行している。
0001.00 PGM PARM(&OPT) 0002.00 /*--------------------------------------------------------*/ 0003.00 /* RSTNETSVR : ネット・サーバーの再起動 */ 0004.00 /*--------------------------------------------------------*/ 0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80) 0006.00 DCL VAR(&OPT) TYPE(*CHAR) LEN(4) 0007.00 DCL VAR(&CMDSTR) TYPE(*CHAR) LEN(128) 0008.00 0009.00 IF COND(&OPT *EQ '*NO ') THEN(RETURN) 0010.00 CHGVAR VAR(&CMDSTR) VALUE('?ENDTCPSVR + 0011.00 SERVER(*NETSVR)') 0012.00 CALL PGM(QCMDEXC) PARM(&CMDSTR 128) 0013.00 WRKACTJOB SBS(QSERVER) 0014.00 CHGVAR VAR(&CMDSTR) VALUE('?STRTCPSVR + 0015.00 SERVER(*NETSVR)') 0016.00 CALL PGM(QCMDEXC) PARM(&CMDSTR 128) 0017.00 RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) 0018.00 GOTO SNDMSG 0019.00 0020.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG) 0021.00 SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*COMP) 0022.00 ENDPGM