Skip to content

Tutorial_ASPNET_VB.ja

daisuke nishino edited this page Oct 17, 2018 · 2 revisions

Open 棟梁チュートリアル (ASP.NET アプリケーション (VB) 編)

2014年11月27日

はじめに

本ドキュメントの目的

本チュートリアルでの演習に沿ってサンプルプログラムを開発することで、Open 棟梁を用いた場合の開発の流れ・クラスの作成方法・各種定義ファイルの作成方法・ツールの使用方法・実行結果の確認方法等を習得することを目的としています。

本ドキュメントの対象

Open 棟梁を用いた ASP.NET アプリケーション開発を検討している SE・開発者

本ドキュメントの概要

本チュートリアルでは、Open 棟梁テンプレート・ベース (Visual Studio 2015 用) に付属のサンプルプログラムを題材とし、Open 棟梁を用いた場合の開発の流れを、順を追って説明します。

他社所有名称に対する表示

本ドキュメントに記載の会社名・商品名は、各社の商標または登録商標です。

ライセンス

本ドキュメントは、クリエイティブ・コモンズ CC BY 2.1 JP ライセンスの下で利用可能です。

目次

1. Open棟梁の概要

2. 環境設定

3. 本チュートリアルでの演習課題について

4. 演習

1. Open棟梁の概要

Open 棟梁は、.NET 用のアプリケーションフレームワークです。Open 棟梁は、.NET Framework 4.6 以上を対象に、C/S(Windows Forms, WPF)、Web(ASP.NET)、RIA(Silverlight) など、さまざまなアプリケーションで利用できます。

Open棟梁のクラス構成図を図 1-1 に示します。

図 1-1 Open棟梁のクラス構成図

本チュートリアルでは、図 1-1 のクラス構成図に従い、開発者が実装する画面クラス・業務ロジッククラス・DB アクセスクラスの作成方法を、順を追って説明します。

2. 環境設定

本チュートリアルでは、以下の環境を前提としています。

  • 開発環境
    • IDE
      • Visual Studio 2015 (Express Edition も利用できます)
    • アプリケーション フレームワーク
      • Open 棟梁テンプレート・ベース (Visual Studio 2015 用)
  • 実行環境
    • ランタイム
      • .NET Framework 4.6
    • Web サーバー
      • IIS Express
    • DB
      • SQL Server Express 2008 R2
  • その他
    • OS
      • Windows 7
    • 開発言語
      • Visual Basic
    • ブラウザ
      • Internet Explorer 11

あらかじめ、マイクロソフトのサイトなどを参考に、Visual Studio をインストールしておいてください。

次に、Open 棟梁テンプレート・ベース、データベースをセットアップします。

  1. GitHub で [Download ZIP] ボタンを押下して OpenTouryoTemplates.zip を入手し、これを解凍して Open 棟梁テンプレート・ベース (Visual Studio 2015 用) を取得します。

  2. root_VS2015 フォルダにある Readme.md の手順に従って、Open 棟梁テンプレート・ベースとサンプルデータベースのセットアップを行います。

3. 本チュートリアルでの演習課題について

本チュートリアルでは、Open 棟梁テンプレート・ベースに付属のサンプルプログラムに、画面・ロジックを追加する形で演習を行っていきます。サンプルプログラムの構成を図 3-1 に、チュートリアルの画面遷移図を図 3-2 に示します。

図 3-1 サンプルプログラムの構成

本チュートリアルでは、DB アクセスクラス (DAO: Data Access Object) として、以下に示す 3 種類のクラスを作成します。各クラスの詳細については、Open 棟梁の利用ガイド(ベターユース、FAQ 編)をご覧ください。

DB アクセスクラス 説明
自動生成 DAO Open 棟梁付属の D 層自動生成ツールにより生成する DAO クラス。テーブル・ビューに対する単純な CRUD 処理を行う場合に利用する。
共通 DAO Open 棟梁提供の DAO クラス。複数テーブルを結合した結果を取得する場合など、D 層自動生成ツールで自動生成できない処理を行う場合に利用する。
DAO 集約クラス D 層部分のファサードクラス。1 トランザクションで複数 DAO クラスを利用する場合に、B 層からのリクエストを集約させる場合に利用する。

図 3-2 サンプルプログラムの画面遷移図

4. 演習

Open 棟梁を用いた開発の流れを、順を追って説明します。

4.1 Visual Studio の起動

  1. C:\root\programs\C#\Samples\WebApp_sample\ProjectX_sample\ProjectX_sample.sln を開きます。

  2. Visual Studio が起動し、Open 棟梁テンプレート・ベース(Visual Studio 2015 用)に付属のサンプルプログラムが開かれていることを確認してください。

4.2 P層(画面デザイン)の作成

4.2.1 マスターページの作成

  1. Visual Studio のソリューション エクスプローラーで Aspx\Common フォルダを選択し、ツールバーの「プロジェクト(P)」-「新しい項目の追加(W)」を選択します。

  2. 「Web フォームのマスター ページ」を選択し、TouryoMaster.master という名前の、新しいマスターページを追加します。

  3. マスターページに、Open 棟梁が使用する JavaScript、hidden タグを定義するために、Aspx\Common\TestBlankScreen.master を参考に、以下のようにマスターページを実装します。

    <%@ Master Language="VB" AutoEventWireup="true" CodeBehind="TouryoMaster.master.vb" Inherits="ProjectX_sample.Aspx.Common.TouryoMaster" %>
    
    <!-- All Rights Reserved, Copyright (C) 2007,2012 Hitachi Solutions,Ltd. -->
    <!DOCTYPE html>
    
    <html>
    <head id="Head1" runat="server">
        <title>無題のページ</title>
        <!--Uncomment below line when using jQuery-->
        <!--<script src="http://code.jquery.com/jquery-3.1.0.min.js"></script>-->
    
        <!--FxCode:add-start-->
        <script type="text/javascript" src="<%= this.ResolveClientUrl("~/Framework/js/common.js") %>"></script>
        <script type="text/javascript" src="<%= this.ResolveClientUrl("~/Framework/js/ie_key_event.js") %>"></script>
    
        <!-- Resolve URL in the javascript-->
        <script type="text/javascript">
                var baseUrl = "<%= ResolveUrl("~/") %>";
        </script>
    
        <!-- IE8をIE7互換モードで動作させる -->
        <!--meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /-->
    
        <link rel="stylesheet" href="<%= this.ResolveClientUrl("~/Css/style.css") %>" type="text/css"/>
        <!--FxCode:add-end-->
    </head>
    
    <!--FxCode:add-js-event-->
    <body onload="Fx_Document_OnLoad();" onunload="Fx_Document_OnClose();">
    
        <!-- オートコンプリートを指定 -->
        <form id="form1" runat="server" autocomplete="on">
            <!-- 共通ヘッダー -->
            <h1>Open 棟梁サンプル</h1>
    
            <!--SampleCode:add-start-->
    
            <a href="<%= this.ResolveUrl("~/Aspx/start/menu.aspx") %>">メニュー画面</a><br />
            <!--SampleCode:Contents-->
            <asp:contentplaceholder id="ContentPlaceHolder_A" runat="Server">
                    This is Default Content -- Override on Page
            </asp:contentplaceholder>
            <!--SampleCode:add-end-->
    
            <!--FxCode:add-start-->
            <asp:HiddenField ID="ChildScreenType" runat="server" Value="0" />
            <asp:HiddenField ID="ChildScreenUrl" runat="server" Value="0" />
            <asp:HiddenField ID="CloseFlag" runat="server" Value="0" />
            <asp:HiddenField ID="SubmitFlag" runat="server" Value="0" />
            <asp:HiddenField ID="ScreenGuid" runat="server" Value="0" />
            <asp:HiddenField ID="FxDialogStyle" runat="server" Value="0" />
            <asp:HiddenField ID="BusinessDialogStyle" runat="server" Value="0" />
            <asp:HiddenField ID="NormalScreenStyle" runat="server" Value="0" />
            <asp:HiddenField ID="NormalScreenTarget" runat="server" Value="0" />
            <asp:HiddenField ID="DialogFrameUrl" runat="server" Value="0" />
            <asp:HiddenField ID="WindowGuid" runat="server" Value="0" />
            <asp:HiddenField ID="RequestTicketGuid" runat="server" Value="0" />
            <!--FxCode:add-end-->
    
        </form>
    </body>
    </html>
  4. TouryoMaster.master を保存します。

    【注意】
    ここで、TouryoMaster.master を保存しておかないと、次項以降で Web フォームを作成する時に Visual Studio のデザイナでエラーが発生します。

4.2.2 注文情報一覧画面の作成

  1. Visual Studio のソリューション エクスプローラーで Aspx\sample フォルダを選択し、ツールバーの「プロジェクト(P)」-「新しい項目の追加(W)」を選択します。

  2. 「マスター ページを含む Web フォーム」を選択し、OrdersList.aspx という名前の、新しい Windows フォームを追加します。

  3. マスターページの選択ダイアログで、Aspx\Common\TouryoMaster.master を選択して、「OK」ボタンをクリックします。

  4. OrdersList.aspx に、GridView コントロールを追加し、ID を gvwOrdersList とします。

    【注意】コントロール名のプレフィックス (”gvw” など) を適切に設定しないと、Open 棟梁からコントロールが正しく認識されません。(詳しくは Open 棟梁の利用ガイド (共通編) をご覧ください)

  5. 「GridViewタスク」メニューの「列の編集…」を選択します。

  6. 使用できるフィールドから「ButtonField」を選択して「追加」ボタンをクリックします。

  7. ButtonField のプロパティを、以下のように設定します。

    • ButtonType: Button
    • Text: 選択
    • 上記以外はデフォルトのまま
  8. GridView に「選択」ボタンが追加されたことを確認します。

4.2.3 注文詳細情報画面の作成

  1. 4.2.2 項と同じように、Aspx\sample フォルダ以下に、注文の詳細情報を表示する Web フォームを作成します。ここでは、フォームの名前は OrderDetails.aspx としてください。

  2. OrderDetails.aspx に、以下の図のように Label コントロールを 2 つ、GridView コントロールを 2 つ、Button コントロールを 1 つ追加します。

    追加したコントロールには、それぞれ以下のようにプロパティを設定します。

    • Label (上部)
      • Text: 注文情報 (サマリ)
    • Label (下部)
      • Text: 注文情報 (明細)
    • GridView (上部)
      • ID: gvwOrderSummary
      • AutoGenerateEditButton: true
    • GridView (下部)
      • ID: gvwOrderDetails
      • AutoGenerateEditButton: true
    • Button
      • ID: btnUpdateOrder
      • Text: 修正内容を反映

4.2.4 ダイアログ画面に表示する PDF ファイルの設定

  1. Visual Studio のソリューション エクスプローラーで Aspx\sample フォルダを選択し、ツールバーの「プロジェクト(P)」-「既存項目の追加(W)」を選択します。

  2. 既存項目の追加ダイアログで、C:\root\files\resource\Test\test.pdf を選択し、「追加」ボタンをクリックします。

  3. Aspx\sample フォルダに、test.pdf ファイルが追加されたことを確認します。

4.2.5 メニュー画面の修正

  1. Visual Studio のソリューション エクスプローラーで、Aspx\start\menu.aspx ファイルを開きます。

  2. menu.aspx に以下のコードを挿入し、一覧画面に遷移させるための LinkButton (ID: lbnGetOrdersList)、ダイアログ画面を表示させるための LinkButton (ID: lbnShowDialog) をそれぞれ追加します。

    ・ チュートリアル<br />
      - <asp:LinkButton ID="lbnGetOrdersList" runat="server">注文情報の一覧を取得</asp:LinkButton>
    <br />
      - <asp:LinkButton ID="lbnShowDialog" runat="server">モーダルダイアログを表示</asp:LinkButton>
  3. menu.aspx のデザインビューで、追加したリンクボタンが表示されていることを確認します。

4.3 画面遷移に関する各種定義ファイルの設定

4.3.1 アプリケーション構成ファイル (app.config) の設定

  1. Visual Studio のソリューション エクスプローラーで、app.config ファイルを開きます。

  2. FxScreenTransitionMode の値を R に修正する。

    <!-- 画面遷移方法を指定(T:Transfer、R:Redirect、off) -->
    <add key="FxScreenTransitionMode" value="R"/>

4.3.2 画面遷移定義ファイル (SCDefinition.xml) の設定

Open 棟梁で画面遷移を制御する場合、画面遷移を SCDefinition.xml ファイルに定義します。

  1. C:\root\files\resource\Xml\SCDefinition.xml ファイルをメモ帳などで開きます。

  2. menu.aspx の定義を以下のように修正します。

    <Screen value="/ProjectX_sample/Aspx/start/menu.aspx" directLink="allow">
        <!-- 注文情報一覧画面への遷移を定義 -->
        <Transition value="/ProjectX_sample/Aspx/sample/OrdersList.aspx" label="List"/>
    </Screen>
  3. さらに、一覧画面・詳細画面を SCDefinition.xml に定義します。

    <!-- 注文情報一覧画面を定義 -->
    <Screen value="/ProjectX_sample/Aspx/sample/OrdersList.aspx" directLink="deny">
        <!-- 注文情報詳細画面への遷移を定義 -->
        <Transition value="/ProjectX_sample/Aspx/sample/OrderDetails.aspx" label="Detail"/>
    </Screen>
    
    <!-- 注文情報詳細画面を定義 -->
    <Screen value="/ProjectX_sample/Aspx/sample/OrderDetail.aspx" directLink="deny">
    </Screen>

    【注意】
    SCDefinition.xml の記述方法、および Open 棟梁の画面遷移機能の詳細については、Open 棟梁の利用ガイド (各機能編) をご覧ください。

4.4 引数クラス・戻り値クラスの作成

4.4.1 引数クラスの作成

  1. Visual Studio のソリューション エクスプローラーで AppCode\sample\Common フォルダを選択し、ツールバーの「プロジェクト(P)」-「クラスの追加(C)」を選択します。

  2. OrderParameterValue.vb という名前のクラスを追加します。

  3. 以下のコードを OrderParameterValue.vb に追加し、Open 棟梁が提供するクラスをインポートします。

    Imports Touryo.Infrastructure.Business.Util
    Imports Touryo.Infrastructure.Business.Common
  4. OrderParameterValue クラスの宣言部分を以下のように修正し、Open 棟梁の「引数親クラス 2」を継承させます。

    Public Class OrderParameterValue
            Inherits MyParameterValue
  5. OrderParameterValue クラスのコンストラクタを以下のように修正します。

    Public Sub New(screenId As String, controlId As String, methodName As String, actionType As String, user As MyUserInfo)
            MyBase.New(screenId, controlId, methodName, actionType, user)
    End Sub
  6. 画面から業務ロジックに渡す値として、OrderParameterValue クラスに以下のフィールドを追加します。

    ''' <summary>注文 ID</summary>
    Public OrderId As String
    ''' <summary>注文情報(サマリ)</summary>
    Public Orders As System.Data.DataTable
    ''' <summary>注文情報(明細)</summary>
    Public OrderDetails As System.Data.DataTable

4.4.2 戻り値クラスの作成

  1. 4.4.1 項と同じように、AppCode\sample\Common フォルダに、OrderReturnValue.vb という名前のクラスを追加します。

  2. 以下のコードを OrderReturnValue.vb に追加し、Open 棟梁が提供するクラスをインポートします。

    Imports Touryo.Infrastructure.Business.Common
  3. OrderReturnValue クラスの宣言部分を以下のように修正し、Open 棟梁の「戻り値親クラス 2」を継承させます。

    Public Class OrderReturnValue
        Inherits MyReturnValue
  4. 画面に返す値として、OrderReturnValue クラスに以下のフィールドを追加します。

    ''' <summary>注文情報(サマリ)</summary>
    Public Orders As System.Data.DataTable
    
    ''' <summary>注文情報(明細)</summary>
    Public OrderDetails As System.Data.DataTable

4.5 D 層の作成

4.5.1 ツールによる自動生成

テーブル・ビューに対する単純な CRUD 処理を行うデータアクセスクラス、SQL ファイルについては、Open 棟梁付属の D 層自動生成ツールで自動生成が可能です。

  1. C:\root\programs\C#\Frameworks\DaoGen_Tool\bin\Debug\DaoGen_Tool.exe を実行し、D 層自動生成ツールを起動します。

  2. 以下のように値を設定し、「取得」ボタンをクリックします。

    • データプロバイダ: SQL Server Client
    • 接続文字列: Data Source=localhost\SQLExpress;Initial Catalog=Northwind;Integrated Security=true;
    • プルダウン: 概要情報
  3. 接続文字列等の情報に誤りがなければ、「DBMSのスキーマ情報の表示(概要情報)ダイアログ」が表示されます。

    本ダイアログが表示されたことを確認し、「閉じる」ボタンをクリックして、ダイアログを閉じます。

  4. 「テーブル一覧の取得」ボタンをクリックします。

    テーブル名称に関する注意を促すダイアログが表示されますが、「OK」ボタンをクリックして閉じてください。

  5. Northwind データベース内のテーブル/ビューがリストに表示されます。本チュートリアルでは Orders テーブルと Order Details テーブルのみ使用しますので、Orders テーブル、Order Details テーブル以外を選択して、「削除」ボタンをクリックします。

  6. リスト内の項目が、Orders テーブルと Order Details テーブルのみになったことを確認し、「ロード」ボタンをクリックします。

  7. 「D層定義情報を生成」ボタンが活性化されますので、出力エンコーディングとして「utf-8」を選択し、「D層定義情報を生成」ボタンをクリックします。

    D 層定義情報ファイルの保存ダイアログが表示されますので、C:\root\Info.vbv にファイルを保存します。

  8. D 層定義情報ファイルが正常に生成できたことを示すダイアログが表示されますので、「OK」ボタンをクリックして閉じます。

  9. 「STEP2へ遷移」ボタンをクリックします。

  10. 「ステップ2」画面が表示されますので、以下のように値を設定し、「プログラムを生成する」ボタンをクリックします。

    • 言語: VB
    • D 層定義情報ファイル: C:\root\Info.vbv
    • ソーステンプレートフォルダ: C:\root\files\tools\DGenTemplates
    • 出力ファイル: C:\root
    • 上記以外はデフォルトのまま
  11. Dao、SQL ファイルが正常に生成できたことを示すダイアログが表示されますので、「OK」ボタンをクリックして閉じます。

  12. C:\root フォルダ以下に、Dao ファイル、SQL ファイルが生成されていることを確認します。

    【注意】Open 棟梁では、SQL ファイルとして、拡張子が .sql のファイルと、.xml のファイルがある。(詳しくは Open 棟梁の説明書をご覧ください)

  13. 自動生成した Dao クラスをサンプルプログラムに含めるため、Visual Studio でサンプルプログラムを開き、AppCode\sample\Dao フォルダを選択し、ツールバーの「プロジェクト(P)」-「既存の項目の追加(G)」を選択します。

  14. 既存項目の追加ダイアログで、C:\root\DaoOrders.vbC:\root\DaoOrder_Details.vb ファイルを選択し、「追加(A)」ボタンをクリックします。

  15. C:\root フォルダ直下に生成された SQL ファイル・XML ファイルを、C:\root\files\resource\Sql フォルダに移動します。

  16. D 層自動生成ツールを終了します。

4.5.2 SQL ファイルの作成

D 層自動生成ツールでは、単純な CRUD 処理を行う Dao クラスや SQL ファイルを生成できます。しかし、複数のテーブルを結合 (JOIN) させる SQL など、単純な CRUD 処理ではない SQL は、個別に作成する必要があります。

  1. C:\root\files\resource\Sql フォルダに、SelectOrders.sql ファイルを作成します。

  2. SelectOrders.sql に、以下の SQL 文を記述します。

    SELECT
        Orders.OrderID, Customers.CompanyName, Customers.ContactName, Employees.LastName As EmployeeLastName, Employees.FirstName As EmployeeFirstName, Orders.OrderDate
    FROM
        Orders
            INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
            INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID

4.5.3 DAO 集約クラスの作成

本チュートリアルでは、以下の 3 つの Dao クラスを使用します。

  • DaoOrders
    • Orders テーブルへのアクセス用
  • DaoOrder_Details
    • Order Details テーブルへのアクセス用
  • CmnDao (Open 棟梁の共通 Dao)
    • 4.5.2 項で作成した SQL ファイルを使用したアクセス用

これらの Dao クラスの呼び出しを制御し、業務ロジッククラス (B 層クラス) に対する窓口 (ファサード) となる、DAO 集約クラスを作成します。

  1. Visual Studio のソリューション エクスプローラーで、AppCode\sample\Dao フォルダを選択し、ツールバーの「プロジェクト(P)」-「クラスの追加(C)」を選択します。

  2. ConsolidatedLayerD.vb という名前のクラスを追加します。

  3. 以下のコードを ConsolidatedLayerD.vb に追加し、Open 棟梁が提供するクラスをインポートします。

    ' Open棟梁
    Imports Touryo.Infrastructure.Business.Dao
    Imports Touryo.Infrastructure.Public.Db
    
    ' 引数・戻り値クラス
    Imports ProjectX_sample.AppCode.sample.Common
  4. ConsolidatedLayerD クラスの宣言部分を以下のように修正し、Open 棟梁の「DAO 集約親クラス」を継承させます。

    Public Class ConsolidatedLayerD
        Inherits BaseConsolidateDao
  5. ConsolidatedLayerD クラスに、以下のようにコンストラクタを作成します。

    Public Sub New(dam As BaseDam)
        MyBase.New(dam)
    End Sub
  6. ConsolidatedLayerD クラスに、注文情報一覧を取得する GetOrders メソッドを作成します。

    Public Function GetOrders(orderParameter As OrderParameterValue) As OrderReturnValue
        ' 戻り値クラスを作成する
        Dim returnValue As New OrderReturnValue()
    
        ' 共通 DAO を作成する (SQL ファイルとして、4.5.2 項で作成したファイルを使用する)
        Dim dao As New CmnDao(Me.Dam)
        dao.SQLFileName = "SelectOrders.sql"
    
        ' 結果格納用の DataTable
        Dim table As New System.Data.DataTable()
    
        ' DB から注文情報一覧を取得し、DataTable に格納する
        dao.ExecSelectFill_DT(table)
    
        ' 戻り値クラスに注文情報一覧を格納し、B 層クラスに返す
        returnValue.Orders = table
        Return returnValue
    End Function
  7. 同様に、注文 ID をもとに、注文情報の詳細を取得する GetOrderById メソッドを作成します。

    Public Function GetOrderById(orderParameter As OrderParameterValue) As OrderReturnValue
        ' 戻り値クラスを作成する
        Dim returnValue As New OrderReturnValue()
    
        ' 自動生成した D 層クラスのインスタンスを生成する
        Dim orderDao As New DaoOrders(Me.Dam)
        Dim orderDetailsDao As New DaoOrder_Details(Me.Dam)
    
        ' 注文情報、注文詳細情報を格納するための DataTable
        Dim orderTable As New System.Data.DataTable()
        Dim orderDetailsTable As New System.Data.DataTable()
    
        ' パラメータを設定する
        orderDao.PK_OrderID = orderParameter.OrderId
        orderDetailsDao.PK_OrderID = orderParameter.OrderId
    
        ' 注文 ID をもとに注文情報を検索する
        orderDao.D2_Select(orderTable)
        orderDetailsDao.D2_Select(orderDetailsTable)
    
        ' 戻り値クラスに結果セットを格納し、B 層クラスに返す
        returnValue.Orders = orderTable
        returnValue.OrderDetails = orderDetailsTable
        Return returnValue
    End Function
  8. 同様に、画面で入力した注文情報を DB に反映する UpdateOrder メソッドを作成します。

    Public Function UpdateOrder(orderParameter As OrderParameterValue) As OrderReturnValue
        ' 戻り値クラスを作成する
        Dim returnValue As New OrderReturnValue()
    
        ' 自動生成した D 層クラスのインスタンスを生成する
        Dim orderDao As New DaoOrders(Me.Dam)
        Dim orderDetailsDao As New DaoOrder_Details(Me.Dam)
    
        ' 注文情報、注文詳細情報を格納するための DataTable
        Dim orderTable As System.Data.DataTable = orderParameter.Orders
        Dim orderDetailsTable As System.Data.DataTable = orderParameter.OrderDetails
    
        ' レコードの状態を確認し、修正されていたら DB を更新する
        If orderTable.Rows(0).RowState = System.Data.DataRowState.Modified Then
            ' 注文情報(サマリ)更新用のパタメータを設定する
            orderDao.PK_OrderID = orderTable.Rows(0)("OrderId")
            orderDao.Set_OrderDate_forUPD = orderTable.Rows(0)("OrderDate")
            orderDao.Set_RequiredDate_forUPD = orderTable.Rows(0)("RequiredDate")
            orderDao.Set_ShippedDate_forUPD = orderTable.Rows(0)("ShippedDate")
            orderDao.Set_ShipVia_forUPD = orderTable.Rows(0)("ShipVia")
            orderDao.Set_Freight_forUPD = orderTable.Rows(0)("Freight")
            orderDao.Set_ShipName_forUPD = orderTable.Rows(0)("ShipName")
            orderDao.Set_ShipAddress_forUPD = orderTable.Rows(0)("ShipAddress")
            orderDao.Set_ShipCity_forUPD = orderTable.Rows(0)("ShipCity")
            orderDao.Set_ShipRegion_forUPD = orderTable.Rows(0)("ShipRegion")
            orderDao.Set_ShipPostalCode_forUPD = orderTable.Rows(0)("ShipPostalCode")
            orderDao.Set_ShipCountry_forUPD = orderTable.Rows(0)("ShipCountry")
            ' 注文情報(サマリ)を更新する
            orderDao.D3_Update()
        End If
    
        For Each row As System.Data.DataRow In orderDetailsTable.Rows
            ' レコードの状態を確認し、修正されていたら DB を更新する
            If row.RowState = System.Data.DataRowState.Modified Then
                ' 注文情報(明細)更新用のパラメータを設定する
                orderDetailsDao.PK_OrderID = row("OrderId")
                orderDetailsDao.PK_ProductID = row("ProductId")
                orderDetailsDao.Set_UnitPrice_forUPD = row("UnitPrice")
                orderDetailsDao.Set_Quantity_forUPD = row("Quantity")
                orderDetailsDao.Set_Discount_forUPD = row("Discount")
    
                ' 注文情報(明細)を更新する
                orderDetailsDao.D3_Update()
            End If
        Next
        ' 戻り値クラスをB層クラスに返す(更新処理のため、戻り値はなし)
        Return returnValue
    End Function

4.6 B層の作成

  1. Visual Studio のソリューション エクスプローラーで、AppCode\sample\Business フォルダを選択し、ツールバーの「プロジェクト(P)」-「クラスの追加(C)」を選択します。

  2. OrdersLogic.vb という名前のクラスを追加します。

  3. 以下のコードを OrdersLogic.vb に追加し、Open 棟梁が提供するクラス、引数・戻り値クラス、D 層クラスをインポートします。

    ' 業務フレームワーク
    Imports Touryo.Infrastructure.Business.Business
    Imports Touryo.Infrastructure.Business.Common
    Imports Touryo.Infrastructure.Business.Dao
    Imports Touryo.Infrastructure.Business.Exceptions
    Imports Touryo.Infrastructure.Business.Presentation
    Imports Touryo.Infrastructure.Business.Util
    
    ' フレームワーク
    Imports Touryo.Infrastructure.Framework.Business
    Imports Touryo.Infrastructure.Framework.Common
    Imports Touryo.Infrastructure.Framework.Dao
    Imports Touryo.Infrastructure.Framework.Exceptions
    Imports Touryo.Infrastructure.Framework.Presentation
    Imports Touryo.Infrastructure.Framework.Util
    Imports Touryo.Infrastructure.Framework.Transmission
    
    ' 部品
    Imports Touryo.Infrastructure.Public.Db
    Imports Touryo.Infrastructure.Public.IO
    Imports Touryo.Infrastructure.Public.Log
    Imports Touryo.Infrastructure.Public.Str
    Imports Touryo.Infrastructure.Public.Util
    
    ' 引数・戻り値クラス
    Imports ProjectX_sample.AppCode.sample.Common
    
    ' DAO クラス
    Imports ProjectX_sample.AppCode.sample.Dao
  4. OrdersLogic クラス宣言部分を以下のように修正し、Open 棟梁の「業務親クラス 2」を継承させます。

    Public Class OrdersLogic
        Inherits MyFcBaseLogic
  5. OrdersLogic クラスに、注文情報一覧取得用の UOC_GetOrders メソッド・注文 ID をもとに注文情報の詳細を取得するための UOC_GetOrderById メソッド・注文情報更新用の UOC_UpdateOrder メソッドを作成します。ただし、DAO クラスの呼び出しは DAO 集約クラスが行いますので、B 層クラスは、P 層クラスと DAO 集約クラスの中継のみを行います。

    Private Sub UOC_GetOrders(orderParameter As OrderParameterValue)
        '    DAO 集約クラスを生成する
        Dim facade As New ConsolidatedLayerD(Me.GetDam())
    
        ' 注文情報一覧を取得する
        Dim returnValue As OrderReturnValue = facade.GetOrders(orderParameter)
    
        ' 戻り値クラスを返す
        Me.ReturnValue = returnValue
    End Sub
    
    Private Sub UOC_GetOrderById(orderParameter As OrderParameterValue)
        ' DAO 集約クラスを生成する
        Dim facade As New ConsolidatedLayerD(Me.GetDam())
    
        ' 注文情報の詳細を取得する
        Dim returnValue As OrderReturnValue = facade.GetOrderById(orderParameter)
    
        ' 戻り値クラスを返す
        Me.ReturnValue = returnValue
    End Sub
    
    Private Sub UOC_UpdateOrder(orderParameter As OrderParameterValue)
        ' DAO 集約クラスを生成する
        Dim facade As New ConsolidatedLayerD(Me.GetDam())
    
        ' 注文情報をDBに登録する
        Dim returnValue As OrderReturnValue = facade.UpdateOrder(orderParameter)
    
        ' 戻り値クラスを返す
        Me.ReturnValue = returnValue
    End Sub

    【注意】Open 棟梁の「業務親クラス 2」である MyFcBaseLogic クラスを継承した B 層クラスでは、P 層から呼び出されるメソッド名は UOC_xx (xx は任意) とする必要があります。P 層から ”xx” の部分をパラメータとして渡すことで、Open 棟梁により UOC_xx メソッドに処理が振り分けられます。(後述)

4.7 P層(画面コードクラス)の作成

4.7.1 マスターページの画面コードクラス (TouryoMaster.master.vb) の作成

  1. Visual Studio のソリューション エクスプローラーで、Aspx\Common\TouryoMaster.master.vb ファイルを開きます。

  2. 以下のコードを TouryoMaster.master.vb に追加し、Open 棟梁の名前空間をインポートします。

    Imports Touryo.Infrastructure.Framework.Presentation
  3. クラス宣言部分を以下のように修正し、Open 棟梁の「マスターページ親クラス」を継承させます。

    Public Partial Class TouryoMaster
        Inherits BaseMasterController

    【注意】
    Open 棟梁は、マスターページ・コンテンツページ内のコントロール取得用のユーティリティメソッドを提供しています。この時、マスターページが「マスターページ親クラス」を継承していないと正常にコントロールを取得できなくなります。このため、このユーティリティ メソッドを利用する場合は、「マスターページ親クラス」を継承させる必要があります。(詳しくは Open 棟梁の利用ガイド (纏め者編) をご覧ください)

4.7.2 メニュー画面の画面コードクラス (menu.aspx.vb) の作成

  1. Visual Studio のソリューション エクスプローラーで、Aspx\start\menu.aspx.vb ファイルを開きます。

  2. menu.aspx.vb に、4.2.5 項で追加した LinkButton の Click イベントに対するハンドラメソッドを追加します。

    Protected Function UOC_lbnGetOrdersList_Click(eventArgs As FxEventArgs) As String
        ' SCDefinitions.xml に定義したラベルをもとに画面遷移を行う
        Return "List"
    End Function
    
    Protected Function UOC_lbnShowDialog_Click(eventArgs As FxEventArgs) As String
        ' ダイアログを表示する
        Me.ShowNormalScreen("/ProjectX_sample/Aspx/sample/test.pdf")
    
        ' 空文字を返す
        Return String.Empty
    End Function

    【注意】
    Open 棟梁を用いた場合、Button などのコントロールへのイベントハンドラは、上述のように UOC_[コントロール名]_[イベント名] という名前のメソッドで定義します。(詳しくは Open 棟梁の利用ガイド (共通編) をご覧ください)

4.7.3 注文情報一覧画面の画面コードクラス (OrdersList.aspx.vb) の作成

  1. Visual Studio のソリューション エクスプローラーで、Aspx\sample\OrdersList.aspx.vb ファイルを開きます。

  2. 以下のコードを OrdersList.aspx.vb に追加し、Open 棟梁の名前空間をインポートします。

    ' 業務フレームワーク
    Imports Touryo.Infrastructure.Business.Business
    Imports Touryo.Infrastructure.Business.Common
    Imports Touryo.Infrastructure.Business.Dao
    Imports Touryo.Infrastructure.Business.Exceptions
    Imports Touryo.Infrastructure.Business.Presentation
    Imports Touryo.Infrastructure.Business.Util
    
    ' フレームワーク
    Imports Touryo.Infrastructure.Framework.Business
    Imports Touryo.Infrastructure.Framework.Common
    Imports Touryo.Infrastructure.Framework.Dao
    Imports Touryo.Infrastructure.Framework.Exceptions
    Imports Touryo.Infrastructure.Framework.Presentation
    Imports Touryo.Infrastructure.Framework.Util
    Imports Touryo.Infrastructure.Framework.Transmission
    
    ' 部品
    Imports Touryo.Infrastructure.Public.Db
    Imports Touryo.Infrastructure.Public.IO
    Imports Touryo.Infrastructure.Public.Log
    Imports Touryo.Infrastructure.Public.Str
    Imports Touryo.Infrastructure.Public.Util
    
    ' B 層クラス
    Imports ProjectX_sample.AppCode.sample.Business
    
    ' 引数・戻り値クラス
    Imports ProjectX_sample.AppCode.sample.Common
  3. クラス宣言部分を以下のように修正し、Open 棟梁の「画面親クラス 2」を継承させます。

    Public Partial Class Aspx_sample_OrdersList
        Inherits MyBaseController
  4. 電球マークをクリックし、「抽象クラスの実装」を選択します。

  5. 自動生成された Page_Load メソッドを削除します。

  6. 画面ロード時に注文情報の一覧を取得するため、以下のように UOC_FormInit メソッドをオーバーライドします。なお、ポストバック時の処理はないため、UOC_FormInit_PostBack メソッドから throw new NotImplementedException(); を削除し、空の状態にする。

    Protected Overrides Sub UOC_FormInit()
        ' 引数クラスを生成
        ' (F層クラスでUOC_GetOrdersメソッドを呼び出すように、パラメータとして"GetOrders"を渡す)
        Dim param As New OrderParameterValue(Me.ContentPageFileNoEx, "", "GetOrders", "SQL", Me.UserInfo)
    
        ' 戻り値クラスを生成
        Dim returnValue As OrderReturnValue
    
        ' B層呼出し
        Dim logic As new OrdersLogic()
        returnValue = DirectCast(logic.DoBusinessLogic(param), OrderReturnValue)
    
        ' 結果をGridViewに表示
        Me.gvwOrdersList.DataSource = returnValue.Orders
        Me.gvwOrdersList.DataBind()
    End Sub
    
    Protected Overrides Sub UOC_FormInit_PostBack()
    End Sub
  7. GridView の各行のボタンをクリックしたときに、注文情報詳細画面に遷移するためのメソッドを OrdersList.aspx.vb に追加する。

    Protected Function UOC_gvwOrdersList_RowCommand(eventArgs As FxEventArgs) As String
        ' 選択された行のインデックスを取得する
        Dim RowIndex As Integer = Integer.Parse(eventArgs.PostBackValue)
    
        ' GridViewから、選択された行のOrderIdを取得する
        Dim orderId As String = Me.gvwOrdersList.Rows(RowIndex).Cells(1).Text
    
        ' OrderIdをセッションに格納する
        Session("OrderId") = OrderId
    
        ' SCDefinitions.xml に定義したラベルをもとに画面遷移を行う
        Return "Detail"
    End Function

4.7.4 注文情報詳細画面の画面コードクラス (OrderDetails.aspx.vb) の作成

  1. Visual Studio のソリューション エクスプローラーで、Aspx\sample\OrderDetails.aspx.vb ファイルを開きます。

  2. 4.7.3 項と同じように、OrderDetails.aspx.vb についても、Open 棟梁の「画面親クラス 2」を継承させ、UOC_FormInit メソッド、UOC_FormInit_PostBack メソッドを作成します。

  3. 自動生成された Page_Load メソッドを削除します。

  4. 画面ロード時に OrderId を元に注文の詳細情報を取得するよう、以下のように UOC_FormInit メソッドをオーバーライドします。なお、ポストバック時の処理はないため、UOC_FormInit_PostBack メソッドから throw new NotImplementedException(); を削除し、空の状態にします。

    Protected Overrides Sub UOC_FormInit()
        ' セッションから、OrderIdの値を取得
        Dim OrderId As String = Session("OrderId").ToString()
    
        ' 引数クラスを生成
        ' (F層クラスでUOC_GetOrderByIdメソッドを呼び出すように、パラメータとして"GetOrderById"を渡す)
        Dim param As New OrderParameterValue(Me.ContentPageFileNoEx, "", "GetOrderById", "SQL", Me.UserInfo)
    
        ' 検索条件としてOrderIdを渡す
        param.OrderId = OrderId
    
        ' 戻り値クラスを生成
        Dim returnValue As OrderReturnValue
    
        ' B層呼出し
        Dim logic As New OrdersLogic()
        returnValue = DirectCast(logic.DoBusinessLogic(param), OrderReturnValue)
    
        ' 注文情報をセッションに格納する
        Session("Orders") = returnValue.Orders
        Session("OrderDetails") = returnValue.OrderDetails
    
        ' 結果をグリッドに表示
        Me.gvwOrderSummary.DataSource = returnValue.Orders
        Me.gvwOrderSummary.DataBind()
        Me.gvwOrderDetails.DataSource = returnValue.OrderDetails
        Me.gvwOrderDetails.DataBind()
    End Sub
    
    Protected Overrides Sub UOC_FormInit_PostBack()
    End Sub
  5. Visual Studio のソリューション エクスプローラーで、Aspx\sample\OrderDetails.aspx ファイルを開きます。

  6. 注文情報 (サマリ) を表示するための gvwOrderSummary コントロールを選択し、プロパティウィンドウの「イベント」アイコンをクリックします。

  7. イベントの一覧から、RowEditing RowCancelingEdit イベントをダブルクリックします。

  8. OrderDetails.aspx.vbgvwOrderSummary_RowEditing メソッド、gvwOrderSummary_RowCancelingEdit メソッドが生成されますので、以下のように実装します。

    Protected Sub gvwOrderSummary_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvwOrderSummary.RowEditing
        ' 注文情報(サマリ)を編集モードに切り替える
        Me.gvwOrderSummary.EditIndex = e.NewEditIndex
        Me.gvwOrderSummary.DataSource = DirectCast(Session("Orders"), System.Data.DataTable)
        Me.gvwOrderSummary.DataBind()
    
        ' 主キー、外部キー列は編集不可とする
        DirectCast(Me.gvwOrderSummary.Rows(e.NewEditIndex).Cells(1).Controls(0), TextBox).Enabled = False
        DirectCast(Me.gvwOrderSummary.Rows(e.NewEditIndex).Cells(2).Controls(0), TextBox).Enabled = False
        DirectCast(Me.gvwOrderSummary.Rows(e.NewEditIndex).Cells(3).Controls(0), TextBox).Enabled = False
    End Sub
    
    Protected Sub gvwOrderSummary_RowCancelingEdit(sender As Object, e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles gvwOrderSummary.RowCancelingEdit
        ' 注文情報(サマリ)を読み取り専用モードに切り替える
        Me.gvwOrderSummary.EditIndex = -1
        Me.gvwOrderSummary.DataSource = DirectCast(Session("Orders"), System.Data.DataTable)
        Me.gvwOrderSummary.DataBind()
    End Sub

    【注意】
    Open 棟梁の P 層イベント処理機能は、GridView コントロールの RowEditing イベント、RowCancelingEdit イベントをサポートしていません。このため、これらのイベントについては、.NET 標準のイベントハンドラ機能を使用します。この時、Open 棟梁によるフロー制御機能 (イベント前処理・後処理制御、例外処理制御) が利用できません。これらのイベントについても、Open 棟梁のフロー制御機能を利用したい場合は、「画面親クラス 1」または「画面親クラス 2」のカスタマイズが必要になります。(詳しくは Open 棟梁の利用ガイド (共通編) をご覧ください)

  9. 注文情報 (サマリ) の修正内容を保存するためのメソッドを OrderDetails.aspx.vb に追加します。

    Protected Function UOC_gvwOrderSummary_RowUpdating(eventArgs As FxEventArgs, e As GridViewUpdateEventArgs) As String
        ' 注文情報(サマリ)の修正内容を保存する
        Dim orders As System.Data.DataTable = DirectCast(Session("Orders"), System.Data.DataTable)
        For Each key As String In e.NewValues.Keys
                Orders.Rows(0)(key) = e.NewValues(key)
        Next
    
        ' 注文情報(サマリ)を読み取り専用モードに切り替える
        Me.gvwOrderSummary.EditIndex = -1
        Me.gvwOrderSummary.DataSource = DirectCast(Session("Orders"), System.Data.DataTable)
        Me.gvwOrderSummary.DataBind()
    
        ' 空文字を返す (画面遷移しない)
        Return String.Empty
    End Function
  10. 同様に、注文情報 (明細) を表示するための gvwOrderDetails コントロールについても、RowEditing イベント、RowCancelingEdit イベント、UOC_gvwOrderDetails_RowUpdating メソッドを追加し、それぞれ以下のように実装します。

    Protected Sub gvwOrderDetails_RowEditing(sender As object, e As GridViewEditEventArgs)
        ' 注文情報(明細)を編集モードに切り替える
        Me.gvwOrderDetails.EditIndex = e.NewEditIndex
        Me.gvwOrderDetails.DataSource = DirectCast(Session("OrderDetails"), System.Data.DataTable)
        Me.gvwOrderDetails.DataBind()
    
        ' 主キー、外部キー列は編集不可とする
        DirectCast(Me.gvwOrderDetails.Rows(e.NewEditIndex).Cells(1).Controls(0),TextBox).Enabled = false
        DirectCast(Me.gvwOrderDetails.Rows(e.NewEditIndex).Cells(2).Controls(0),TextBox).Enabled = false
    End Sub
    
    Protected Sub gvwOrderDetails_RowCancelingEdit(sender As Object sender, e As GridViewCancelEditEventArgs)
        ' 注文情報(明細)を読み取り専用モードに切り替える
        Me.gvwOrderDetails.EditIndex = -1
        Me.gvwOrderDetails.DataSource = DirectCast(Session("OrderDetails"), System.Data.DataTable)
        Me.gvwOrderDetails.DataBind()
    End Sub
    
    Protected Function UOC_gvwOrderDetails_RowUpdating(eventArgs As FxEventArgs, e As GridViewUpdateEventArgs) As String
        ' 編集した値で注文情報(サマリ)を更新する
        Dim OrderDetails As System.Data.DataTable = DirectCast(Session("OrderDetails"), System.Data.DataTable)
        For Each key As String In e.NewValues.Keys
            OrderDetails.Rows(e.RowIndex)(key) = e.NewValues(key)
        Next
    
        ' 注文情報(明細)を読み取り専用モードに切り替える
        Me.gvwOrderDetails.EditIndex = -1
        Me.gvwOrderDetails.DataSource = DirectCast(Session("OrderDetails"), System.Data.DataTable)
        Me.gvwOrderDetails.DataBind()
    
        ' 空文字を返す (画面遷移しない)
        Return String.Empty
    End Function
  11. 修正内容を DB に反映させるためのメソッドを OrderDetails.aspx.vb に追加する。

    Protected Function UOC_btnUpdateOrder_Click(eventArgs As FxEventArgs) As String
        ' グリッドの値をセッションから取得する
        Dim orderTable As System.Data.DataTable = DirectCast(Session("Orders"), System.Data.DataTable)
        Dim orderDetailTable As System.Data.DataTable = DirectCast(Session("OrderDetails"), System.Data.DataTable)
        ' 引数クラスを生成
        Dim param As New OrderParameterValue(Me.Title, "", "UpdateOrder", "SQL", Me.UserInfo)
    
        ' 業務ロジックに引数としてグリッドの値を渡す
        param.Orders = orderTable
        param.OrderDetails = orderDetailTable
    
        ' 戻り値クラスを生成
        Dim returnValue As OrderReturnValue
    
        ' B層呼出し
        Dim logic As New OrdersLogic()
        returnValue = DirectCast(logic.DoBusinessLogic(param), OrderReturnValue)
    
        ' 空文字を返す (画面遷移しない)
        Return String.Empty
    End Function

4.8 その他

4.8.1 アプリケーション構成ファイル (Web.config) の設定内容の確認

  1. Visual Studio のソリューション エクスプローラーで、web.config ファイルを開きます。

  2. connectionStrings セクションを確認し、"ConnectionString_SQL" という名前の接続文字列設定が、Northwind データベースを指していることを確認します。

    <connectionStrings>
        <!-- SQL Server / SQL Client用 -->
        <add name="ConnectionString_SQL" connectionString="Data Source=localhost\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;"/>
    </connectionStrings>

4.9 動作確認

4.9.1 ASP.NET 状態サービスの開始

  1. スタートメニューの「プログラムとファイルの検索」ボックスで services.msc を実行します。

  2. サービス画面から「ASP.NET 状態サービス」を右クリックし、「開始」を選択します。

  3. 「ASP.NET 状態サービス」の状態が「開始」になったことを確認します。

4.9.2 イントラネット セキュリティ設定の変更

  1. スタートメニューの「プログラムとファイルの検索」ボックスで inetcpl.cpl を実行します。

  2. インターネットのプロパティダイアログで、「セキュリティ」タブを選択します。表示されたゾーンの中で、「ローカル イントラネット」を選択し、「サイト」ボタンをクリックします。

  3. ローカル イントラネットダイアログで、以下のように設定し、「OK」ボタンを押下クリックします。

    • イントラネットのネットワークを自動的に検出する: チェックなし
    • 上記以外: チェックあり
  4. 「OK」ボタンをクリックし、インターネット オプションダイアログを閉じます。

4.9.3 Visual Studio によるデバッグ実行

  1. Visual Studio のソリューション エクスプローラーで、Aspx\start\menu.aspx を右クリックし、「スタート ページに設定」を選択します。

  2. Visual Studio でサンプルプログラムをデバッグ実行します。

  3. ブラウザが起動し、ログイン画面が表示されますので、以下のように値を入力し、「ログイン」ボタンを押下します。

    • ユーザID: 空でない任意の文字列
    • パスワード: 任意の文字列 (空でもよい)
  4. メニュー画面が表示されるので、「注文情報の一覧を取得」リンクを押下します。

  5. OrdersList.aspx に遷移し、注文情報の一覧が表示されることを確認し、任意の行の「選択」ボタンを押下します。

  6. OrderDetails.aspx に遷移し、注文情報の詳細が表示されることを確認し、修正したい行の「編集」リンクをクリックします。

  7. 「編集」リンクをクリックした行が編集モードになりますので、任意の値に修正します。修正が完了したら、「更新」リンクをクリックして修正内容を保存します。

  8. 「修正内容を反映」ボタンを押下して、修正した内容を DB に反映させます。

  9. 以下のコマンドを実行し、修正した内容で DB の値が更新されていることを確認します。なお、以下のコマンドの中で【選択した注文番号】の箇所は、先ほど選択した注文番号 (OrderID) に置き換えてください。

    "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S localhost\SQLExpress -E -d Northwind -Q "Select * From Orders Inner Join [Order Details] On Orders.OrderId=[Order Details].OrderId Where Orders.OrderId=【選択した注文番号】"
  10. 「メニュー画面」リンクをクリックして、メニュー画面に戻ります。

  11. 「モーダルダイアログを表示」リンクをクリックします。

  12. ダイアログ画面上で PDF ファイルが表示されることを確認し、ダイアログを閉じます。

  13. ブラウザのアドレスバーに http://localhost:9999/ProjectX_sample/Aspx/sample/OrdersList.aspx と入力し、実行します。

  14. Open 棟梁のエラーメッセージが表示されることを確認します。

    【注意】
    このエラーメッセージは、OrdersList.aspx に対する Get メソッドでの画面遷移が許可されていないことを示している。これは、4.3.2 項で注文情報一覧画面・詳細画面を SCDefinitions.xml に定義したとき、directLink=”deny” と定義したためです。(詳しくは Open 棟梁の利用ガイド (各機能編) をご覧ください)

4.9.4 トレースログの確認

  1. C:\root\files\resource\Log\ACCESS.yyyy-mm-dd.log をメモ帳などで開きます。(yyyy-mm-dd には、実行日付が入ります)

  2. 各画面へのアクセスがトレースログとして記録されていることを確認します。(以下はトレースログを抜粋したものです。OrderList 画面、OrderDetails 画面がそれぞれトレースされていることが分かります)

    [2017/04/10 11:36:32,663],[DEBUG],[5],,-,127.0.0.1,-----↓,Global.asax,Application_OnPreRequest
    [2017/04/10 11:36:32,664],[INFO ],[5],,user01,127.0.0.1,init,OrdersList
    [2017/04/10 11:36:32,670],[INFO ],[5],,user01,127.0.0.1,----->>,OrdersList,,GetOrders,
    [2017/04/10 11:36:32,892],[INFO ],[5],,user01,127.0.0.1,<<-----,OrdersList,,GetOrders,,221,0
    [2017/04/10 11:36:32,935],[DEBUG],[5],,-,127.0.0.1,-----↑,Global.asax,Application_OnPostRequest,-,-,271,63
    [2017/04/10 11:36:46,756],[DEBUG],[18],,-,127.0.0.1,-----↓,Global.asax,Application_OnPreRequest
    [2017/04/10 11:36:46,814],[INFO ],[18],,user01,127.0.0.1,postback,OrdersList
    [2017/04/10 11:36:46,815],[INFO ],[18],,user01,127.0.0.1,----->,OrdersList,gvwOrdersList
    [2017/04/10 11:36:46,816],[INFO ],[18],,user01,127.0.0.1,<-----,OrdersList,gvwOrdersList,,1,0
    [2017/04/10 11:36:46,912],[DEBUG],[17],,-,127.0.0.1,-----↓,Global.asax,Application_OnPreRequest
    [2017/04/10 11:36:46,914],[INFO ],[17],,user01,127.0.0.1,init,OrderDetails
    [2017/04/10 11:36:46,914],[INFO ],[17],,user01,127.0.0.1,----->>,OrderDetails,,GetOrderById,
    [2017/04/10 11:36:47,044],[INFO ],[17],,user01,127.0.0.1,<<-----,OrderDetails,,GetOrderById,,129,0
    [2017/04/10 11:36:47,055],[DEBUG],[17],,-,127.0.0.1,-----↑,Global.asax,Application_OnPostRequest,-,-,142,0
    [2017/04/10 11:36:50,343],[DEBUG],[5],,-,127.0.0.1,-----↓,Global.asax,Application_OnPreRequest
    [2017/04/10 11:36:50,344],[INFO ],[5],,user01,127.0.0.1,postback,OrderDetails
    [2017/04/10 11:36:50,345],[INFO ],[5],,user01,127.0.0.1,----->,OrderDetails,gvwOrderDetails
    [2017/04/10 11:36:50,345],[INFO ],[5],,user01,127.0.0.1,<-----,OrderDetails,gvwOrderDetails,,0,0
    [2017/04/10 11:36:50,350],[DEBUG],[5],,-,127.0.0.1,-----↑,Global.asax,Application_OnPostRequest,-,-,4,0
    [2017/04/10 11:36:55,690],[DEBUG],[5],,-,127.0.0.1,-----↓,Global.asax,Application_OnPreRequest
    [2017/04/10 11:36:55,692],[INFO ],[5],,user01,127.0.0.1,postback,OrderDetails
    [2017/04/10 11:36:55,693],[INFO ],[5],,user01,127.0.0.1,----->,OrderDetails,gvwOrderDetails
    [2017/04/10 11:36:55,693],[INFO ],[5],,user01,127.0.0.1,<-----,OrderDetails,gvwOrderDetails,,0,0
    [2017/04/10 11:36:55,693],[INFO ],[5],,user01,127.0.0.1,----->,OrderDetails,gvwOrderDetails
    [2017/04/10 11:36:55,694],[INFO ],[5],,user01,127.0.0.1,<-----,OrderDetails,gvwOrderDetails,,1,0
    [2017/04/10 11:36:55,695],[DEBUG],[5],,-,127.0.0.1,-----↑,Global.asax,Application_OnPostRequest,-,-,4,0
    [2017/04/10 11:36:57,281],[DEBUG],[9],,-,127.0.0.1,-----↓,Global.asax,Application_OnPreRequest
    [2017/04/10 11:36:57,283],[INFO ],[9],,user01,127.0.0.1,postback,OrderDetails
    [2017/04/10 11:36:57,283],[INFO ],[9],,user01,127.0.0.1,----->,OrderDetails,btnUpdateOrder
    [2017/04/10 11:36:57,286],[INFO ],[9],,user01,127.0.0.1,----->>,,,UpdateOrder,
    [2017/04/10 11:36:57,362],[INFO ],[9],,user01,127.0.0.1,<<-----,,,UpdateOrder,,76,16
    [2017/04/10 11:36:57,372],[INFO ],[9],,user01,127.0.0.1,<-----,OrderDetails,btnUpdateOrder,,88,16
    [2017/04/10 11:36:57,373],[DEBUG],[9],,-,127.0.0.1,-----↑,Global.asax,Application_OnPostRequest,-,-,91,16
  3. C:\root\files\resource\Log\SQLTRACE.yyyy-mm-dd.log をメモ帳などで開きます。(yyyy-mm-dd には、実行日付が入ります)

  4. Orders テーブル・Order Details テーブルに対する SQL 文がトレースとして記録されていることを確認します。(以下は SQL トレースログから、SELECT 文の実行ログを抜粋したものです)

    [2017/04/10 11:36:32,892],[INFO ],[5],19,0,[commandText]:SELECT Orders.OrderID, Customers.CompanyName, Customers.ContactName, Employees.LastName As EmployeeLastName, Employees.FirstName As EmployeeFirstName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID    [commandParameter]:
    [2017/04/10 11:36:46,983],[INFO ],[17],3,0,[commandText]: -- DaoOrders_D2_Select -- 2012/8/6 日立 太郎 SELECT [OrderID], [CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight], [ShipName], [ShipAddress], [ShipCity], [ShipRegion], [ShipPostalCode], [ShipCountry] FROM [Orders] WHERE [OrderID] = @OrderID    [commandParameter]:OrderID=10248,
    [2017/04/10 11:36:47,043],[INFO ],[17],1,0,[commandText]: -- DaoOrder_Details_D2_Select -- 2012/8/6 日立 太郎 SELECT [OrderID], [ProductID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE [OrderID] = @OrderID    [commandParameter]:OrderID=10248,
Clone this wiki locally