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

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

Excelに業務をまとめ、プログラムを自動生成する-その15 ここまでのExcel表と実装

2010-01-29 13:31:13 | そのほか

シリーズ「Excelに業務をまとめ、プログラムを自動生成する」の続きです。

 前回までで説明してきた図は
  ・DMM
  ・業務流れ図
  ・画面設計書(画面レイアウト、画面遷移図)
 で、これに対応したExcel表
  ・機能構成表
  ・業務シート
  ・項目・イベント定義(画面レイアウトのレイアウトを除いたもの)
  ・画面遷移表
 をつくりました。

 で、今回は、ここまでをプログラムにします。フレームワークは、「今回は」Strutsにします。




■ドキュメントとStrutsとの対応

 Strutsを動かすために作成するプログラム、ファイルは
  ・struts-config.xml
  ・画面のJSP
  ・画面のActionForm
  ・画面のAction
 で、画面と、ビジネスモデルの処理タイミングが一致しないため*
  ・ビジネスロジック
 が必要になる。

 このほか、
  ・DBアクセス部分(DAO)
 などが必要だが、今回の範囲でないので省略。

 で、これらファイルと、図、Excelシートとの関係は、以下のとおり。

 今回は、これらのファイルの作り方の概要というか、雰囲気を説明します。
 詳細は、もっと後の機会の実装で説明します。

*注:「ビジネスモデルの処理タイミングが一致しない」:
 たとえば、いつもの電波利用の話で言うと、「免許の申請」という1つの処理に対して、「無線局免許申請書」、「工事設計書」「無線局事項書」という3つの画面を持っている。このように、1つの処理で複数画面のときもあるし、1画面なのに、押すボタンによって、全く違う処理ということもある。そのような、画面と処理が合わないことを表現している。




■struts-config.xmlの作り方雰囲気

 これは、前回説明したとおり。もう一度書くと、

<form-bean name="画面名Form" type="サブシステム/画面名ActionForm"/>
   :

<action path="/画面名" type="サブシステム/画面名Action"
     name="画面名Form" scope="request" validate="false">
        <forward name="処理結果" path="/次画面名.jsp"/>
</action>
   :

みたいなかんじ。画面遷移表の項目名をそのまま入れているので、実際には、
各シートの項目値が、英語で入ることになる。





■画面のActionForm雰囲気

 項目・イベント定義の、項目は、画面の入出力に対応して書いているはずなので、

 class 画面名ActionForm extends ActionForm
 {
   //  フィールド
   private String(など部品に応じた型) (入力項目の)項目名;

   //  アクセサ
   public String(など部品に応じた型) get(入力項目の)項目名1文字目大文字
:

}

 みたいなかんじで、フィールドとgetter,setterをかいていく。
 入力項目かどうか、型は何にするかは、部品名から判断する

 この場合、表の可変行部分はどうなるの?となるが、
 ここはhiddenで渡して、Javascriptでいろいろ書くのだが、それは今回は省略(実装の話のときに)
 また、入出力項目の場合はreset()で書くんだけど、それは、jspのところで書きます(後述)。




■画面のAction雰囲気

 項目・イベント定義を基に作る。画面1個に1画面作るので、
 項目・イベント定義の1画面毎に

 class 画面名Action extends Action
 {
   public ・・・・execute(・・・・)
   {
       画面名ActionForm myform = (画面名ActionForm)
       HttpSession session = request.getSession(false);
       画面に対応する処理名bean mybean
         = (画面に対応する処理名bean)session.getAttribule("画面に対応する処理名bean");
       if ( mybean == null )
       {
          mybean = new 画面に対応する処理名bean();
          session.setAttribute("画面に対応する処理名bean",mybean);
       }

       //beanセット
       mybean.set画面の入力項目名(myForm.get画面の入力項目名());
             :(中略、項目があるだけ続く)
             :

       // イベント設定
       mybean.setEvent("画面名_イベント名");
       // 実行
       mybean.execute()

       //返り値(次遷移先取得)
       return mapping.findForward(mybean.get返り値());
    }


みたいな内容を書く。実際には、DBアクセスのためのものも入るんだけど、
その話は、またいつか。

「画面に対応する処理名」とは、この画面は、どこかの画面グループに属していて、
その画面グループを利用する処理が、「業務シート」で定義されていると思うけど、
そのシートに書いてる業務名◎(説明後述)
 イベント名は、後述します。

 この業務名ごとに、beanを書く。

 get返り値()については、beanのところで書きます。




■ビジネスロジックの雰囲気

 業務シートを使って、ビジネスロジックを作成します。POJOです。

 ◎にかいてあるように、業務シートの業務名ごとに、1つのビジネスロジックをつくります。

 beanの構成は、こんなかんじ

public void 業務名bean


   画面グループに属する入出力項目のフィールド名
   public String ret; // 返り値を入れる
   public String event; // イベント名を入れる

   // メソッド
   // フィールドのセッターゲッターを書く

   public void execute()
   {
      if (event.equals("画面名_イベント名") == true )
      {
          ここに処理を書く。今後説明
          ret = 結果
      }
          :(以下、イベント分続く)
          :
    }
 }

業務シートの入出力のところに、画面グループが上がっている。
この画面グループに属する画面(というのは、項目イベント定義を見ると分かる)の
すべての入出力項目を取り出して、フィールド、セッターゲッターを作成する。

このフィールドは、以下のようにset,getされます
・入力項目に関しては、それぞれの画面→画面のActionForm→画面Action
 を通じて、値がセットされる

・出力項目に関しては、このBean→セッション→画面の<bean:writeタグ>で
 出力されます。

・入出力項目に関しては、ActionFormのreset()を書いて
   セッションからBeanを取ってきて
   Bean→ActionFormにセット
 します。

 画面名_イベント名は、画面遷移表に書かれている、画面、項目、イベントを_でつなげたものになります。

 が、詳しくは、beanの中身を書くときに説明します(もっと先の回)

 処理の中身も、今後の回でかかれることになります。




■画面のJSPの雰囲気

HTMLのINPUT,SELECT,TEXTAREAなどを、Strutsタグに書き直します。
FormのAactionは、画面名を呼ぶようになります。

出力項目は、セッションに入っている業務名beanを呼び出すことになりますが、
存在しないこともあるので、logic:notEmptyでくくって、beanがあるときだけ
やります。




なかんじで、やっていきます。

で、次回から、話を戻して、DB定義になります。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 「来るべきクラウドコンピュ... | トップ | T2やpirkaと、開発ドキュメン... »
最新の画像もっと見る

そのほか」カテゴリの最新記事