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
