この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

7.5.1 製品管理用のフォーム
●メニュー選択によって製品管理用のフォームを開くようにする
 フォームを作成したら,ユーザーがMDIの親フォームから[表示]−[製品情報]を選択したときにFormProductフォーム(Fig.7-67)が表示されるような処理を実装する。そのためには,[表示]−[製品情報]メニューに対応しているMenu_Productメニュー(Table 7-3を参照)のClickイベントにList 7-62に示す処理を実装する。

●フォームのサイズに部品を揃える
 次に,顧客管理用のフォームで実装したとおり,ユーザーがフォームの大きさを変更したときに,そのフォーム上の各コンポーネントの位置やサイズを調整する処理を実装する。

 具体的には,FormProductフォームのForm_ResizeプロシージャにList 7-63のように実装すればよい。

●フォームがロードされたときの処理
 Fig.7-67に示したFormProductフォームがロードされるときには,次の3つの処理をする。

権限の調査
 FormProductフォームには多数のボタンがあるが,そのすべてのボタンをユーザーが利用できるわけではない。なぜなら,今回のサンプルにおいては,ロールによるセキュリティを設定しているためである。たとえば,Productsロールに属さないユーザーは製品の登録や編集,削除といった作業は一切できず,また,ProductsAdminロールかAllAdminロールに属さないユーザーは,削除の取り消し作業は許されていない。
 そこで,顧客管理用のフォームで実装したのと同様に,フォームがロードされたときにユーザーが属しているロールを調べ,利用できないボタンは消してしまうといった処理を実装する。
 
データグリッドコントロールの内容の更新
 DGrid_Productデータグリッドには,その時点で登録されている製品の一覧を表示しなければならない。そのために,List 7-64に示すRefreshDataというプロシージャを用意し,フォームがロードされたときにはこのプロシージャを呼び出してDGrid_Productデータグリッドが製品一覧を表示するようにしておく。
 List 7-64RefreshDataプロシージャは,Business.ProductコンポーネントのGetProductsメソッド(List 6-68)を呼び出して,その時点で登録されている製品情報の一覧を含むADODB.Recordsetオブジェクトを取得し,それをグローバル変数であるg_objRecに保存する。それとともに,同じADODB.RecordsetオブジェクトをDGrid_ProductデータグリッドのDataSourceプロパティに設定することで,DGrid_ProductデータグリッドとADODB.Recordsetオブジェクトを結び付けている。
 なお,17行目で利用しているグローバル変数g_Orderは,列の並べ替えに使うものである。顧客情報処理で施したものと同様に,ユーザーがDGrid_Productデータグリッドの列見出しをクリックしたときには,クリックされた列で一覧を並べ替える機能を実装する。そのためには,DGrid_ProductデータグリッドのHeadClickプロシージャをList 7-65のように定義する。
 
検索用コンボボックスに列見出しを格納
 FormProductフォームのCOMBO_SEARCHFIELDコンボボックスには,その時点でDGrid_Productデータグリッドに記載されている列見出しを格納する。そのために,List 7-66に示すSetFieldListという名前のプロシージャを実装しておく。

 上記の3つの処理をするため,FormProductフォームのForm_LoadプロシージャをList 7-67のように実装する。

 List 7-67は,次の3つの処理をする。

権限の調査
 8〜45行目の処理において,ユーザーが属するロールを調べ,AllAdminProductsProductsAdminのいずれかのロールに属さなければ,[編集]ボタンを[詳細]という名前に変更し,また,[新規]と[削除]の2つのボタンを消してしまう。そして,AllAdminまたはProductsAdminのいずれかのロールに属さなければ[復帰]ボタンを消してしまうという処理をしている。
 
データグリッドコントロールの内容の更新
 47〜50行目の処理では,List 7-64に示したRefreshDataプロシージャを呼び出してDGrid_Productデータグリッドとビジネスロジックから得た製品情報を含むADODB.Recordsetオブジェクトとを結び付けるという処理をしている。
 
検索用コンボボックスに列見出しを格納
 52〜53行目の処理で,List 7-66に示したSetFieldListプロシージャを呼び出し,DGrid_Productデータグリッドに記載されている列見出しをCOMBO_SEARCHFIELDコンボボックスに格納するという処理をしている。
Prev 67/134 Next