CL

54. データ待ち行列の紹介

データ待ち行列 ( *DTAQ ) は CRTDTAQ コマンドによって簡単に作ることができる。
たとえば、

    CRTDTAQ DTAQ(QTEMP/MYDTAQ) MAXLEN(1024)

のようにして、データ待ち行列( *DTAQ ) の名前と長さだけを指定するだけで
十分である。
データ待ち行列を使うと様々な応用範囲が広がる。
ただし SNDDTAQRCVDTAQ のようなコマンドは用意されておらず、
API: QSNDDTAQQRCVDTAQ を呼び出すことが必要となるので
*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)    
【 解説 】

ライブラリー QTEMPMSGDTAQ という名前の *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)                           
【 解説 】

ライブラリー QTEMPMSGDTQ という名前の *DTAQ からデータを直ちに
( &WAIT = 0 )読み取って、値を &ERRMSG に入れる。