この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

head2.gif7.4.4 顧客の編集
 では次に,顧客の編集処理を実装してゆく。

●[編集]ボタンが押されたときの処理
 顧客を編集するときには,顧客情報フォーム(Fig.7-16を参照)の[編集]ボタンを押して編集画面に移行する。編集の対象となる顧客はデータグリッドのマーキーが指している行とする。

○編集対象となる顧客の情報をフォームに表示する
 顧客の編集は,顧客の新規作成とほぼ同じような処理で実装することができる。

 顧客を新規登録する際には,FormEditCustomerフォームのNewCustomerメソッドを呼び出し,FormEditCustomerフォームの全テキストボックスをクリアしてからFormEditCustomerフォームを表示した(List 7-17を参照)。その代わりに,その時点における顧客の既存情報をテキストボックスに格納して表示すれば,顧客の新規登録画面ではなく編集画面となる。

 そこで,FormEditCustomerフォームにList 7-25に示すEditCustomerというプロシージャを追加する。EditCustomerプロシージャは引数に顧客の顧客番号をとり,その顧客の内容をFormEditCustomerフォーム上のテキストボックスに設定するというものである。

 List 7-25EditCustomerプロシージャでは,引数として受け取った顧客番号を20行目でBusiness.CustomerコンポーネントのGetCustomerメソッドの引数として渡し,該当する顧客の顧客名,よみがなといった情報を得る。その後,23〜74行目においてその情報をFormEditCustomerフォーム上のテキストボックスに設定するという処理をしている。

 なお,23〜74行目では,一部IsNull関数を使い,設定しようとしている値がNullでないかどうかを調べている。これは,テキストボックスのTextプロパティにNullを格納しようとすると実行時エラーが発生するためで,Nullであるときには代わりに空文字("")をTextプロパティに設定するようにした。

○[編集]ボタンが押されたときの処理
 FormCustomerフォーム上の[編集]ボタンが押されたときには,List 7-25で実装したEditCustomerプロシージャに編集対象となる顧客の顧客番号を渡し,その後,FormEditCustomerフォームを表示すればよい。そうすれば,該当する顧客の情報がテキストボックスに格納された状態でFormEditCustomerフォーム(Fig.7-23)が表示され,ユーザーはその顧客を編集できるようになる。

 FormCustomerフォーム上の[編集]ボタンには,BTN_EDITという名前を付けたので(Fig.7-16を参照),このClickイベントに対応するプロシージャとしてBTN_EDIT_ClickプロシージャをList 7-26のように実装する。

 List 7-26において,EditCustomerプロシージャ(List 7-25)を呼び出している部分は4行目である。データグリッドと結び付けられているADODB.Recordsetオブジェクトはグローバル変数g_objRecに保存されているから,4行目にあるように“g_objRec.Fields("ID").Value”とすれば,マーキーが指しているレコードのIDフィールドの値,つまり,顧客番号が得られる。

 その後5行目でFormEditCustomerフォームをモーダルウィンドウとして表示し,FormEditCustomerフォームの処理から戻ってきた時点で,7〜12行目でデータグリッドの内容を最新の状態に更新する。7〜12行目の処理は,List 7-17に示したBTN_NEW_Clickプロシージャでの処理とまったく同じである。

○[OK]ボタンが押されたときの処理
 さて,List 7-25List 7-26の実装を加えることによって,ユーザーが[編集]ボタンを押したときに,マーキーが指している顧客の内容を格納してFormEditCustomerフォームが表示され,編集可能な状態になる。しかし,ユーザーがFormEditCustomerフォームに表示された顧客の情報を編集して[OK]ボタンを押した場合には,その顧客が更新されるのではなく,新しく登録されてしまう。なぜなら,[OK]ボタンが押されたときに実行されるBTN_OK_Clickプロシージャ(List 7-11)は,常にBusiness.CustomerコンポーネントのAddCustomerメソッドを呼び出し,顧客を新規登録するようになっているためである。

 そこで,BTN_OK_Clickプロシージャを変更し,顧客が編集中であるならば,Business.CustomerコンポーネントのAddCustomerメソッドではなく,UpdateCustomerメソッドを呼び出して顧客を更新するという処理に変更する必要がある。実際にそのように変更したものが,List 7-27である。

 List 7-27では,9行目でグローバル変数CustomerIDの値が-1であるかどうかを調べ,-1である場合には10〜11行目の処理を実行し新規顧客を登録,そうでない場合には13〜16行目の処理を実行し顧客を編集するというように変更した。

 14行目では,TXT_CUSTOMERNAMEテキストフィールドのEnabledプロパティを調べ,EnableプロパティがTrueであるときにだけ15行目にあるUpdateCustomerメソッドを呼び出して顧客を登録するようにしてある。すでにFormEditCusomterフォームがロードされるときに実行されるLoadイベントの処理(List 7-20)において,このアプリケーションを実行したユーザーがSalesSalesManagerSalesAdminAllAdminのいずれかのロールに属さない場合には,TXT_CUSTOMERNAMEテキストフィールドのEnabledプロパティをFalseにして編集不可能にした。つまり,14行目のIf文は,TXT_CUSTOMERNAMEテキストフィールドが編集可能であるときのみUpdateCustomerメソッドの呼び出しを実行して顧客を登録するという意味になる。こうすることにより,SalesSalesManagerSalesAdminAllAdminのいずれかのロールに属するユーザー以外は顧客の情報を更新しないという処理を実現しているのである。

prevpg.gif Chapter 7 24/65 nextpg.gif