Discover AS/400

AS/400に関する覚書

OUTQにスプールが入ったタイミングで後処理を流すCLP

OUTQにスプールが投入されて、そのスプールを読み込み後処理を流したいといったようなことを考えたことはないでしょうか。

AS/400ではこのような場合に、OUTQに投入されたスプールの情報をデータ待ち行列で取得することが出来ます。

 

■データ待ち行列オブジェクトについて

まず「データ待ち行列」についてですが、AS/400では待ち行列OBJはいくつかあります。
・OUTQ
・JOBQ
・MSGQ
・DTAQ など
データ待ち行列は文字どおりデータPGM間で処理するためのOBJです。
データ待ち行列は、QSNDDTAQというAPIでデータの送信を行い、QRCVDTAQで受信を行います。
「CLプログラミング」のマニュアルの「プログラムとプロシージャー間の通信のためのデータ待ち行列の使用法」に詳しい解説があります。
それぞれのパラメータは以下のとおりです。

データ待ち行列の受信(QRCVDTAQ)パラメータ

1 10BYTE-文字(I) データ待ち行列名
2 10BYTE-文字(I) データ待ち行列ライブラリー
3 5BYTE-パック数字(O) 受信レコード長
4 文字(O) 受信文字列
5 5BYTE-パック数字(I) 待機時間(マイナスはタイムアウトなしで永遠に待機)
  ★以降は任意★  
6 2BYTE-文字(I) キー付DTAQの時の比較式(GT/LT/EQ/NE/GE/LE)
7 3BYTE-パック数字(I) キーフィールド長
8 文字(I) キーデータ
9 3BYTE-パック数字(O) 送信元情報ID(?)
10 文字(O) 送信元情報(?)

データ待ち行列への送信(QSNDDTAQ)パラメータ

1 10BYTE-文字(I) データ待ち行列名
2 10BYTE-文字(I) データ待ち行列ライブラリー
3 5BYTE-パック数字(O) 受信レコード長
4 文字(O) 受信文字列
  ★以降は任意★  
5 3BYTE-パック数字(I) キーフィールド長
6 文字(I) キーデータ

データ待ち行列の作成
以下はDTAQという名前でキーなしのデータ待ち行列とKEYDTAQというキー付データ待ち行列を作成した例です。

> CRTDTAQ DTAQ(XYZLIB/DATQ) MAXLEN(256) AUTORCL(*YES)
オブジェクト DATQ タイプ *DTAQ がライブラリー XYZLIB に作成された。
> CRTDTAQ DTAQ(XYZLIB/KEYDTAQ) MAXLEN(256) SEQ(*KEYED) KEYLEN(10)
AUTORCL(*YES)
オブジェクト KEYDATQ タイプ *DTAQ がライブラリー XYZLIB に作成された。

■OUTQにスプールが投入されたときにデータ待ち行列からデータを取得する
それでは本題です。
OUTQは属性にDTAQを持っていて紐付けすることができます。
このような設定を行ったOUTQはスプールが投入された際に事前に紐付けられたデータ待ち行列に決められたフォーマットでデータが送信されます。このデー タをユーザーPGMにて読み込み処理を行うことで、スプールをリアルに近い形での処理を行うことができます。

1)前準備1=データ待ち行列の作成
   ここではまずキーなしのデータ待ち行列を作成します。

> CRTDTAQ DTAQ(XYZLIB/DATQ) MAXLEN(128) AUTORCL(*YES)
オブジェクト DATQ タイプ *DTAQ がライブラリー XYZLIB に作成された。

2)前準備2=OUTQの変更
   ここでは、OUTQの属性で紐付するデータ待ち行列を指定します。

> CHGOUTQ OUTQ(XYZLIB/TESTQ) DTAQ(XYZLIB/DTAQ)
新規にOUTQを作る場合もDTAQパラメータを指定します。

3)前準備3=データ受信PGM作成。
   サンプルPGMを参照ください。
   作成後、このPGMをSBMJOBし動作させることによりスプールのキー情報を基にスプール一つ一つの処理を行うことが出来ます。

   データ待ち行列で受信されるデータフォーマットは以下のとおり

1

13〜22(文字) JOB名
2 23〜32(文字) ユーザー名
3 33〜38(文字) JOB番号
4 39〜48(文字) スプールファイル名
5 49〜52(BIN) スプール番号
6 53〜62(文字) OUTQ名
7 63〜72(文字) OUTQライブラリー
8 73〜80(文字) 作成システム
9 81〜128 予備

   サンプルではデータ待ち行列からデータを受信した後の処理は行っていませんので、皆さんで必要な処理を組み込んでお使いください。

HOME : TOP

Category

Archive