データ待ち行列 ( *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 に入れる。