WSG

4. [これは便利!]WSGで直接、RPGを実行するには?

WSG は出口プログラムでメニューを指定した場合に限りすんなりHTMLに動的な変更してくれる。それであれば直接実行させたいプログラムをメニューとWSG に思わせれば良いのである。

下記のCLPを見て頂きたい。これはCLPメニューとなるソースであるが、実際にはメニューなど表示されずに DSPMSG QSYSOPR が実行される。このようなソースでメニューとして *MENU オブジェクトを作成して出口プログラムでWSGにこのメニュー(?)を指定すれば、メニューではなく DSPMSG QSYSOPR が実行されることになる。
この部分を CALL MYLIB/MYPGM に変更すれば任意のプログラムが直ちに呼び出されて、RPGの画面がHTMLとして表示されることになる。ユーザーはRPG画面とは気づかずに単なるHTMLであると思うであろう。

             PGM        PARM(&MENU &MNULIB &RTNCOD)                    
/*---------------------------------------------------------*/          
/*   QSYSOPR     :   DSPMSG QSYSOPR MENU                   */          
/*---------------------------------------------------------*/          
             DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                  
             DCL        VAR(&MENU) TYPE(*CHAR) LEN(10)                 
             DCL        VAR(&MNULIB) TYPE(*CHAR) LEN(10)               
             DCL        VAR(&RTNCOD) TYPE(*CHAR) LEN(2) /* +           
                           戻りコード  */                              
             DCL        VAR(&CPYRGT) TYPE(*CHAR) LEN(80) +             
                          VALUE('                                     -
          (C) COPYRIGHT OFFICE QUATTRO 1994')                          
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))        
                                                                       
             IF         COND(%SST(*LDA 1 1) *EQ ' ') THEN(DO)          
             DSPMSG     MSGQ(*SYSOPR)                                  
             CHGDTAARA  DTAARA(*LDA (1 1)) VALUE('*')                  
             RETURN                                                    
             ENDDO                                                     
             ELSE       CMD(DO)                                        
             SIGNOFF                             
             ENDDO                               
             RETURN                              
                                                 
 ERROR:      RCVMSG     RMV(*NO) MSG(&MSG)       
 SNDMSG:     SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR)
             ENDPGM