星期一, 11月 06, 2023

2004-10-28 如何監控 System Request Option 2 ?


如何監控 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. 

            


沒有留言: