« Model-Glue のコード補完 | メイン | S11HT の液晶保護シート »

Scaffold

まず、前回の modelglue.xml をちょっと更新した。
ファイル modelglue-02.xml 。念のためファイル名は変えておいた。コード補完部分は変わっていない。

では、今回の本題。Scaffold という機能もなかなか便利。
サンプルアプリケーションでいうと、Transfer.xml に記述してあるオブジェクトを指定して Scaffold を設定すると、そのオブジェクトのデータ管理ができる機能が自動で生成される。
以下のように ModelGlue.xml に一行付け加えるだけで、その機能ができてしまうのである。

<event-handlers>
 ……
 <scaffold object="master.Item" />
</event-handlers>

で、http://localhost/shopping/index.cfm?event=master.Item.list にアクセスすると、そのテーブル内のデータが表示できる。

しかし、これまで Transfer.xml で設定していた内容に問題があったようだ。

<package name="master">
 <!-- Category -->
 <object name="Category" table="CATEGORYMST">
  <id name="PKeyCategoryId" type="numeric" column="categoryid" />
  <property name="CategoryName" type="string" column="categoryname" />
  <onetomany name="CategoryItemLink" lazy="true">
   <link to="master.Item" column="lnkcategoryid" />
   <collection type="struct">
    <key property="PKeyItemId" />
   </collection>
  </onetomany>
 </object>
 <!-- Item -->
 <object name="Item" table="ITEMMST" sequence="ITEMMST_itemid_seq">
  <id name="PKeyItemId" type="numeric" column="itemid" generate="false" />
  <property name="ItemName" type="string" column="itemname" />
  <property name="Price" type="numeric" column="price" />
 </object>
</package>

設定した状態がどのように機能しているかわかりやすいように、PKeyCategoryId 、PKeyItemId としていたのだが、ここをそれぞれ CategoryId 、ItemId のように実際のカラム名と同じ綴りにしないと、エラーになってしまった。

<package name="master">
 <!-- Category -->
 <object name="Category" table="CATEGORYMST">
  <id name="CategoryId" type="numeric" column="categoryid" />
  <property name="CategoryName" type="string" column="categoryname" />
  <onetomany name="CategoryItemLink" lazy="true">
   <link to="master.Item" column="lnkcategoryid" />
   <collection type="struct">
    <key property="ItemId" />
   </collection>
  </onetomany>
 </object>
 <!-- Item -->
 <object name="Item" table="ITEMMST" sequence="ITEMMST_itemid_seq">
  <id name="ItemId" type="numeric" column="itemid" generate="false" />
  <property name="ItemName" type="string" column="itemname" />
  <property name="Price" type="numeric" column="price" />
 </object>
</package>

ItemArrayBean.cfc の26行目も

StructInsert(itemStruct, "id", Trim(itemQuery.ItemId));

と書き換える。
CartProcess.cfc もちらほらと PKey があるので、修正する。

Scaffold を利用していなかった今までは問題なかったんだけどなぁ。

問題の箇所を書き換えて、上記アドレスから表示される画面から、master.Item オブジェクトに対する一覧表示、新規登録、編集、削除など一通りの機能が利用できる。なかなか便利だ。本番時には使えないだろうけど、開発当初は、なかなか有効に利用できるのではないだろうか。

トラックバック

このエントリーのトラックバックURL:
http://www.schwarzmond.info/mt/mt-tb.cgi/68

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年05月22日 09:45に投稿されたエントリーのページです。

ひとつ前の投稿は「Model-Glue のコード補完」です。

次の投稿は「S11HT の液晶保護シート」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。