データ待ち行列 ( *DTAQ
) は CRTDTAQ
コマンドによって簡単に作ることができる。
たとえば、
CRTDTAQ DTAQ(QTEMP/MYDTAQ) MAXLEN(1024)
のようにして、データ待ち行列( *DTAQ
) の名前と長さだけを指定するだけで
十分である。
データ待ち行列を使うと様々な応用範囲が広がる。
ただし SNDDTAQ
や RCVDTAQ
のようなコマンドは用意されておらず、
API: QSNDDTAQ
や QRCVDTAQ
を呼び出すことが必要となるので
*DTAQ
を利用する人がまだ少ないのかも知れない。
*DTAQ
は、データ待ち行列にユーザー・プログラムで QSNDDTAQ
を使って投入するという
ユーザー独自の使い方であっても、もちろんかまわないのであるが、
*DTAQ
は OS の機能をユーザーで拡張することができるように用意されていることに
着目して、ここではそれらの機能について紹介する。
最初に2つの API を紹介する。
必須パラメータ・グループ: 1. データ待ち行列名 入力 Char(10) 2. ライブラリー名 入力 Char(10) 3. データの長さ 入力 Packed(5,0) 4. データ 入力 Char(*) 任意選択パラメータ・グループ: 5. キー・データの長さ 入力 Packed(3,0) 6. キー・データ 入力 Char(*)
DCL VAR(&MSG) TYPE(*CHAR) LEN(80) DCL VAR(&MSGLEN) TYPE(*DEC) LEN(5 0) VALUE(80) : CHKOBJ OBJ(QTEMP/MSGDTAQ) OBJTYPE(*DTAQ) MONMSG MSGID(CPF9800) EXEC(DO) CRTDTAQ DTAQ(QTEMP/MSGDTAQ) MAXLEN(128) TEXT('MENU + MSG DTAQ') AUT(*ALL) RMVMSG CLEAR(*ALL) ENDDO CALL PGM(QSNDDTAQ) PARM('MSGDTAQ ' 'QTEMP ' + &MSGLEN &MSG)
ライブラリー QTEMP
の MSGDTAQ
という名前の *DTAQ
を作成しておいてから
80桁の MSG
というデータを QSNDDTAQ
によって投入する。
必須パラメータ・グループ: 1. データ待ち行列名 入力 Char(10) 2. ライブラリー名 入力 Char(10) 3. データの長さ 出力 Packed(5,0) 4. データ 出力 Char(*) 5. 待機時間 入力 Packed(5,0) 任意選択パラメータ・グループ: 6. キー・オーダー 入力 Char(2) 7. キー・オーダーの長さ 入力 Packed(3,0) 8. キー・データ 入出力 Char(*) 9. 送信元情報の長さ 入力 Packed(3,0) 10. 送信側情報 出力 Char(*)
DCL VAR(&ERRMSG) TYPE(*CHAR) LEN(80) DCL VAR(&WAIT) TYPE(*DEC) LEN(5 0) VALUE(0) : CALL PGM(QRCVDTAQ) PARM('MSGDTAQ ' 'QTEMP ' + 80 &ERRMSG &WAIT)
ライブラリー QTEMP
の MSGDTQ
という名前の *DTAQ
からデータを直ちに
( &WAIT = 0
)読み取って、値を &ERRMSG
に入れる。