最初にデータ待ち行列 ( *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 を関連づけておくと印刷スプールの投入をユーザー・プログラムで
検知することができるようになるのである。