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