この特集のトップページへ
>
Chapter 7:プレゼンテーション層の構築
●[OK]ボタン,[キャンセル]ボタンが押されたときの処理
では,次にFormEditProductフォーム(Fig.7-69)の[OK]ボタンや[キャンセル]ボタンが押されたときの処理を実装する。 ○[キャンセル]ボタンが押されたときの処理
まずは,[キャンセル]ボタンが押されたときの処理を実装する。これは単純にフォームを閉じるだけであり,List 7-71のように実装する。 ○[OK]ボタンが押されたときの処理
次に,[OK]ボタンが押されたときの処理を実装する。すでに説明したように,グローバル変数PRODUCTIDには,編集と対象となっている製品の製品番号が格納されている。新規製品を追加する際には,グローバル変数PRODUCTIDの値は-1になる。
そこで,グローバル変数PRODUCTIDの値が-1であれば,Business.ProductコンポーネントのAddProductメソッド(List 6-55)を呼び出して製品を新規登録し,そうでなければ同コンポーネントのUpdateProductメソッド(List 6-60)を呼び出して該当する製品を更新する,という処理をすればよい。具体的なプログラムは,List 7-72のようになる。
List 7-72の11行目は,AddProductメソッドを呼び出して製品を新規登録する箇所,14〜16行目は,UpdateProductメソッドを呼び出して製品を更新する箇所になっている。
11行目にあるように,AddProductメソッドを呼び出したときの戻り値は,グローバル変数PRODUCTIDに保存するようにした。AddProductメソッドは,List 6-55に示したように戻り値として設定された製品番号を返す。これにより,あとからグローバル変数PRODUCTIDを参照することで,新規登録した製品に割り当てられた製品番号を調べることができるようになる。
また,14行目にあるIf文では,TXT_PRODUCTNAMEテキストボックスが淡色表示でないかどうかを調べ,淡色表示でなかったときのみUpdateProductメソッドを呼び出して製品情報を更新するようになっている。すでに,Form_Loadプロシージャ(List 7-68)の26行目によって,ユーザーがAllAdminロール,Productsロール,ProductsAdminロールのいずれにも属さないときには,TXT_PRODUCTNAMEテキストボックスを淡色表示にしている。つまり,AllAdminロール,Productsロール,ProductsAdminロールに属さないユーザーが[OK]ボタンを押したときには,14行目にあるIf文によってUpdateProductメソッドは呼び出されず,製品情報は更新されない。14行目のIf文は省いてもかまわないが,その場合には,COM+のロールによるセキュリティ機能により,AllAdminロール,Productsロール,ProductsAdminロールのいずれにも属さないユーザーがUpdateProductメソッドを呼び出した時点で,権限がないために実行時エラーが発生してしまう。
| 71/134 |
