きのうのブログアジャイルと形式仕様記述言語、UMLの融合としての「ミドルアップダウンアプローチ」で、ユーザーとの最小動作単位で、ライブラリを用意しておけば、アジャイル、形式仕様、URLどれでもうまく作れるという話をして、で、そのユーザーとの最小動作単位として、産能大式記号をあげたので、実際、それをライブラリにしてみましょうっていう話を、これから何回かにわけてしたいと思います(新しいシリーズです)。
まずは、ここに書いてある順番でいくと、
新しい帳票を用意する
なので、帳票の話から。
実は、実務における帳票出力というのは、2つのケースがある。
1つは、データが重要で、データベースに書き出せば、本当はOKってもの
もう1つは、紙に出すことが重要(どっかに送るとか、貼るとか)
今回は、後者の「もう1つは、紙に出すことが重要」のケース、つまり、純粋に紙にだすことを考えます。
■概要
SOAやSaaSの時代になると、結局、帳票出力アプリをWebサービスにして、こっちからデータ投げたら、そのデータをみて、出力して欲しいってことになる。
そーすると、方式としては、こんなかんじ。
1.クライアントから帳票出力サービスを呼び出す。
出力データは、XMLでPOST形式で渡す
2.帳票出力サービス(サーバー)は、受け取ったXMLデータのトップのタグから、
それに結びついた帳票の雛型を取ってきて、
そこにデータをいれて、出力する
*ってことは、あらかじめ、帳票の雛型をサーバーに置いておくということ。
なお、ここでいう「クライアント」とは、帳票出力サービスからみたクライアント(指示を出す側)という意味で、もちろん、アプリケーションサーバーでもOK(つーか、そのほうがおおいかな)
クライアント側では、XMLファイルを作成するのに専念すればいい
■ 実現方法
これを実現するのには、サーバー側で、帳票出力プログラムを呼び出すことになる。
富士通なら、ListCreatorっていうのがあるので、そのプログラムを起動すればいい。(あれ、ListCreatorじゃなかったっけ?フォームコーディネーターの親戚。。思い出せないので、以下、ListCreatorって書いちゃうけど、違うかも。。)
受け渡しのデータのXMLファイルは、ListCreatorで決まっているので、終了。。。っていうと、富士通の人以外に怒られそうだから、MS-Accessでやりましょう。
AccessはDBだろ!ってつっこみもあると思うけど、いやいや、帳票出力プログラムとしてのほうが、よく出来てますよ。
ってことで、ASP(この場合はアクティブサーバーページの意味)で、
引数を出力データ(XML形式)にして、POSTで受けて、
プログラムの中は、こんなふうにします。
1.命令を受けたら、Accessのオブジェクトを生成する。
2.XMLファイルをみて、Accessのデータをデータ用テーブルに入れる
→帳票の雛型(Accessでいうレポート)はあらかじめ作っておく
→その雛型(レポート)に対するデータ用テーブルもあらかじめ作っておく
→上記出力要求がきたら、
まず、そのテーブルをクリアする
そこにXMLのデータをいれ、
出力したら削除する
→XMLをAccessのテーブルに入れるのは、(ちょっと古い話だけど)
ここ
3.そのあと、レポート出力を行う。
それでは、以下に、XMLファイルについて書きます。
ここで、複数のフォームのレポートをどのように切り替えて出すかについても書きます。
■XMLのフォーマット
XMLファイルのフォーマットは、こんなかんじ(フォームコーディネータの場合は、それに順ずればいい。ここでは、それを少し書き換え、マルチフォーマットでもシングルフォーマットでもOKにした)。
<Printjob> <レポート名1> <Rec> <項目名1>1件目の項目1のデータ値</項目名1> <項目名2>1件目の項目1のデータ値</項目名2> <項目名3>1件目の項目1のデータ値</項目名3> : : </Rec> <Rec> <項目名1>2件目の項目1のデータ値</項目名1> <項目名2>2件目の項目1のデータ値</項目名2> <項目名3>2件目の項目1のデータ値</項目名3> : : </Rec> : : </レポート名1> <レポート名2> <Rec> <項目名1>1件目の項目1のデータ値</項目名1> <項目名2>1件目の項目1のデータ値</項目名2> <項目名3>1件目の項目1のデータ値</項目名3> : : </Rec> <Rec> <項目名1>2件目の項目1のデータ値</項目名1> <項目名2>2件目の項目1のデータ値</項目名2> <項目名3>2件目の項目1のデータ値</項目名3> : : </Rec> : : </レポート名2> : : </Printjob> |
「レポート名」が、Accessのレポートの名前に相当します(テーブルは、なんでもいいけど、仮にTBLレポート名(レポート名の頭にTBLをつける)としておく)。
項目名が、そのレポートのうち、出力したい項目に相当します。
<REC>が1レコード分に相当します。
1人3枚で1枚フォームを変えて、何人も出したい場合は、
まずレポート名1で1レコード分だけ書いて、
次にレポート名2で1レコード分だけ書いて、
次にレポート名3で1レコード分だけ書いて、
1人分出来上がり、そしたら、2人目のデータで
まずレポート名1で1レコード分だけ書いて、
次にレポート名2で1レコード分だけ書いて、
次にレポート名3で1レコード分だけ書いて、
とやっていきます。
<レポート名>のところで、該当データテーブルをクリアし、XMLからレコードを取り出します(RECタグをみる)。RECタグ1行1レコード分とします。
</レポート名>のところで、出力処理を行います。
こんなかんじにすれば、そのASPを呼び出し、引数にXMLファイルを渡すだけで、帳票出力が出来ます。
もちろん、プログラムとして、AccessやListCreatorを呼び出すことはできるので、プログラムでやってもOKですけど(その場合、XMLに入れるより、ハッシュマップのほうがいいかも)