この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.3.5 在庫の処理
●入出庫予定の一覧取得
最後に,入出庫予定の一覧を取得する処理について説明する。入出庫予定の一覧を取得するということは,在庫情報テーブルに格納されている全レコードを返すということである。在庫情報テーブルに格納されているのは,入庫予定だけではなく,出庫予定もある。ここでは,その両者をまとめて扱うことにする。 ○絞り込みの処理
全レコードを返すには,在庫情報テーブルを開き,SELECT文を発行して得た閉じたADODB.Recordsetオブジェクトを返せばよい。しかし,在庫情報テーブルの場合,単にそうしただけでは若干の問題がある。というのは,在庫情報テーブルに含まれるレコードは,入庫や出庫のたびに追加されるので,実務で使われれば使われるほど,どんどんと膨れあがるためである。そのため,全レコードを返していたのでは,最初のうちはよくても,数ヶ月も使い続ければデータ量が増大し,パフォーマンスの低下が顕著に表れてくるだろう。
ここでいう「パフォーマンスの低下」とは,ネットワークを流れるデータ量の増大に起因するものではない。「6.2.4 顧客一覧の取得」でも説明したように,ADODB.Recordsetオブジェクトを返す場合にはサーバー側で実体化され,クライアントから1レコードずつの要求に応じてデータが流れることになる。したがって,ネットワーク上を大量ののデータが流れるという意味にはならない。とはいえ,プレゼンテーション層に一覧表示させる場合には,全レコードが処理対象となるため,いずれにせよパフォーマンスの低下は避けられない。やはり,不要なデータを返すべきではないのである。そこで,全レコードを返すのではなく,ある程度条件を絞り込んだレコードのみを返すように実装する。絞り込みの条件としては,次の4つの条件設定を挙げることができる。
- 日付による絞り込み
- 自分が入力したレコードのみか,他人が入力したレコードも含むか
- 入庫情報のみか出庫情報のみか
- 施行ずみのものか施行まえのものか
このうち,1.の日付による絞り込みは,開始日時と終了日時をメソッドの引数として与えるようにすれば実現できる。ただし,在庫情報テーブルには,日付を扱うフィールドとして,予定日を示すDATEフィールドと,施行日を示すDUEDATEフィールドの2つがあるため,両者の絞り込みをサポートする必要があるだろう。
2.〜4.の絞り込みは,フラグを利用して絞り込めるようにする。そのため,DataObj.StockコンポーネントにList 6-87に示すFILTER_STOCKという列挙型を定義する。
List 6-87の列挙型は,Table 6-12に示す意味として用いる。
Table 6-12 FILTER_STOCK列挙型の意味
| 値 | 解説 |
|---|---|
| FILTER_STOCK_ALL | 絞り込みなし |
| FILTER_STOCK_OWNER | 自分が登録した情報だけ |
| FILTER_STOCK_INONLY | 入庫情報のみ(FILTER_STOCK_OUTONLYと組み合わせて利用することはできない) |
| FILTER_STOCK_OUTONLY | 出庫情報のみ(FILTER_STOCK_INONLYと組み合わせて利用することはできない) |
| FILTER_STOCK_DUEONLY | 施行ずみだけに絞る(FILTER_STOCK_NODUEONLYと組み合わせて利用することはできない) |
| FILTER_STOCK_NODUEONLY | 施行まえだけに絞る(FILTER_STOCK_DUEONLYと組み合わせて利用することはできない) |
そして,DataObj.Stockコンポーネントには,次のような形のGetRecordsメソッドを用意するものとする。
Public Function GetRecords(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, _
ByVal IncludeDeleted As Boolean) _
As ADODB.Recordset
GetRecordsメソッドは,在庫情報テーブル内の引数で指定された絞り込み条件に合致するレコードを含む,閉じたADODB.Recordsetオブジェクトを返すものとする。実際の実装については,すぐあとに説明する。
第1引数には,FILTER_STOCK列挙型の値を組み合わせて与え,絞り込み条件を指定する。たとえば,“FILTER_STOCK_OWNER Or FILTER_STOCK_INONLY”という値が指定された場合には,「自分が登録した入庫予定だけに絞り込む」という意味になる。
第2引数と第3引数は,入庫や出庫の予定日で絞り込むというものである。これにより,DATEフィールドの値が第2引数で与えられた日付よりも等しいか大きく,第3引数で与えられた日付よりも等しいか小さいレコードのみを返すことにする。絞り込みたくない場合には,第2引数や第3引数にNullを渡す。第2引数にNullを渡した場合には最低値の絞り込みはなし,第3引数にNullを渡した場合には最大値の絞り込みはなし,という意味になる。
第4引数と第5引数は,入庫や出庫の施行日で絞り込むためのものである。これにより,DUEDATEフィールドの値が第4引数で与えられた日付よりも等しいか大きく,第5引数で与えられた日付よりも等しいか小さいレコードのみを返すことにする。絞り込みたくない場合には,第4引数や第5引数にNullを渡す。第4引数にNullを渡した場合には最低値の絞り込みはなし,第5引数にNullを渡した場合には最大値の絞り込みはなし,という意味になる。
第6引数は,削除ずみのレコードを含むかどうかのフラグである。Trueを設定したときは削除ずみのレコードを含み,Falseを設定したときは削除ずみのレコードを含まないものとする。
このように引数で条件を設定することで,指定した条件に合致するレコードのみを返すことができるようになる。
| Chapter 6 48/92 |
