印刷スプールのWeb公開

Spoolライターが提供する HPT(ホスト変換) をバインドしたユーティリティーとして
IBM i 側には「CVTSPLF」(スプール・ファイル変換)コマンドが用意されています。

CVTSPLF を使用すると印刷スプールを動的に PDF や HTML変換してWebで公開することができます。
日本語PDFライターがIBM i 側に実装されていることにより
IBM i 側だけで自由にPDF変換を行うことができるようになりました。

くわしくは 「CVTSPLF」(スプール・ファイル変換) を参照してください。

Web公開にあたって

Spoolライターの最も先進的な応用として印刷業務のWeb公開が挙げられます。

JSP & Servlet でも印刷Appも開発することができますが
IBM i において印刷業務に最も適している言語はやはりRPG やCOBOL です。

社内業務のイントラネットやインターネット化は急速に進んでいますが
Web化において見落としがちであるのは、印刷業務のWeb化です。
Spoolライターを使えば既存の印刷Appをほとんど変更することなく
若干のCLPを追加するだけで、簡単に印刷スプールをHTMLにしてWebで公開することができます。
印刷出力に使用していたプログラムは,全く変更する必要はありません。
元の印刷出力プログラムはILE-RPGでなくても伝統的なOPM-RPGであって構いませんし、
極端な例では印刷出力は Query/400 であってもよいのです。

SpoolライターではIBM i 側の機能としてスプール・ファイル変換(CVTSPLF) という
コマンドが提供されています。
CVTSPLF の機能のひとつとしてスプールをHTMLに変換する機能が提供されています。
この機能を使ってスプールをWebで公開することができます。
対象者はCLPにある程度精通していて、CGIなどの基礎知識のある技術者に限られます。

CLP によるCGI開発

スプールやコマンドの制御にはCLPが最も適しています。
それゆえ印刷適用業務もCLP によってCGI を開発するのが最適です。

一般的にCGIというと RPG などの高級言語だけと思われがちですが
CLP であってもCGIとしての機能を果たすことができます。

CLP の中では API : QtmhGetEnv を使って

CALLPRC PRC(QtmhGetEnv) PARM(&ENBUFF &ENBUFFLN +
&ENACTLN &ENVARNAME &ENVARLN &APIERR)

によって、ブラウザからの入力値 &ENBUFF を受け取ることができます。

ブラウザへの出力は API : QtmhWrStout を使って

CALLPRC PRC(QtmhWrStout) PARM(&HTML &OUTLN &APIERR)

コンパイルは

CRTCLMOD MODULE(MYILB/CLPCGI)
SRCFILE(MYSRCLIB/QCLLESRC) AUT(*ALL)

でモジュールを作成してから

CRTPGM PGM(MYLIB/CLPCGI)
BNDSRVPGM(QTCP/QTMHCGI) AUT(*ALL)

で QTCP/QTMHCGI をバインドして *PGM を作成します。

これらの詳しい解説は こちら の「24.CLPで今すぐ作れるCGI」を参考にしてください。
サンプル・ソースは こちら で入手できます。

印刷結果のスプールをHTMLとして戻すCLP の CGI

前述のCLPによるCGIを応用して印刷結果を
CVTSPLFコマンドによってHTMLに変換してIFSに保存します。
ブラウザには保存したIFSの場所に移動するように HTML文を返します。
この原理によってブラウザはスプールから変換されたHTMLを結果として読み取ることができます。

次のHTML を見てください。

<HTML><HEAD><TITLE>印刷CLP</TITLE>
<META HTTP^EQUIV="CONTENT-TYPE" CONTEXT="TEXT/HTML; CHARSET="X-SJIS">
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=HTTP://218.44.18/AS400-NET.USR/PROJECT/SMPRINT/
</HEAD>
<BODY>
</BODY></HTML>

このHTMLをブラウザに戻すと

URL=HTTP://218.44.18/AS400-NET.USR/PROJECT/SMPRINT/ 

として指定された位置に ブラウザはただちに移動します。

REFRESH" CONTENT="0; 

とあるのは 0秒間の待ちで移動する、すなわちただちに移動するという意味です。

CLP-CGI では、まず

HTTP://218.44.18/AS400-NET.USR/PROJECT/SMPRINT/ 

の位置に Spoolライターの CVTSPLF コマンドを使ってHTML をこの位置に出力しておきます。
次に、このHTML文を一行ずつ変数として保管しておいて
LOOP文によって 繰り返し API : QtmhWrStout を使って出力してやれば
ブラウザは直ちにこの位置に移動して、保管されたHTMLを表示することになるわけです。

このCLP のソースは こちらから入手することができます。
詳細な解説はこちらの「25.印刷スプールをHTMLで戻すCLP-CGI」にあります。

印刷結果のスプールをPDFとして戻すCLP の CGI

先の例が理解できれば、PDFを戻す場合も
CVTSPLF の指定がPDF であることだけの ちがいです。

サンプルのソースは こちらから入手することができます。
詳細な解説はこちらの「26.すべてのOS/400 Ver で印刷スプールをPDF化するには?」にあります。