タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【AS400】RPGLEからCLコマンドを実行(ex.DLYJOB)

RPGプログラムからDLYコマンドを実行させたいケースがありましたので、まとめます。

下記のサイトを参考にさせていただきました。

Capturing QCMDEXC error codes | RPGPGM.COM - From AS400 to IBM i

RPGプログラムからDLYJOBを実行するサンプル

  • 単純にプログラム実行中に3秒待つだけのものです。前後にTIMESTAMPを書き出し、実際に3秒間待ち状態になっているかかを確認します。
     D MAIN            PR                  EXTPGM('SAMPLE32')                                       
     D MAIN            PI                                                                           
     D*                                                                                             
     D #QCMDEXC        DS                  QUALIFIED                                                
     D  P@NCMD                      132                                         // CMD STRING       
     D  P@QLEN                       15P 5                                      // CMD STRING LENGTH
     D QCMDEXC         PR                  EXTPGM('QCMDEXC')                                        
     D  P@NCMD                             LIKE(#QCMDEXC.P@NCMD)                // CMD STRING       
     D                                     OPTIONS(*VARSIZE) CONST                                  
     D  P@QLEN                             LIKE(#QCMDEXC.P@QLEN)                // CMD STRING LENGTH
     D                                     CONST                                                    
     D*                                                                                             
      /FREE                                                                                         
          DSPLY %TIMESTAMP();                                                                       
          #QCMDEXC.P@NCMD = 'DLYJOB DLY(3)';                                                        
          #QCMDEXC.P@QLEN = %LEN(#QCMDEXC.P@NCMD);                                                  
          CALLP(E) QCMDEXC(#QCMDEXC.P@NCMD:#QCMDEXC.P@QLEN);                                        
          DSPLY %TIMESTAMP();                                                                       
          *INLR = *ON;  
          RETURN;       
      /END-FREE         

実行結果

> CALL PGM(TIGEROBJ/SAMPLE32)        
  DSPLY  2015-04-01-22.01.07.058000  
  DSPLY  2015-04-01-22.01.10.097000  


  • 成功です! 今回は、DLYコマンドを試しましたが、他にも応用が利きそうですね♪