まずはDBに書き込むフローからいってみますか
なるべく簡単にしたいので色々手抜きがありますけど、ソコは目をつむってやってください。
※DBを用意してください
当たり前なんですけど、DBに書き込みを行いますのでDBを用意してもらう必要があります。私の環境ではPostgreSQL8.1をインストールしてあります。一番楽なのはMS-ACCESSかもしれませんけど、まぁお金を掛けずにやるならPostgresかMySQLですよね。ASTERIAはMySQLを正式サポートしてませんが使えます。まぁ、JDBC-ODBCでDBに繋ぐのでそこら辺をサポートしてるものなら繋がってしまうんですよね。
というワケでPostgreSQL8.1を前提に話を進めますけど、適宜ご自分の環境に合わせて読み替えてください。もし要望があればMySQLの設定の仕方も書いておきますけどね。
Postgresを入れた方はJDBCドライバーを[ASTERIAインストールディレクトリ]/lib/extの下にコピーしてください。
多分「postgresql-8.1-405.jdbc3.jar」ってゆうのをコピーすればOKなはずです。
その他のDBを使うかたもJDBCドライバーを見つけて放り込んでおいてください。
DBがOKなら以下のテーブルを作成してください。
create table blog_data
(blog_title varchar(100) not null,
blog_body text,
input_time timestamp,
primary key(input_time));
凝ったことしてないので他のDBでも実行可能だと思うんですけどね。(古いのはアウトかもしれません)
まずは入力画面作りから。
本当はコレもASTERIAで出来ると楽でいいんですけどね〜(笑
今回のHTMLはこんな感じです。
タイトル入力ボックスと本文入力ボック、あと更新ボタンが配置されます。
<html> <form name="postForm" method="post" action="http://localhost:21380/guest/Project1/blog_poi02"> お題<br> <input type="text" name="blog_title" size="100"><br> 本文<br> <textarea name="blog_body" cols="80" rows="30"></textarea><br> <input type="submit" value="更新"> </form> </html>
まぁ、前回とほとんど同じですね。
次はフローです。
並べるコンポーネントは以下の通り
[Start]→[Mapper]→[DBPut]→[EndResponse]
- Startコンポーネント
前回とほとんど同じなんですけど、HTMLのInputの名前が変わっているのでArgumentをそれに合わせます。
- Name=blog_title/Type=String
- Name=blog_body/Type=String
ってとこですかね。
- DBPutコンポーネント(Storageタブにあります)
これはデータベースのテーブルに対する更新系の操作を行うコンポーネントです。
ところで、なんでMapperの説明の前にこのコンポーネントの説明をするの?って思った方。鋭いです。
実はMapperコンポーネントというものは「入力」と「出力」を線で結んで定義するものなので先に出力であるDBPutの設定をした方がMapperの操作をしやすいのです。だから先に後続のDBPutの説明をします。
DBPutを使うためには事前準備が必要です。それはコネクションの設定です。どのDBに接続するのかという情報を前もってASTERIAサーバに教えておく必要があるのです。これは仕様なので諦めて設定しましょうね。
こういった予め設定しおかなければならないものはいくつかあるのですが、そういったものはすべてASMCというWEBベースの管理ツールにて行います。ASMCはASTERIA Server Management Consoleの略です。
ブラウザーを立ち上げて
http://localhost:28080/mc/index.jsp
を開いてみてください。
画面が出てきましたよね?
asuという管理ユーザーでログインします。(パスワードはインストール時に指定したものです。忘れがちなんですけどね)
出てきたタブのメニューから
「設定」→「コネクション」→「データベース」→「RDB」を選んでください。新規というボタンがあると思いますので、ポチっとな。
すると新規のコネクション設定が入力できる画面が表示されますのでサクサクっと入力してください。
- 接続名 →適当につけてください
- データベースタイプ →もちろんPostgreSQLを選択
- ドライバー →上記のデータベースタイプを選択すると自動設定されます。
- URL →jdbc:postgresql://localhost:5432/postgresとしました。同じPCにPostgresを入れたもので・・・。あとデフォルトでpostgresってゆうDBが出来たのでそれをそのまま使ってます。(ごめんなさい!!)
- ユーザー →うーん、私はデフォルトのpostgresを使ってしまいました。(ごめんなさい!!)
- パスワード →ごにょごにょごにょ
- コネクションプール →TrueのままでOKです
で、登録するとコネクションのテストをすることが出来ますのでテストボタンをポチっとな。問題がないことを確認してください。もしうまく繋がらなかったらJDBCドライバーのコピーを忘れてないか?またはポートがふさがってないか?またはDBが実は立ち上がってない!とかを確認してください。
ここまで出来たらデザイナーに戻って作業の続きです。
今ASMCで設定したものはそのままではデザイナーには反映されないので、一回最新状態に更新しておきましょう。
プロジェクトウインドウのツリーの最上位に「localhost /guest」というマシンっぽいアイコンありますよね?それを右クリックして「最新の情報に更新」というのを実行してみてください。これで設定の同期がとれます。
さてここまでくれば、あとはコンポーネントの設定だけです。
PropertyタブのConnectionのプルダウンメニューを見てみてください。先ほど設定したコネクション(接続名)が表示されているはずです。それを選択してください
DBPutコンポーネントのField(Input)タブを押してください。2つに分割された画面が表示されましたよね?その上の空白のウインドウ内で右クリックしてメニューを表示してください。すると「テーブルの追加」「テーブル名を指定して追加」って表示されますよね?
ここで「テーブルの追加」ってやるとコネクションで設定されたDBからテーブルのリストが作成されてそれが表示される!・・・ハズなんですけど、多分パーミッションの問題で何も表示されません。手抜き設定の弊害がぁぁぁぁ。
こんな時は「テーブル名を指定して追加」を行ってください。
書き込みをしたいテーブルが「blog_data」なら、その名称を入力してください。ホラ、テーブルが白いウインドウ内に表示されたでしょ?
次はその中から実際に利用したいフィールドを選択します。今回は全部のフィールドが処理対象なのでblog_dataテーブルを選択して右クリックで「テーブル全体をフィールド定義に追加」をします。すると下のウインドウにフィールドの一覧が移りましたよね?これでこのテーブルに対して「Insert/Update/Delete」が可能となります。
今回はDBに書き込みをしたいのでInsertを行います。Propertyタブに切り替えてmodeをInsertにしてください。というかデフォルトがInsertなんですけどね。もしUpdateしたいならこれをUpdateにして先ほどのフィールドの設定のことでキーとなるフィールドのKey属性をTrueにします。詳しくはヘルプ参照ってことで。
(よく逃げの一手としてヘルプ参照って書いてますけど、コンポーネントの右クリックメニューで個別のヘルプが見れるので便利なんです。ハイ。)
- Mapperコンポーネント
入力と出力の設定は済んでますのでMapper画面を開くと左側にPOSTデータの「blog_title」「blog_body」、右側にテーブルのフィールド一覧が表示されていると思います。とりあえず
左側ブロックの「blog_title」→右側ブロックの「blog_title」
左側ブロックの「blog_body」→右側ブロックの「blog_body」
の線ははニュニュニュっと引いちゃってください。
これは勿論、POSTで渡されたデータをそのままDBのフィールドに引き込んでいるワケです。値チェックをしていないのは危険ですが、まぁとにかく今回は簡易版!ってことでそのままゴー。
(今気が付いたけど簡易版って便利な言葉だよねぇ。なんでも頭に簡易とつければどんな俺様仕様も許されるんだもん(笑)
んで、テーブルのフィールドにはあと1つ「input_time」が残っているのでそれも設定しなければいけません。入力時刻を入れたいので日付タブよりNow関数をドラッグ&ドロップしてください。その関数の出力を「input_time」へニュニュニュっと引っ張り込んでください。これで「input_time」に現在の時刻が挿入されます。
- EndResponseコンポーネント
そのままでOKです
これでフローの作成は完成なのですが、今回はもう一手間かけます