CL

32. OS400上位リリースコマンドにも実行可能なCLP を作成するには?

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