データ待ち行列 ( *DTAQ ) は CRTDTAQ コマンドによって簡単に作ることができる。
たとえば、
CRTDTAQ DTAQ(QTEMP/MYDTAQ) MAXLEN(1024)
のようにして、データ待ち行列( *DTAQ ) の名前と長さだけを指定するだけで
十分である。
データ待ち行列を使うと様々な応用範囲が広がる。
ただし SNDDTAQ や RCVDTAQ のようなコマンドは用意されておらず、
API: QSNDDTAQ やQRCVDTAQ を呼び出すことが必要となるので
*DTAQ を利用する人がまだ少ないのかも知れない。
*DTAQ は、データ待ち行列にユーザー・プログラムで QSNDDTAQ を使って投入するという
ユーザー独自の使い方であっても、もちろんかまわないのであるが、
*DTAQ は OS の機能をユーザーで拡張することができるように用意されていることに
着目して、ここではそれらの機能について紹介する。
最初に2つの API を紹介する。
■ QSNDDTAQ : データ待ち行列への投入 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 によって投入する。
■ QRCVDTAQ : データ待ち行列の受信 API
必須パラメータ・グループ: 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 に入れる。