ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

SaaS、SOA時代の帳票出力は、出力ツールがWebサービスでデータはPOSTでXML

2006-08-02 12:40:15 | 開発ネタ

 きのうのブログアジャイルと形式仕様記述言語、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に入れるより、ハッシュマップのほうがいいかも)
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 偽装請負について、朝日がや... | トップ | ゲームのポータルを作って、... »
最新の画像もっと見る

開発ネタ」カテゴリの最新記事