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



6.5.2 承認依頼処理
●承認依頼を取り消す
 以上で承認依頼の処理は実装したわけだが,承認依頼を取り消す機能も必要であろう。たとえば,承認依頼をしたものの,あとから顧客から連絡が入り,いくつかの明細を変更してほしいといった要求があったときには,承認依頼を取り消す機能が必須となる。

 承認依頼を取り消すには,承認依頼をしたときと逆の処理をする。すなわち,次の2つの処理をすることになる。

  1. REQ_CONSENTFLAGフィールドの値をFalseにする

  2. 製品テーブルの予約数(BACKORDERフィールドの値)に加えた値を減らして元に戻す

 この処理を実際にBusiness.SlipコンポーネントにCancelRequestConsentという名前のメソッドとして実装したものが,List 6-156である。List 6-156の処理はList 6-151に示したRequestConsentメソッドの処理とよく似ている。先頭から60行目までの処理が,伝票の状態や呼び出したユーザーに操作する権限があるかどうかを調べるものである。ここでは,伝票が承認依頼中の状態でなければエラー扱い(36〜39行目),このメソッドを呼び出したユーザーが伝票の起票者,もしくはSalesAdminロールまたはAllAdminロールに属さなければエラー扱い(48〜58行目)としている。

 権限の調査が終わったならば,63行目で伝票レコードのREQ_CONSENTFLAGフィールドの値をFalseにすることで,伝票の状態を「承認依頼中」から「作成中」へと戻す。そして,70行目で伝票に付随している明細情報テーブルの全レコードを取得し,76〜86行目のループ処理において,明細の対象となる製品を示す製品情報テーブル内のレコードのBACKORDERフィールドの値をその明細の数量だけ減らす処理をする。数量を減らす処理は,82行目にあるようにDataObj.ProductコンポーネントのAddBackOrderメソッド(List 6-150)に明細の数量を負にした数を渡すことによって処理している。

prevpg.gif Chapter 6 72/92 nextpg.gif