ここから先はプログラミングが必要になるのである。今までは、Applictaion.javaにだけプログラムを行ったが、それは文字コードの定義としてアプリケーション全体に影響するものだった。ページについてはプログラムは全然行わなかったが、レコードの一覧はプログラムをしなくても行えた。しかしながら、レコードの追加についてはプログラムはどうしても必要になる。 考え方としては、InputPageを表示するために、新たにレコードを確保して、そのレコードをカレントにする。そして、InputPage側のキーにそのレコードを割り当てておく。そして、InputPage側ではSubmitボタンをクリックすると、新たなレコードのカラムの値を、テーブルに書き込む、つまり更新をするという処理を加えたいのである。 ここで、MainにはmoveInputPageというアクションを加えている。これは、Main.javaというソースに、moveInputPageというメソッドが作られるのである。もちろん、現在の設定ではリンク部分をクリックすると、このメソッドが呼ばれる。このメソッドに、次のようにプログラムを追加する。追加部分だけ、テキストでも示しておこう。
◇Main.javaに加えるプログラム(選択部分が加えたところ)
session().defaultEditingContext().revert(); personaladdressDisplayGroup.insert(); nextPage.setAddressKey((EOEnterpriseObject)personaladdressDisplayGroup.selectedObject());
すでに、moveInputPageメソッドには、InputPageのインスタンスを生成して、そのページに移動するというプログラムが加わっている。そこに、まずはinsertメソッドを使ってテーブルにレコードを加えておき、その新規に加わったレコードをInputPage側のsetAddressKeyメソッドを使って、AddressKeyに設定をするという具合である。revertについては必ずしも必要はないが、データベース処理が中途半端な場合のための対処だ(このアプリケーションだとほとんど影響はないだろう)。これで、「新規レコード入力」のリンクをクリックすると、PersonalAddressテーブルに新規レコードが作成され、そのレコードを編集するためのInputPageが開くというふうに動作する。
一方、InputPageにはSubmitボタンがあるが、そのボタンはsubmitActionというアクションに割り当てられている。このアクションを定義すると、InputPage.javaというソースにsubimitActionというメソッドが作成される。そのメソッドを以下のように変更する。追加部分だけはテキストも示しておく。
◇Main.javaに加えるプログラム(選択部分が加えたところ)
session().defaultEditingContext().saveChanges();
ここでは編集したレコードをテーブルに書き戻す更新処理のメソッドだけを追加した。WOTextFieldはキーで定義したテーブルの各カラムに結合されている。そして、ページを表示する前にそのキーにレコードを割り当ててある。つまり、テキストフィールドとカラムのやりとりは後は自動的に行われるというわけで、結果の更新だけを記載すればよい。なお、次に表示するMainページの生成を先に行ってsaveChangesを実行すると、新しいレコードが一覧表時に反映されないのである。つまり、Mainページを生成している時にデータベース処理をしているということになる。だから、saveChangeをしてから、pageWithNameで新しいページを生成しているのである。
なお、EditingContextってなんだろうとか思うかも知れないが、ここでは今注目しているテーブルなどのオブジェクトと考えればよい。また、プログラムは本来はエラー処理などを組み込む必要ががあるのだが、そこについても割愛している。
では実際に実行してみよう。フォームのあるページでテキストを入力し、Submitボタンをクリックする。もちろん、フォームに入力した日本語テキストが何の問題もなく表示されている。
InputPageに移動してテキストフィールドにキー入力しSubmitボタンをクリックした
InputPagで入力したデータが、Mainページで一覧に表示されている
最後のプログラムについては少し端折ったが、詳細となるとフレームワークの概念から説明をしないといけなくなってしまう。WebObjectsそしてEOFについては多彩な機能を提供しているだけに、ドキュメントをちょっと読んだだけでは理解はできないだろう。もちろん、時間を見つけては肝になるクラスのドキュメントは精読してもらいたいが、もし、WebObjectsを始めたばかりの方なら、むしろ、既存のサンプルでどんなプログラムを書いているのかを見ていくという手法の方が手っ取り早く理解できるように思う。そのとき、この一連の手順でも示したように、ソースを1から書くのではなく、たとえばアクションとして定義した枠の中に、必要な処理を加えるという作業が基本だ。どこからどこまでがプログラマによって加えられたもので、どの範囲がWebObjectsによって自動的に生成されたものなのかを意識しておくと良いだろう。 一連のOpenBaseを使ってWebObjectsのアプリケーションを作成するというシリーズはこれでいったん終了する。OpenBaseとうよりも後半は汎用的な話になってしまったが、WebObjectsに付属するOpenBaseを手がかりにして、WebObjectsを始めてみたいという方々のために、一歩一歩解説を行ってみたという次第である。 |