如何監控 System Request Option 2 ?
當使用者執行程式時隨時可以執行 system-request(按鍵 shift+ESC) option 2
終止程式,於 CLP 中可以針對使用者按 F3或 F12 時做相關處理,但是使用者直接按 system-request 鍵時,要如何處理呢?
1. 於 CLP 中加入下列二行於程式最前端,但若有MONMSG CPF0000 全域監測錯誤時,於置於其後。
SNDPGMMSG MSG('Request message') TOPGMQ(*EXT) MSGTYPE(*RQS)
RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
2. 於所呼叫的程式下一行加入監測 CPF1907 訊息
MONMSG CPF1907
File : QDDSSRC
Member: SYSCMD
Type : DSPF
Usage : CRTDSPF SYSCMD
A DSPSIZ(24 80 *DS3 -
A 27 132 *DS4)
A INDARA
A PRINT
A R SYSCMDR
A DSPMOD(*DS3)
A CF03(03 'EXIT')
A 1 2'SYSCMD'
A COLOR(BLU)
A 1 33'SYSCMD Menu'
A DSPATR(HI)
A 3 2'Select one of the following:'
A COLOR(BLU)
A 5 7'1.'
A 6 7'2.'
A 7 7'3.'
A 8 7'4.'
A 9 7'5.'
A 10 7'6.'
A 11 7'7.'
A 12 7'8.'
A 13 7'9.'
A 14 6'90. SignOff'
A* CMDPROMPT Do not delete this DDS spec.
A 019 2'Selection or command -
A '
A OPTION 10 B 20 2
A DSPATR(UL)
A 5 10'WRKACTJOB'
A 6 10'WRKSPLF'
File : CLSRC
Member: SYSRQTCMDC
Type : CLP
Usage : CRTCLPGM SYSRQTCMDC
CALL SYSRQTCMDC
PGM
DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(9)
DCL VAR(&CMD) TYPE(*CHAR) VALUE('WRKACTJOB')
DCLF SYSCMD
MONMSG CPF0000 EXEC(GOTO END)
SNDPGMMSG MSG('Request message') TOPGMQ(*EXT) MSGTYPE(*RQS)
RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
LOOP:
SNDRCVF RCDFMT(SYSCMDR)
IF (&OPTION *EQ '1') DO
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
MONMSG CPF1907
ENDDO
IF (&OPTION *EQ '2') DO
WRKSPLF
MONMSG CPF1907
ENDDO
IF COND(&OPTION *EQ '90') THEN(SIGNOFF +
ENDCNN(*YES))
IF (&IN03 *EQ '1') +
GOTO END
CHGVAR &OPTION ' '
GOTO LOOP
END:
ENDPGM
執行範例: CALL SYSRQTCMDC 進入選項畫面,選取選項 1,進入 WRKACTJOB 畫面,
按 system-request 鍵於畫面下緣格線第一格輸入2 ,按執行鍵,畫面回到選項畫面。
你也可以將之前加的二行刪掉,再以同樣步驟測試
,結果應該不一樣吧!
詳細資訊參照: CL Programming manual 第八章次目 "Request Message" at IBM's iSeries Information Center.
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2004-10-28 如何監控 System Request Option 2 ?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言