最初にデータ待ち行列 ( *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) |
機能
|
10 | A | CHAR(2) |
レコード・タイプ
|
12 | C | CHAR(26) |
修飾ジョブ名
|
38 | 26 | CHAR(10) |
スプール・ファイル名 |
48 | 30 | BIN(4) |
スプール・ファイル番号 |
52 | 34 | CHAR(20) |
修飾出力待ち行例名
|
72 | 48 | CHAR(56) |
予約済み |
これでおわかりのように、例えば Spoolライターを使用しているユーザーであれば
この OUTQ
の *DTAQ
を受信するプログラム ( CLP
) を常駐させておいて OUTQ に印刷スプールが
投入されると CVTSPLF
コマンドによって PDF 化して、別の PC サーバーに PDF として転送して
OUTQ
からは除去するという適用業務を CLP
だけで開発することができる。
もちろん *DATQ
であるので OUTQ
への投入がいつくか発生した後で QRCVDTAQ
を実行するような
処理であってもかまわない。
いずれにせよ、OUTQ
に *DTAQ
を関連づけておくと印刷スプールの投入をユーザー・プログラムで
検知することができるようになるのである。