解説

実例で学ぶASP.NETプログラミング

第13回 オートマチックな情報確認画面の構築

小田原 貴樹(うりゅう)
2004/06/12

変数の初期化と注文情報確認画面の表示

 まずは、REGVIEW.ASPXのコードビハインド・ファイルを開き、次のコードをフィールド宣言部分のすぐ下に記述する。

Public DC As New DATACON()

 この連載で何度も出てきている、データベースから情報を取得・更新するためのDATACONクラスのインスタンスを、DCという名前で新しく生成するための処理である。これでこのクラスの中でもDATACONクラスのメソッドが利用できるようになる。

 次に、Page_Loadイベントのハンドラ・メソッド内に変数の初期化と、画面表示のための以下のコードを追加する。

01: Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
02:   If Not IsPostBack Then
03:     PCNT.Text = Session("Sbview").Count
04:
05:     Dim i As Integer
06:     For i = 0 To Session("Sbview").Count - 1
07:       PNAME.Text += Session("Sbview")(i)("商品名") & ","
08:     Next
09:     PNAME.Text = Mid(PNAME.Text, 1, Len(PNAME.Text) - 1)
10:
11:     Dim ps As Integer
12:     For i = 0 To Session("Sbview").Count - 1
13:       ps += Session("Sbview")(i)("金額")
14:     Next
15:     MAX.Text = ps.ToString("C")
16:     Session("PS") = ps
17:
18:     name.Text = Session("UDVIEW")(0)("配送先氏名")
19:     YUBIN.Text = Session("UDVIEW")(0)("配送先郵便番号")
20:     ADDR.Text = Session("UDVIEW")(0)("配送先住所")
21:     tel.Text = Session("UDVIEW")(0)("配送先電話番号")
22:   End If
23: End Sub
Page_Loadイベントのハンドラ・メソッドの処理
Page_Loadイベントのハンドラ・メソッド内に変数の初期化と、画面表示のためのコードを記述する。

 こちらもさまざまな情報を表示する関係で長いコードだが、コード内容そのものは単純なので、ブロックごとに解説していこう。

 3行目は、ユーザーが購入した商品の購入点数を表示するために、売上明細情報が格納されているセッション変数「Sbview」のCountプロパティを利用している。

 5行目〜9行目は、ユーザーが購入した商品の商品名を羅列して表示するためのコードだ。ループを回しながらセッション変数「Sbview」の中の情報を1つずつ取得している。9行目については、商品を羅列した末尾に余計なカンマが入るので、それを削除する処理だ。

 11行目〜16行目は、購入した商品の合計金額を表示するコードになっている。こちらもループを回しながら1件ずつ金額を加算していき、15行目で金額として表記されるように通貨型の書式を指定している。16行目は合計金額を後ほどデータベースに格納するために、セッション変数の中に格納しているだけだ。ここまでが、ユーザーに表示するための売上明細情報のデータを作成してセッション変数に格納する処理となっている。

 18行目〜21行目は、先ほどセッション変数に格納した売上伝票情報のデータを実際に表示する処理だ。それぞれの項目に対応する情報を、一時的に格納しておいたセッション変数「UDVIEW」から呼び出しているだけの単純な処理だ。今回作成している注文情報確認画面では、配送先に関する情報だけを表示するように設計しているので、顧客情報に関しては何も表示されないことになる。

 これで注文情報確認画面に必要な情報を表示できるようになった。ここまでの作業が完了したら一度デバッグを行って、入力された情報がきちんと表示されるかどうかを確認してみてほしい。正しくコーディングできていれば、売上明細と売上伝票にかかわる情報が表示されるはずだ。

 さて、注文情報確認画面の表示までは完了したが、ボタンのイベント処理を実装する前に、今回の処理で必要となるクッキーの利用について解説しよう。

ASP.NETでクッキー(Cookie)を利用する

 この連載を読んでいただいている方であれば、いまさら、クッキーの有効性について解説する必要はないだろうが、簡単に定義しておくと、「Webサイトを訪れたユーザーを識別するため」に用いられるのがクッキーであるといえるだろう。ユーザーのコンピュータの中にテキスト・ファイルとして情報を格納し、必要に応じてその情報を参照することで、ユーザーの識別を実現している。実はASP.NETのセッション変数などの機能も、基本的にはクッキーを暗黙的に利用することで実現されている。

 ここでクッキーを利用しようとしているのは、一度注文を行ったユーザーの顧客情報を登録しておくためだ。ショッピング・サイトにおいて、リピーターになってくれている顧客に対して、毎回情報を入力させるのでは利便性に欠ける。そこで、ユーザーの顧客IDをクッキーに登録し、同じユーザーからの注文の場合には顧客情報を自動的に埋めるような処理を実装しておく。

 ここではまず、ユーザーが既存顧客であるかどうかをクッキーの存在の有無で確かめ、既存顧客であれば埋め込む処理を先に構築する。注文情報入力画面であるREG.ASPXのコードビハインド・ファイルを開いて、Page_Loadイベントのハンドラ・メソッド内に以下のコードを追加してほしい。

01: Session("REPT") = "NO"
02: Dim Cookie As HttpCookie
03: If Request.Cookies("VSDEMO") Is Nothing = False Then
04:     Cookie = Request.Cookies("VSDEMO")
05:     Dim CID As Integer = Cookie.Values("CID")
06:     Dim CSET As New CUSET
07:     DC.FDCU(CSET)
08:     Dim C As CUSET.顧客Row = CSET.顧客.FindByID(CID)
09:     Name.Text = C.氏名
10:     YUBIN.Text = C.郵便番号
11:     TKEN.Text = C.都道府県
12:     TSIKU.Text = C.市区町村
13:     TADDR.Text = C.番地
14:     TEL.Text = C.電話番号
15:     EMAIL.Text = C.EMAIL
16:     Session("REPT") = "YES"
17: End If
クッキーを使って顧客情報を自動的に埋める処理
前回で作成した注文情報入力画面であるREG.ASPXのコードビハインド・ファイルで、Page_Loadイベントのコードとして、クッキーを確認して顧客情報を自動的に埋める処理を記述する。

 一見すると長いコードだが、後半部分はクッキーから取得した顧客情報をページ上のテキスト・ボックスに表示する処理なので、内容的には特に難しくはないだろう。コードの前半部分がクッキーを利用するための処理となっているので、そちらを重点的に解説する。

 1行目は、ユーザーがリピート顧客であるかどうかを保存しておくために利用するセッション変数「REPT」に初期値として“NO”を格納している。もしクッキーが存在していれば、ユーザーはリピート顧客だということになるので、16行目では“YES”を格納し直している。このセッション変数は後で注文情報確認画面において利用する。

 2行目では、クッキーの情報を取得・設定するために、HttpCookieクラスのインスタンスを、Cookieという名前で宣言している。ASP.NETではHttpCookieクラスを利用することで、容易に既存のクッキーの情報を取得したり、新しいクッキーを追加したりということが可能になっている。

 3行目の制御文が、実際にユーザーのコンピュータの中にクッキーがすでに格納されているかどうかを判定する処理となっている。HttpRequestクラスのCookiesプロパティを利用することで、ユーザーのコンピュータからサーバに送信されたクッキーの情報を取得することができる。

 ここでは、購入を行ったユーザーに対しては、「VSDEMO」という名前のクッキーを保存しておくという前提で、送信されたクッキーの中に「VSDEMO」というクッキーが存在しているかどうかを確認している。存在していなければ新規顧客だということになるので、それ以降の処理は行わない。

 4行目では、存在が確認できたクッキーを、HttpRequestクラスのCookiesプロパティを利用して取得し、2行目で生成したHttpCookieクラスのインスタンス「Cookie」に格納している。回りくどい処理に見えるかもしれないが、これはちょうどDataSetオブジェクトとDataRowオブジェクトの関係に近い。HttpRequestクラスのCookiesプロパティで取得できる情報は、送信されたすべてのクッキーが対象となるので、クッキーの中に実際に格納されている値の取得・設定には向いていないためだ。

 5行目で、格納したクッキー「VSDEMO」の中の値「CID」をHttpCookieクラスのプロパティValueを利用して取得し、変数「CID」に格納している。この「CID」という値は、既存顧客の顧客IDを格納する前提になっている。

 ここまでの処理でユーザーから送信されたクッキーの中から、顧客情報を特定するのに必要な情報は取得できたことになる。ASP.NETでクッキーの存在確認を行い、値を取得する場合のパターン的な処理であるので、覚えていただきたい。

 6行目〜15行目まではクッキーから取得した顧客IDを基にして、顧客情報を抽出し注文情報入力画面のそれぞれのテキスト・ボックスに対応する各項目を格納している。

 これでユーザーが既存顧客であった場合には、あらかじめ注文情報入力画面の各項目を自動的に埋める処理が実装できた。概念的にややこしいのだが、ユーザーが新規顧客だった場合に、新しいクッキーを追加する処理は、注文情報確認画面で[注文確定]ボタンが押された際のイベント内に実装する必要がある。その部分の解説はこの後で行うが、ここまででASP.NETでクッキーを利用する際の基本的な流れをつかんでもらえれば幸いである。

 続いて、注文情報確認画面で[注文確定]ボタンが押され、注文が確定した際の処理を実装していこう。


 INDEX
  実例で学ぶASP.NETプログラミング
  第13回 オートマチックな情報確認画面の構築
    1.注文情報確認画面のデザイン
    2.注文情報を一時的に格納する機能の実装
  3.画面表示とクッキー利用の実装
    4.注文確定処理の実装
    5.ASP.NETでのメール送信の実装

インデックス・ページヘ  「解説 :実例で学ぶASP.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間