この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.5.4 発送処理
では次に,発送処理を実装してゆく。
発送するという処理は,次の4つの操作の組み合わせとなる(Fig.6-90)。
伝票のSENDFLAGフィールドの値をTrueにし,CONSENTEDFLAGフィールドの値をFalseにする
伝票のSENDFLAGフィールドの値をTrueにし,CONSENTEDFLAGフィールドの値をFalseにすることで,伝票の状態を「発送ずみ」に変化させる。これには,List 6-143に示したSet_CONSENTEDFLAGメソッドとList 6-145に示したSet_SENDFLAGメソッドを使えばよい。在庫情報テーブルに登録された出庫予定レコードを施行ずみとする
伝票を承認するときに在庫情報テーブルに追加された出庫予定レコードを施行ずみとする(「6.3.5 在庫の処理」を参照)。施行ずみとするには,在庫情報テーブル内の出庫予定レコードのDUEDATEフィールドに施行日を,CONFIRMEDFLAGフィールドにTrueを,それぞれ設定する。そのためのメソッドは,すでにDataObj.StockコンポーネントにSetConfirmedFlagメソッド(List 6-72)として実装ずみだから,それを利用すればよい。そして,発送の対象となる伝票から生じた出庫予定レコードは,すでにDataObj.StcokコンポーネントのGetRecordsBySlipIDメソッド(List 6-160)を使うことで取得できる。在庫の数を減らす
伝票に付随する明細の対象となっている製品の在庫数を減らす。伝票に付随する明細の一覧は,List 6-130に示したDataObj.SlipDetailコンポーネントのGetRecordsメソッドを使えばよい。そして在庫の数を減らすには,List 6-76で示したDataObj.ProductコンポーネントのAddStockメソッドに,数量として負の数を渡せばよい。予約数を減らす
伝票の承認を依頼するときに予約として抑えていた在庫を解放する。実際の処理でいえば,明細の対象となっている製品を示す製品情報テーブル中の該当製品のレコードのBACKORDERフィールドの値を元に戻す。これには,List 6-150で示したDataObj.ProductコンポーネントのAddBackOrderメソッドに,数量として負の数を渡せばよい。
実際にこれら4つの処理をするプログラムをBusiness.SlipコンポーネントにSendSlipという名前のメソッドとして実装したものが,List 6-165である。
List 6-165のSendSlipメソッドでは,上記の3.と4.の処理はDataObj.SlipDetailコンポーネントのGetRecordsメソッド(List 6-130)を使って取得できる明細の一覧は利用していない。その代わりに,DataObj.StockコンポーネントのGetRecordsBySlipIDメソッド(List 6-160)で取得できる在庫情報テーブルに登録された出庫予定レコードを利用している。そうすると,2.〜4.の処理が,63〜75行目にあるように1つのWhileループですむからである。出庫予定レコードは伝票の明細から作られており,かつNUMBERフィールドの値に伝票明細中の数量を負にしたものが格納されているので,このような処理にしても問題はない。
Fig.6-90 伝票を発送処理する
Chapter 6 75/92 |