この特集のトップページへ
Chapter 6:ビジネスロジックの設計



6.3.5 在庫の処理
●入庫予定の追加
 ではまず,入庫予定を追加する処理から説明してゆく。

○データオブジェクトの実装
 Fig.6-64に示したように,入庫予定や出庫予定は在庫情報テーブルの1レコードとして表現される。入庫予定や出庫予定を追加するときに必要となる情報は,「入庫または出庫の予定日」「製品を特定する製品番号」「数量」「摘要」「伝票番号」という5つの情報である。ただし,伝票番号は出庫予定のときだけ必要とし,入庫予定のときには常にNullを指定する。また,出庫予定の場合,数量には負の数を与える。

 在庫情報テーブルに入庫予定または出庫予定を表すレコードを追加するメソッドは,DataObj.StockコンポーネントにAddRecordメソッドとして実装する。このメソッドは,「入庫または出庫の予定日」「製品を特定する製品番号」「数量」「摘要」「伝票番号」という5つの情報を引数にとる。プログラムは,List 6-69のようになる。

 DataObj.StockコンポーネントのAddRecordメソッド(List 6-69)では,在庫情報テーブルにレコードを追加し,そのレコードに割り当てられたレコードID(在庫情報テーブルのIDフィールドの値)を戻り値として返す。

 なお,1〜36行目における引数のエラーチェックでは,Errorcode列挙型(List 6-54)に新しく追加した値を利用した。Errorcode列挙型に追加した値は,List 6-70のとおりである。

 本節では,このAddRecordメソッドを使って入庫予定を追加することしかしないが,次節ではAddRecordメソッドを使って出庫予定も追加する。入庫予定の場合は,伝票番号を示すSLIPIDフィールドの値を常にNullにするので,引数として伝票番号を引き渡す必要はない。しかし,引数として伝票番号を渡すようにしないと,出庫予定の処理でAddRecordメソッドを使い回すことができなくなる。そのため,伝票番号も引数として渡すようにした。

○ビジネスロジックの実装
 次に,プレゼンテーション層から呼び出されることを想定したビジネスロジック側の実装を進める。ここでは,入庫予定を追加するメソッドをBusiness.ProductコンポーネントにAddStorageという名前で追加する。それには,DataObj.Stockコンポーネントを実体化し,先にList 6-69で実装したAddRecordメソッドを呼び出せばよい。このプログラムは,List 6-71のようになる。

 List 6-71AddStorageメソッドは,入庫予定の追加専用とし,伝票番号は引数として与えないことにした。なぜなら,出庫予定レコードは伝票に基づいて作られるものであり,ユーザーが登録する性質のものではないからである。プレゼンテーション層側の依頼によって勝手に出庫予定レコードが作られてしまうと,伝票がない出庫予定が作られてしまうことになる。なお,List 6-71AddStorageメソッドでは,事前にDataObj.ProductコンポーネントのIsDeletedメソッド(List 6-58)を呼び出して,その製品が削除ずみでないことを確認している(31〜34行目)。そして,渡された引数のうち,数量を示す値が負でないことも確認している(21〜23行目)。

 また,List 6-71AddStorageメソッドでは,プログラム内でロールを判定していない。入庫予定を追加するには,製品管理部のユーザー,つまりProductsロール,ProductsAdminロール,AddAdminロールに属するユーザー以外は呼び出せないようにする。しかし,プログラム側ではなく[コンポーネントサービス]管理ツール側で設定するようにする。

prevpg.gif Chapter 6 43/92 nextpg.gif