CL

55. データ待ち行列の応用 (1)

最初にデータ待ち行列 ( *DTAQ ) を利用する例として印刷待ち行列 ( *OUTQ ) に関連する
*DTAQ である。*DTAQ を利用すれば、ある印刷待ち行列 ( *OUTQ ) に投入された印刷スプールを
次々とユーザー・プログラムによって処理することができる。

    CRTOUTQ OUTQ(QGPL/QPRINT3) DTAQ(QGPL/MYDTAQ) AUT(*ALL)

のようにして OUTQ : QGPL/QPRINT3*DTAQ : QGPL/MYDTAQ を関連して作成することができる。
または既存の OUTQ であれば、

    CHGOUTQ OUTQ(QGPL/QPRINT3) DTAQ(QGPL/MYDTAQ)

のようにして、新たに *DTAQ : QGPL/MYDTAQ を割り振ることができる。
そこで別の小さなユーザー・プログラム ( CLP ) を QRCVDTAQ を使って QGPL/MYDTAQ
待機時間 = 9999 で、読み取るプログラムを作成しておいて SBMJOB しておくと
そのプログラムは QGPL/MYDTAQ からデータがやってくるのを DEQW の状態で待ち続けるはずである。
次に OUTQ : QGPL/QPRINT3 に何か印刷フログラムの実行によって印刷スプールが投入されたとすると
OS は QGPL/MYDTAQ に、その情報を直ちに投入してくれる。
これは 128 バイトの情報であり、詳細は次のとおりである。

スプール・ファイルのデータ待ち行列項目のデータ形式
オフセットオフセットタイプ説明
00CHAR(10)

機能
データ待ち行列を作成した機能を識別するための
文字列であり、つねに *SPOOL と入っている。

10ACHAR(2)

レコード・タイプ
機能内のレコード・タイプの識別。以下の値のみ
01 = READY 状況の印刷スプールが OUTQ に入れられた。

12CCHAR(26)

修飾ジョブ名
CHAR(10) ジョブ名
CHAR(10) ユーザー名
CHAR(6) ジョブ番号

3826CHAR(10)

スプール・ファイル名

4830BIN(4)

スプール・ファイル番号

5234CHAR(20)

修飾出力待ち行例名
CHAR(10) 出力待ち行列名
CHAR(10) 出力待ち行列のライブラリー名

7248CHAR(56)

予約済み

【 解説 】

これでおわかりのように、例えば Spoolライターを使用しているユーザーであれば
この OUTQ*DTAQ を受信するプログラム ( CLP ) を常駐させておいて OUTQ に印刷スプールが
投入されると CVTSPLF コマンドによって PDF 化して、別の PC サーバーに PDF として転送して
OUTQ からは除去するという適用業務を CLP だけで開発することができる。
もちろん *DATQ であるので OUTQ への投入がいつくか発生した後で QRCVDTAQ を実行するような
処理であってもかまわない。
いずれにせよ、OUTQ*DTAQ を関連づけておくと印刷スプールの投入をユーザー・プログラムで
検知することができるようになるのである。