Micro Focus Net Express による帳票出力
印刷帳票の出力は、業務アプリケーションの中で大きな位置を占めています。
ここでは、Micro Focus Net Expressで開発するWindowsアプリケーションからの帳票出力の方法の選択肢について解説します。
1. 概要
従来 COBOLプログラムから印刷帳票を出力する方法として一般的なのは、
- ページ体裁をLINAGE句で定義した行順編成ファイルへの WRITE AFTER文
- REPORT SECTION構文で定義し GENERATE文で印刷する
でしたが、これらの「伝統的」な方法は、連続紙へ行単位で印刷されるタイプの帳票を前提としていました。しかし、Windows上でのプリント出力はすべてプリントマネージャがコントロールすることが標準になっているため、このような印刷方法では、Windowsの機能のほとんどが使用できません。特に、フォームオーバレイ型と言われるページ単位の固定形式帳票で、グラフィックイメージや多様なフォントを活用したりバーコード印字が必要な場合には、COBOL言語のサポートする範囲内では解決することができません。
Windowsの印刷機能を簡単に活用できるように、多くの帳票ツールがサードベンダーから販売されており、これらを Net Expressで作成するアプリケーションとインタフェースを取ることによって豊富な印刷機能が利用できるようになります。
2. 伝統的な行帳票
COBOL標準の文法である WRITE文や、REPORT SECTION中の報告書記述項のプログラミングによって、連続紙タイプの帳票を印刷するようなアプリケーションは、オフコン・汎用機・MS-DOSの世界で過去に相当な量の蓄積があり、これらをWindows環境で再活用することは意味があります。
Micro Focus Net Express は、COBOLの国際標準に準拠してこれらの構文をサポートしていますので、このようなプログラムのWindowsへの移植が可能です。
しかしこのときに以下のような問題が起こります:
| a) | 移行前の環境と Windows環境のプリンタの機種やドライバの相違によって、印字サイズ、ピッチなどが変わってしまい、旧環境で使用していた専用紙(見出しや罫線などの固定部分が印刷済みになっている連続紙)への印刷でずれが生じる。 |
| b) | 印刷レコード中にCOBOLプログラムで、プリンタ制御コードを埋めこんでおり、これで印字幅などの制御をしていたが、Windowsのスプーラは制御コードを通さないため制御がきかなくなってしまう。 |
これらの問題を解決するために Net Express から、Windowsのスプーラを使用せずに直接プリンタへ出しに行くプログラミングも可能です。そのようなプログラミングのサンプルを、技術サポートホームページを経由して提供しています(http://www.microfocus.co.jp/support/examples/netexpress.asp ) 。これは、「DOS印刷モジュール」とよばれる簡単な COBOLプログラムで、ソースコードで提供されるフリーソフトウェアです。この方法はプリンタの機種に依存しますので、お客様の責任でお使いいただくことになります。
3. MS Accessの利用
Microsoft Accessのレポートは、それほど多様な印刷形態をサポートしているわけではありませんが、集計、コントロールブレークなどが簡単にできるメリットがあります。
Net Express のプログラムからOLEオートメーションを経由して、Accessデータベースを開き、レポートを印刷してから終了するという一連の処理を自動化できます。このとき、COBOLから Accessのテーブルへは、ODBC経由でデータを引き渡します。この例題プログラムも、技術サポートホームページを経由して提供しています。
この例題プログラムも、技術サポートホームページを経由して提供しています(http://www.microfocus.co.jp/support/examples/netexpress.asp )。
4. フォームオーバレイ帳票
フォームオーバレイ帳票の印刷は、サードベンダー提供の帳票ツールとの連携が必要になります。多くの帳票ツールがマーケットで製品化されておりそれぞれ特長がありますが、その選択上のポイントは以下のようなものです:
- サポートされている印字機能、属性の豊富さ
- アプリケーションプログラムとのインタフェース
- 合計、コントロールブレークなどの制御機能
- スプール管理、分散対応など運用の支援
- PDF配布、Web化への対応
ここでは、Net Expressで作成されたCOBOLプログラムとどのようにインタフェースを取るかについて概説します。
4.1 COBOLインタフェース
COBOLとのインタフェースはいくつかの種類がありますが、どの帳票ツールを使用する場合にも以下の手順はほぼ共通しています:
- 帳票ツールが提供する対話型のフォーム設計ツールを使用してレイアウトを定義する。ここで、各可変フィールドに名前をつけ、属性を与えておきます。
- COBOLから何らかの手段によって、定義済みフォーム中の可変フィールドに値を渡します。
- COBOLから何らかの手段によって、帳票ツールへトリガーを渡し、実際の印刷動作をさせます。
4.2 DLL呼び出し
DLLで提供される一連の APIを用意している帳票ツールでは、COBOLからCALL文でそれらのモジュールを呼び出して制御します。
ただし、多くのツールは Visual Basicと Visual C++向けのインタフェースしか用意していないので、COBOLからCALLするのにプログラミングの負担がある場合があります。また、大抵は個々のフィールドへの値の設定にそれぞれCALL文を発行しなければなりません。即ち、1枚の帳票に100個のフィールドがあれば 100回のCALL文を記述する必要があります。
4.3 ActiveXコントロール
最近の帳票ツールのほとんどが COMコンポーネントとしての提供形態を取っています。Net Express では、COBOLから INVOKE文を使用して COMコンポーネントを利用できます。コンポーネントが提供するタイプライブラリから、メソッドやプロパティへのアクセスを行うCOBOL文を自動生成するプログラミングアシスタンスも用意されていますので、このような帳票ツールを利用することができます。
例として エイチオーエス社の シーオーリポーツは、Net Expressで作成されたサンプルプログラムを同社のホームページから配布しています。
この方法でも、やはり、個々のフィールドに値を設定する煩雑さの問題は残ります。
4.4 ファイル渡し
可変フィールドに設定する値を、CSVなどのファイルから受け取って印刷する形式の帳票ツールがあります。この場合、実際に印刷を開始するトリガーは、多くはコマンド行インタフェースで実現されていますので、Net Expressから CBL_EXEC_RUN_UNITルーチンを使用してキックすることができます。
ファイル渡しの利点はCOBOLによるプログラミングが極めて簡単になることです。プログラムでは、COBOLの行順編成ファイルへ馴染み深い WRITE文で値を書き出して行くだけです。上記の2つの方法が持っているフィールド値設定の問題はありません。
5. ソリューション実現例 - プリズム社の DURL
ファイル渡しのインタフェースを活用して、Net Expressで作成したインターネットアプリケーションから、PDFを生成してエンドユーザに配布する例題を プリズム社の DURL (デュール) を使用して作成しました。
DURLは、幅広いプラットフォームに対応し、分散環境での高速印刷を可能にする帳票印刷サーバーです。
5.1 アプリケーションサーバー
この例題はある企業の営業部で、各営業担当者が自分の仕掛り中の伝票を照会して、その中から指定された伝票の確認・発行を行うものです。伝票データは Microsoft Accessのデータベースに保管されており、これを照会するアプリケーションを、Net Expressのウィザードを使用して容易にWebアプリケーションとして記述できました。
最後にオペレータが確認ボタンをクリックすると、Webサーバー上のCOBOLロジックは帳票データをAccessから読み、金額計算を行った上でその結果を CSV として書き出します。
5.2 帳票編集
CSVはDURLが監視しているディレクトリ下に書き出されます。DURLはこのファイルを自動的に識別して、定義済みのフォームに値を設定して PostScriptプリンタに印刷します。
5.3 PDF生成
PostScriptプリンタは実際には Adobe Acrobatによって拾われ、PDFに自動変換されます。