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

7.6.1 製品管理用のフォーム
●フォームがロードされたときの処理
 FormStockフォーム(Fig.7-71)がロードされたときには,次の3つの処理をする。

1.権限の調査
 ユーザーがどのロールに属しているかを調べ,FormStockフォームに付いているボタンのうち,利用できないボタンを不可視にする。FormStockフォームの[削除]ボタンと[入庫施行]ボタンは,AllAdminロール,Productsロール,ProductsAdminロールのいずれかに属するユーザーしか利用できない。また,[復帰]ボタンと[入庫施行取消]ボタンは,AllAdminロールまたはProductsAdminロールのいずれかに属するユーザーしか利用できない。

2.データグリッドコントロールの内容の更新
 FormStockフォームが表示されたときには,その時点でDGrid_Stockデータグリッドに登録されている入出庫情報の一覧を表示しなければならない。具体的には,Business.ProductコンポーネントのGetStoragesメソッド(List 6-89)を呼び出して得たADODB.RecordsetオブジェクトとDGrid_Stockデータグリッドとを結び付けるという処理をする。

 ところで,Business.ProductコンポーネントのGetStoragesメソッドは,次のように引数をいくつかとり,特定の条件を満たすレコードのみを取得する機能を備えている。

Public Function GetStorages( _
  ByVal FilterFlag _
    As FILTER_STOCK, _
  ByVal start_DATE _
    As Variant, _
  ByVal end_Date As _
    Variant, _
  ByVal start_DUEDATE _
    As Variant, _
  ByVal end_DUEDATE _
    As Variant) _
As ADODB.Recordset

 そこで,この引数をうまく使い,ユーザーがFig.7-72のウィンドウで設定する条件を満たすレコードのみを取得することにする。

 具体的には,List 7-88に示すRefreshDataというプロシージャをFormStockフォームに用意する。RefreshDataプロシージャは,Business.ProductコンポーネントのGetStoragesメソッドを呼び出してDGrid_Stockデータグリッドと結び付けるというものである。

 List 7-88においてGetStoragesメソッドを呼び出しているのは,20〜26行目の箇所である。20行目では,CHK_FILTERチェックボックスのValueプロパティの値が1であるかどうかによって条件分けをしている。もし1であれば,22行目で引数にg_FilterFlagg_startDateg_endDateg_startDueDateg_endDueDateを渡し,GetStoragesメソッドを呼び出す。これに対して,1でなければ,25行目でFILTER_STOCK_ALL定数とNullを渡し,GetStoragesメソッドを呼び出す。Fig.7-71を見るとわかるように,CHK_FILTERチェックボックスとは[絞り込み]チェックボックスである。チェックボックスのValueプロパティは,そのチェックボックスがチェックされていれば1,チェックされていなければ0となる。つまり,20〜26行目の処理は,[絞り込み]チェックボックスがチェックされていれば22行目を実行し,チェックされていなければ25行目を実行するということになる。


One Point! チェックボックスのValueプロパティは,3つの状態を取り得る。0のときはチェックされていない,1のときはチェックされている,という2つは直感的に理解できるだろうが,もう1つ,2のときは灰色表示である(ボックスの中身が灰色で表示される)ことを示す。

 すでにList 6-89で実装したように,GetStoragesメソッドでは,引数にFILTER_STOCK_ALLを渡すと「絞り込み条件なし」,Nullを渡すと「日付による絞り込み条件なし」,を意味するのであった。よって,25行目のGetStoragesメソッドでは,(絞り込みをせずに)すべての入出庫情報を取得するという意味になる。

 一方の22行目では,引数によって絞り込み条件が設定されたうえで,その条件に合致する入出庫情報のみが得られるようになる。

 では,22行目で引数として指定しているg_FilterFlagg_startDateg_endStartg_startDueDateg_endDueDateという各変数は,どこで設定するのだろうか。実は,フォームがロードされた時点で,g_FilterFlag変数にはFILTER_STOCK_ALL定数を,残りの変数にはNullを設定するようにしている(その実装はすぐのちに説明する)。これにより,フォームがロードされた直後は,「絞り込み条件なし」と同じ意味になる。そして[絞り込み設定]ボタンが押されたときには,Fig.7-72に示したフォームをユーザーに表示し,このフォームで[OK]ボタンが押されると,その条件に合致するように各変数を設定する。そうすることで,ユーザーが設定した絞り込み条件に合致する入出庫情報を取得し,DGrid_Storageデータグリッドに表示するという処理を実現できる。この詳細は,「7.6.5 絞り込み処理」にて説明する。

 なお,実行時エラーが発生したときには,45行目でCHK_FILTER.Valueプロパティを0に設定している。その理由は,ユーザーが設定した絞り込み設定が失敗したときに,[絞り込み]チェックボックス(CHK_FILTERチェックボックス)のチェックを解除するためである。詳しくは,「7.6.5 絞り込み処理」で説明するが,ユーザーには,絞り込みの設定として日付も入力させる。もし日付の書式が不正だと,21行目にあるBusiness.ProductコンポーネントのGetStoragesメソッドを呼び出したときに,実行時エラーが発生する。そこで,もし実行時エラーが発生したときには,強制的に絞り込ませないようにするよう,[絞り込み]チェックボックスのチェックを解除するようにしたのである。こうしておけば,次にRefreshDataプロシージャが呼び出されたときには,20行目のIf文が偽になるから25行目が実行され,ユーザーが設定した絞り込み条件を無視してすべての入出庫情報が取得される。もし,この処理がなければ,RefreshDataプロシージャが何度呼び出されても,実行時エラーが発生し続けることになってしまうだろう。

 ところで,30行目では,取得したADODB.RecordsetオブジェクトのSortプロパティにグローバル変数g_Orderの内容を設定している。グローバル変数g_Orderは,並び替えの処理のときに並び替えるフィールド名を保存する変数である。そして,ユーザーがDGrid_Storageデータグリッドの列見出しをクリックするたびに,その列で昇順または降順に並び替えて表示する。このような処理を実現するため,List 7-89に示すHeadClickイベントの処理を実装しておく。

3.検索用コンボボックスに列見出しを格納
 FormStockフォームのCOMBO_SEARCHFIELDコンボボックスには,その時点でDGrid_Stockデータグリッドに記載されている列見出しを格納する。そのために,List 7-90に示すSetFieldListというプロシージャを実装しておく。

Prev 80/134 Next