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