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 バイトの情報であり、詳細は次のとおりである。

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

機能

データ待ち行列を作成した機能を識別するための

文字列であり、つねに *SPOOL と入っている。

10 A CHAR(2)

レコード・タイプ

機能内のレコード・タイプの識別。以下の値のみ

01 = READY 状況の印刷スプールが OUTQ に入れられた。

12 C CHAR(26)

修飾ジョブ名

CHAR(10) ジョブ名

CHAR(10) ユーザー名

CHAR(6) ジョブ番号

38 26 CHAR(10)

スプール・ファイル名

48 30 BIN(4)

スプール・ファイル番号

52 34 CHAR(20)

修飾出力待ち行例名

CHAR(10) 出力待ち行列名

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

72 48 CHAR(56)

予約済み

【 解説 】

これでおわかりのように、例えば Spoolライターを使用しているユーザーであれば

この OUTQ *DTAQ を受信するプログラム ( CLP ) を常駐させておいて OUTQ に印刷スプールが

投入されると CVTSPLF コマンドによって PDF 化して、別の PC サーバーに PDF として転送して

OUTQ からは除去するという適用業務を CLP だけで開発することができる。

もちろん *DATQ であるので OUTQ への投入がいつくか発生した後で QRCVDTAQ を実行するような

処理であってもかまわない。

いずれにせよ、OUTQ *DTAQ を関連づけておくと印刷スプールの投入をユーザー・プログラムで

検知することができるようになるのである。