如何取得某一 Data Queue 的定義(API QMHQRDQD)
有時候要利用 Data Queue 來完成程式間的資訊交換,但是又會忘記所產生的 Data Queue 定義,
如Data Queue 中每一筆 Entry 的長度,這個長度與程式將資料寫入Data Queue有關,若寫入長度
超過當初產生(CRTDTAQ) Data Queue 的定義長度時,程式會有警告訊息,但程式不會當掉,但是
資訊又寫不進 Data Queue,此時就比較難
Debug,所以需要取得 Data Queue 的定義來判斷。 OS/400 提供一個 API QMHQRDQD 即可以符
合此需求。
此範例會顯示所指定的 Data Queue 當初所產生 Data Queue 指令的定義於畫面第 24 行,
可以將游標移至 24 行,按 F1 顯示該 Data queue 當初所執行的指令詳細資訊。
File : QCLSRC
Member: RTVDTAQDC
Type : CLP
Usage : CRTCLPGM RTVDTAQDC
CALL RTVDTAQDC ('dataqueue library ')
參數長度 20,前十位為 Data Queue 名稱,後十位為Data Queue 所在的 Library
PGM (&DTAQ)
DCL &DTAQ *CHAR 20
DCL &MAXLEN *CHAR 5
DCL &MAXLENN *DEC (5 0)
DCL &FORCE *CHAR 4
DCL &SEQ *CHAR 6
DCL &KEYLEN *CHAR 4 VALUE('*N')
DCL &SENDRID *CHAR 4
DCL &TEXT *CHAR 50
DCL &RCVRLEN *CHAR 4
DCL &RCVR *CHAR 80
DCL &MSGTEXT *CHAR 250
CHGVAR %BIN(&RCVRLEN 1 4) 80
/* CHGVAR &DTAQ ('DATAQUEUE LIBRARY ') */
/*****************************************************************/
/* RETREIVE DATA QUEUE ATTRIBUTES */
/*****************************************************************/
CALL QMHQRDQD (&RCVR &RCVRLEN RDQD0100 &DTAQ)
MONMSG CPF0000 EXEC(CALL QMHRSNEM (' ' X'00000000'))
/*****************************************************************/
/* SET VARIABLES FOR CRTDTAQ PARAMETERS FROM THE DATA QUEUE */
/* ATTRIBUTES FROM QMHQRDQD. */
/*****************************************************************/
CHGVAR &MAXLEN %BIN(&RCVR 9 4)
CHGVAR &MAXLENN &MAXLEN
IF (%SST(&RCVR 17 1) *EQ 'K') +
DO
CHGVAR &KEYLEN %BIN(&RCVR 13 4)
CHGVAR &SEQ *KEYED
ENDDO
ELSE IF (%SST(&RCVR 17 1) *EQ 'L') CHGVAR &SEQ *LIFO
ELSE CHGVAR &SEQ *FIFO
IF (%SST(&RCVR 18 1) *EQ 'N') CHGVAR &SENDRID *NO
ELSE CHGVAR &SENDRID *YES
IF (%SST(&RCVR 19 1) *EQ 'N') CHGVAR &FORCE *NO
ELSE CHGVAR &FORCE *YES
CHGVAR &TEXT %SST(&RCVR 20 50)
/*****************************************************************/
/* CREATE THE NEW DATA QUEUE */
/*****************************************************************/
CHGVAR VAR(&MSGTEXT) VALUE( +
'DATA QUEUE CREATING COMMAND AS FOLLOWING: ' *CAT +
'CRTDTAQ DTAQ(' *CAT %SST(&DTAQ 11 10) *TCAT '/' *CAT +
%SST(&DTAQ 1 10) *TCAT ')' *BCAT +
'MAXLEN(' *CAT &MAXLEN *TCAT ')' *BCAT +
'FORCE(' *CAT &FORCE *TCAT ')' *BCAT +
'SEQ(' *CAT &SEQ *TCAT ')' *BCAT +
'KEYLEN(' *CAT &KEYLEN *TCAT ')' *BCAT +
'SENDERID(' *CAT &SENDRID *TCAT ')' *BCAT +
'TEXT(' *CAT &TEXT *TCAT ')')
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) +
MSGDTA(&MSGTEXT) MSGTYPE(*COMP)
/* ? CRTDTAQ (%SST(&DTAQ 11 10)/%SST(&DTAQ 1 10)) +
MAXLEN(&MAXLEN) FORCE(&FORCE) SEQ(&SEQ) KEYLEN(&KEYLEN) +
SENDERID(&SENDRID) TEXT(&TEXT) */
MONMSG CPF0000 EXEC(CALL QMHRSNEM (' ' X'00000000'))
ENDPGM
執行結果如下(將游標移至 24 行,按 F1 顯示):
Additional Message Information
Message ID . . . . . . : CPF9897 Severity . . . . . . . : 40
Message type . . . . . : Information
Date sent . . . . . . : 03/01/04 Time sent . . . . . . : 13:16:23
Message . . . . : DATA QUEUE CREATING COMMAND AS FOLLOWING:
CRTDTAQ DTAQ(LIBRARY/DTAQ) MAXLEN(05400) FORCE(*NO) SEQ(*FIFO) KEYLEN(*N)
SENDERID(*NO) TEXT()
Cause . . . . . : No additional online help information is available.
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2004-03-01 如何取得某一 Data Queue 的定義(API QMHQRDQD)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言