如何利用 Message Queue Break Message handling program 將訊息顯示於畫面第 24 行?
系統常會送出某些訊息,會中斷使用者的訊息,可以利用Message Queue Break Message handling program 將訊息顯示於畫面第 24 行
File : QCLSRC
Member: MSGH
Type : CLP
Usage : CRTCLPGM MSGH
/* PROGRAM TO HANDLE BREAK MESSAGES */
PGM PARM(&MSGQ &MSGQLIB &MSGK)
DCL VAR(&MSGQ) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGQLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGK) TYPE(*CHAR) LEN(4)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(200)
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGTXT) TYPE(*CHAR) LEN(200)
DCL VAR(&BLANK) TYPE(*CHAR) LEN(75)
DCL VAR(&I) TYPE(*DEC) LEN(2 0) VALUE(75)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
/* RECEIVE THE BREAK MESSAGE */
RCVMSG MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&MSGK) RMV(*NO) +
MSG(&MSGTXT) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) +
SNDMSGFLIB(&MSGFLIB)
/* IF THERES NO MSGID, USE &MSGTXT AND CPF9897 */
/* TO SATISFY STATUS MESSAGE REQUIREMENTS */
IF COND(&MSGID = ' ') THEN(DO)
CHGVAR VAR(&MSGID) VALUE('CPF9897')
CHGVAR VAR(&MSGFLIB) VALUE('QSYS')
CHGVAR VAR(&MSGF) VALUE('QCPFMSG')
CHGVAR VAR(&MSGDTA) VALUE(&MSGTXT)
ENDDO
/* RESEND IT AS A STATUS MESSAGE */
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGTXT) TOPGMQ(*EXT) MSGTYPE(*STATUS)
MONMSG MSGID(CPF0000)
LOOP: SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA(%SST(&BLANK 1 &I) || &MSGTXT) +
TOPGMQ(*EXT) MSGTYPE(*STATUS)
CHGVAR VAR(&I) VALUE(&I -5)
IF COND(&I *GT 1) THEN(DO)
/* DLYJOB DLY(1) */
GOTO CMDLBL(LOOP)
ENDDO
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA(&MSGTXT) +
TOPGMQ(*EXT) MSGTYPE(*STATUS)
RETURN
ERROR:
MSGD: RCVMSG MSGTYPE(*DIAG) MSG(&MSGTXT) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGFLIB)
IF COND(&MSGID *NE ' ') THEN(DO)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
GOTO CMDLBL(MSGD)
ENDDO
MSGE: RCVMSG MSGTYPE(*EXCP) MSG(&MSGTXT) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGFLIB)
IF COND(&MSGID *NE ' ') THEN(SNDPGMMSG +
MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE))
ENDPGM
在每次 Sign On 進入系統後下命令
CHGMSGQ MSGQ(user or WRKSTN ID) DLVRY(*BREAK) PGM(library/MSGH),
你可將此命令加入使用者的 Initial Program 中自動執行,
再開第二台工作站測試,
SNDMSG MSG(TEST-USER-QUEUE) TOUSR(user)
or
SNDMSG MSG(TEST-WRKSTN-QUEUE) TOMSGQ(workstation id)
你可從第一個工作站看到從第二個工作站發送的訊息,顯示於第一台工作站的24行。
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期三, 11月 01, 2023
2002-03-07 如何利用 Message Queue Break Message handling program 將訊息顯示於畫面第 24 行?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言