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



6.4.1 伝票の作成
●データオブジェクトの構築
 伝票を作成する場合には,まず伝票情報テーブルにレコードを追加する。そのあと伝票追加情報テーブルに,発注日,納入予定日,発送先を表す部署名や担当者名,住所,電話番号などをレコードとして追加し,伝票情報テーブルのレコードと伝票追加情報のレコードとをリンクさせればよい(Fig.6-73)。

Fig.6-73 伝票の新規作成
fig6_73

 Fig.6-73を見るとわかるように,伝票情報テーブルと伝票追加情報テーブルにはさまざまな情報が格納される。以下,各テーブルにレコードを追加する方法について考える。

○伝票情報テーブルの処理
 Table 6-14を参照するとわかるように,伝票情報テーブルには多数のフィールドがある。しかし,ほとんどのフィールドは,伝票が営業部から製品管理部へ,さらに経理部へと渡るときに使われるものであり,伝票情報テーブルに新しいレコードを追加した時点で必要とされるものはさほど多くない。

 レコードを挿入するにあたって設定しておきたいフィールドは,CUSTOMERIDMADEDATESUBTOTALTAXTOTALONEBILLFLAGMADEUSERLASTUSERLASTDATEである。

CUSTOMERID
 伝票の取引先となる顧客を特定する顧客番号を指定する。
 
MADEDATELASTDATE
 このレコードが作成された日時を設定する。
 
MADEUSERLASTUSER
 このレコードを作成したユーザーのアカウント名を設定する。
 
ONEBILLFLAG
 この伝票単体に対する請求書を作るときにはTrueを,ほかの伝票と合わせて月単位の請求書を作るときにはFalseを設定する。
 
SUBTOTALTAXTOTAL
 SUBTOTALTAXTOTALは,それぞれ小計,消費税,合計を示すフィールドである。しかし,伝票が作られた直後は何も明細がないので,0に初期化する。

 上記以外のフィールドには,NULL値を設定しておけばよい(ただし,Boolean型のフィールドについてはFalseを設定する)。そこで,伝票情報テーブルを操作するデータオブジェクトであるDataObj.SlipコンポーネントにAddRecordメソッドを加える(List 6-90)。AddRecordメソッドは,顧客番号(CUSTOMERIDフィールドに設定したい値)と請求書を単体で作るかどうかを表すフラグ(ONEBILLFLAGフィールドに設定したい値)を引数にとり,その顧客に対する伝票を伝票情報テーブルに挿入する。このときAddRecordメソッドは,挿入した伝票レコードの伝票番号(レコードID)を戻り値として返す。

○伝票追加情報テーブルの処理
 次に,伝票追加情報について考える。伝票追加情報テーブルにレコードを追加する際に設定しておくべきフィールドは,次のとおりである。

SLIPID
 このレコードと結び付けられている伝票の伝票番号を設定する。このフィールドには,DataObj.SlipコンポーネントのAddRecordメソッド(List 6-90)を呼び出したときの戻り値を設定すればよい。
 
DIVISION
 顧客の部署名を指定する。
 
PERSON
 顧客の担当者名を指定する。
 
DELIVERDATE
 納入予定日を指定する。
 
SENT_ADDR
 発送先の住所を指定する。
 
SENT_TEL
 発送先の電話番号を指定する。
 
MEMO
 伝票の摘要を指定する。
 
MADEDATELASTDATE
 このレコードが作成された日時を設定する。
 
MADEUSERLASTUSER
 このレコードを作成したユーザーのアカウント名を設定する。
 
DELETEDFLAG
 削除フラグにはFalseを設定する。

 ここで,伝票追加情報テーブルを操作するデータオブジェクトとしてDataObj.SlipInformationというコンポーネントを導入する。DataObj.SlipInformationコンポーネントを導入するには,DataObjプロジェクトにSlipInformationというクラスモジュールを追加すればよい。クラスモジュールは,Visual Basicの[プロジェクト]メニューの[クラスモジュールの追加]を選択することで追加できる。そして,DataObj.SlipInformationコンポーネントのトランザクションの初期設定を「トランザクションが必要」に設定したいので,追加したSlipInformationクラスモジュールのMTSTransactionModeプロパティの値を[RequiresTransaction]に変更しておく(Fig.6-74)。

Fig.6-74 SlipInformationクラスモジュールのMTSTransactionModeプロパティ
fig6_74

 SlipInformationクラスモジュールを追加したならば,[コンポーネント]サービス管理ツールのコンポーネントのプロパティの[アクティブ化]ページで管理者が設定するコンストラクタ文字列をデータベース接続文字列として使えるようにするため,List 6-91に示すプログラムを追加する。List 6-91は,まえに示したDataObj.Customerコンポーネント,DataObj.Productコンポーネント,DataObj.Slipコンポーネントなどに追加したもの(List 6-52)と同じもので,IObjectConstruct_Constructメソッドを実装してコンストラクタ文字をCOMコンポーネント内の変数に保存しておきあとで利用できるようにする処理をするというものである。

 List 6-91の追加作業が終わったならば,次に伝票追加情報テーブルに新しいレコードを追加するメソッドを追加する。ここでは,AddRecordという名前のメソッドとして実装した(List 6-92AddRecordメソッドは,引数として次の7つの値をとり,伝票追加情報テーブルに新しいレコードを追加する。そして,挿入したレコードのレコードID(IDフィールドの値)を戻り値として返すという処理をする。

  • 伝票番号(SLIPIDフィールドに設定したい値)
  • 顧客の部署名(DIVISIONフィールドに設定したい値)
  • 顧客の担当者名(PERSONフィールドに設定したい値)
  • 納入予定日(DELIVERDATEフィールドに設定したい値)
  • 発送先の住所(SENT_ADDRフィールドに設定したい値)
  • 発送先の電話番号(SENT_TELフィールドに設定したい値)
  • 摘要(MEMOフィールドに設定したい値)

 ところで,List 6-90List 6-92では,Err.Raiseメソッドで実行時エラーを発生させるときにErrorcode列挙型(List 6-70)の値を使っている。そのうちのいくつかは,新たに追加した。追加したErrorcode列挙型をList 6-93に示す。

prevpg.gif Chapter 6 53/92 nextpg.gif