4.7.2 JSMLSAEXT
JSMDIRECTプログラムは、LANSAファンクションを内部でのみ実行できます。LANSAプログラムを呼び出すときに3GLプログラムを実行する必要があるか、柔軟性がさらに必要な場合は、JSMLSAEXTプログラムを作成する必要があります。
この終了プログラムのソース・コードは、JSMライブラリのQCLSRCに保管されます。
/* JSM LANSA/3GL終了プログラム*/
PGM PARM(&SERVICE &SERVERHOST &HOST &PORT &REMOTEUSER &REMOTEADDR +
&PROCESS &FUNCTION &PARTITION &LANGUAGE &PROGRAM &RDMLX &CONTINUE &MESSAGE)
DCL VAR(&SERVICE) TYPE(*CHAR) LEN(30)
DCL VAR(&SERVERHOST) TYPE(*CHAR) LEN(80)
DCL VAR(&HOST) TYPE(*CHAR) LEN(80)
DCL VAR(&PORT) TYPE(*CHAR) LEN(5)
DCL VAR(&REMOTEUSER) TYPE(*CHAR) LEN(30)
DCL VAR(&REMOTEADDR) TYPE(*CHAR) LEN(15)
DCL VAR(&REQUEST) TYPE(*CHAR) LEN(10) VALUE(RUN)
DCL VAR(&PROCESS) TYPE(*CHAR) LEN(10)
DCL VAR(&FUNCTION) TYPE(*CHAR) LEN(10)
DCL VAR(&PARTITION) TYPE(*CHAR) LEN(3)
DCL VAR(&LANGUAGE) TYPE(*CHAR) LEN(4)
DCL VAR(&PROGRAM) TYPE(*CHAR) LEN(32)
DCL VAR(&RDMLX) TYPE(*CHAR) LEN(1)
DCL VAR(&CONTINUE) TYPE(*CHAR) LEN(1)
DCL VAR(&MESSAGE) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM01) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM02) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM03) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM04) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM05) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM06) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM07) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM08) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM09) TYPE(*CHAR) LEN(256)
DCL VAR(&PARM10) TYPE(*CHAR) LEN(256)
DCL VAR(&TASKID) TYPE(*CHAR) LEN(8)
DCL VAR(&PCTYPE) TYPE(*CHAR) LEN(1) VALUE(N)
DCL VAR(&DEVELOPER) TYPE(*CHAR) LEN(1) VALUE(N)
DCL VAR(&ALLOWMSGS) TYPE(*CHAR) LEN(1) VALUE(N)
DCL VAR(&PCNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&DATESRC) TYPE(*CHAR) LEN(1) VALUE(S)
DCL VAR(&BDEBUG) TYPE(*CHAR) LEN(1) VALUE(N)
DCL VAR(&BDEBUGDEV) TYPE(*CHAR) LEN(10)
DCL VAR(&BDEBUGMSG) TYPE(*CHAR) LEN(10)
DCL VAR(&XRUNADPRM) TYPE(*CHAR) LEN(512)
MONMSG MSGID(CPF0000)
/* CONTINUEの省略値は'Y' */
/* CHGVAR VAR(&CONTINUE)の値('N') */
/* CHGVAR VAR(&MESSAGE)の値('I do not know you') */
/* 終了*/
IF COND(&PROGRAM *NE ' ') THEN(DO)
/* RPGを呼び出す*/
CALL &PROGRAM
GOTO END
ENDDO
IF COND(&RDMLX *EQ 'Y') THEN(DO)
/* RDMLXを実行する要求を変更する*/
CHGVAR VAR(&REQUEST) VALUE(X_RUN)
ENDDO
IF COND(&PROCESS *NE ' ' *AND &FUNCTION *NE ' ') THEN(DO)
IF COND(&REQUEST *EQ 'RUN') THEN(DO)
/* LANSA V10またはV11を呼び出す*/
CALL PGM(LANSA) PARM(&REQUEST &PROCESS &FUNCTION +
&PARM01 &PARM02 &PARM03 &PARM04 &PARM05 +
&PARM06 &PARM07 &PARM08 &PARM09 &PARM10 +
&PARTITION &LANGUAGE &TASKID &PCTYPE +
&DEVELOPER &ALLOWMSGS &PCNAME &DATESRC +
&BDEBUG &BDEBUGDEV &BDEBUGMSG)
GOTO END
ENDDO
IF COND(&REQUEST *EQ 'X_RUN') THEN(DO)
/* LANSA V11を呼び出す - RDMLX */
CALL PGM(LANSA) PARM(&REQUEST &PROCESS &FUNCTION +
&PARM01 &PARM02 &PARM03 &PARM04 &PARM05 +
&PARM06 &PARM07 &PARM08 &PARM09 &PARM10 +
&PARTITION &LANGUAGE &TASKID &PCTYPE +
&DEVELOPER &ALLOWMSGS &PCNAME &DATESRC +
&BDEBUG &BDEBUGDEV &BDEBUGMSG &XRUNADPRM)
GOTO END
ENDDO
GOTO END
ENDDO
SNDPGMMSG MSG('No program or function specified for execution')
END: ENDPGM