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