-
Notifications
You must be signed in to change notification settings - Fork 55
Tutorial_ASPNET_VB.ja
2014年11月27日
本チュートリアルでの演習に沿ってサンプルプログラムを開発することで、Open 棟梁を用いた場合の開発の流れ・クラスの作成方法・各種定義ファイルの作成方法・ツールの使用方法・実行結果の確認方法等を習得することを目的としています。
Open 棟梁を用いた ASP.NET アプリケーション開発を検討している SE・開発者
本チュートリアルでは、Open 棟梁テンプレート・ベース (Visual Studio 2015 用) に付属のサンプルプログラムを題材とし、Open 棟梁を用いた場合の開発の流れを、順を追って説明します。
本ドキュメントに記載の会社名・商品名は、各社の商標または登録商標です。
本ドキュメントは、クリエイティブ・コモンズ CC BY 2.1 JP ライセンスの下で利用可能です。
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 アクセスクラスの作成方法を、順を追って説明します。
本チュートリアルでは、以下の環境を前提としています。
- 開発環境
- IDE
- Visual Studio 2015 (Express Edition も利用できます)
- アプリケーション フレームワーク
- Open 棟梁テンプレート・ベース (Visual Studio 2015 用)
- IDE
- 実行環境
- ランタイム
- .NET Framework 4.6
- Web サーバー
- IIS Express
- DB
- SQL Server Express 2008 R2
- ランタイム
- その他
- OS
- Windows 7
- 開発言語
- Visual Basic
- ブラウザ
- Internet Explorer 11
- OS
あらかじめ、マイクロソフトのサイトなどを参考に、Visual Studio をインストールしておいてください。
次に、Open 棟梁テンプレート・ベース、データベースをセットアップします。
-
GitHub で [Download ZIP] ボタンを押下して OpenTouryoTemplates.zip を入手し、これを解凍して Open 棟梁テンプレート・ベース (Visual Studio 2015 用) を取得します。
-
root_VS2015 フォルダにある Readme.md の手順に従って、Open 棟梁テンプレート・ベースとサンプルデータベースのセットアップを行います。
本チュートリアルでは、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 サンプルプログラムの画面遷移図
Open 棟梁を用いた開発の流れを、順を追って説明します。
-
C:\root\programs\C#\Samples\WebApp_sample\ProjectX_sample\ProjectX_sample.sln
を開きます。 -
Visual Studio が起動し、Open 棟梁テンプレート・ベース(Visual Studio 2015 用)に付属のサンプルプログラムが開かれていることを確認してください。
-
Visual Studio のソリューション エクスプローラーで
Aspx\Common
フォルダを選択し、ツールバーの「プロジェクト(P)」-「新しい項目の追加(W)」を選択します。 -
「Web フォームのマスター ページ」を選択し、
TouryoMaster.master
という名前の、新しいマスターページを追加します。 -
マスターページに、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>
-
TouryoMaster.master
を保存します。【注意】
ここで、TouryoMaster.master
を保存しておかないと、次項以降で Web フォームを作成する時に Visual Studio のデザイナでエラーが発生します。
-
Visual Studio のソリューション エクスプローラーで
Aspx\sample
フォルダを選択し、ツールバーの「プロジェクト(P)」-「新しい項目の追加(W)」を選択します。 -
「マスター ページを含む Web フォーム」を選択し、
OrdersList.aspx
という名前の、新しい Windows フォームを追加します。 -
マスターページの選択ダイアログで、
Aspx\Common\TouryoMaster.master
を選択して、「OK」ボタンをクリックします。 -
OrdersList.aspx
に、GridView コントロールを追加し、ID を gvwOrdersList とします。【注意】コントロール名のプレフィックス (”gvw” など) を適切に設定しないと、Open 棟梁からコントロールが正しく認識されません。(詳しくは Open 棟梁の利用ガイド (共通編) をご覧ください)
-
「GridViewタスク」メニューの「列の編集…」を選択します。
-
使用できるフィールドから「ButtonField」を選択して「追加」ボタンをクリックします。
-
ButtonField のプロパティを、以下のように設定します。
- ButtonType: Button
- Text: 選択
- 上記以外はデフォルトのまま
-
GridView に「選択」ボタンが追加されたことを確認します。
-
4.2.2 項と同じように、
Aspx\sample
フォルダ以下に、注文の詳細情報を表示する Web フォームを作成します。ここでは、フォームの名前はOrderDetails.aspx
としてください。 -
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: 修正内容を反映
- Label (上部)
-
Visual Studio のソリューション エクスプローラーで
Aspx\sample
フォルダを選択し、ツールバーの「プロジェクト(P)」-「既存項目の追加(W)」を選択します。 -
既存項目の追加ダイアログで、
C:\root\files\resource\Test\test.pdf
を選択し、「追加」ボタンをクリックします。 -
Aspx\sample
フォルダに、test.pdf
ファイルが追加されたことを確認します。
-
Visual Studio のソリューション エクスプローラーで、
Aspx\start\menu.aspx
ファイルを開きます。 -
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>
-
menu.aspx
のデザインビューで、追加したリンクボタンが表示されていることを確認します。
-
Visual Studio のソリューション エクスプローラーで、
app.config
ファイルを開きます。 -
FxScreenTransitionMode
の値をR
に修正する。<!-- 画面遷移方法を指定(T:Transfer、R:Redirect、off) --> <add key="FxScreenTransitionMode" value="R"/>
Open 棟梁で画面遷移を制御する場合、画面遷移を SCDefinition.xml
ファイルに定義します。
-
C:\root\files\resource\Xml\SCDefinition.xml
ファイルをメモ帳などで開きます。 -
menu.aspx
の定義を以下のように修正します。<Screen value="/ProjectX_sample/Aspx/start/menu.aspx" directLink="allow"> <!-- 注文情報一覧画面への遷移を定義 --> <Transition value="/ProjectX_sample/Aspx/sample/OrdersList.aspx" label="List"/> </Screen>
-
さらに、一覧画面・詳細画面を
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 棟梁の利用ガイド (各機能編) をご覧ください。
-
Visual Studio のソリューション エクスプローラーで
AppCode\sample\Common
フォルダを選択し、ツールバーの「プロジェクト(P)」-「クラスの追加(C)」を選択します。 -
OrderParameterValue.vb
という名前のクラスを追加します。 -
以下のコードを
OrderParameterValue.vb
に追加し、Open 棟梁が提供するクラスをインポートします。Imports Touryo.Infrastructure.Business.Util Imports Touryo.Infrastructure.Business.Common
-
OrderParameterValue
クラスの宣言部分を以下のように修正し、Open 棟梁の「引数親クラス 2」を継承させます。Public Class OrderParameterValue Inherits MyParameterValue
-
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
-
画面から業務ロジックに渡す値として、
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.1 項と同じように、
AppCode\sample\Common
フォルダに、OrderReturnValue.vb
という名前のクラスを追加します。 -
以下のコードを
OrderReturnValue.vb
に追加し、Open 棟梁が提供するクラスをインポートします。Imports Touryo.Infrastructure.Business.Common
-
OrderReturnValue
クラスの宣言部分を以下のように修正し、Open 棟梁の「戻り値親クラス 2」を継承させます。Public Class OrderReturnValue Inherits MyReturnValue
-
画面に返す値として、
OrderReturnValue
クラスに以下のフィールドを追加します。''' <summary>注文情報(サマリ)</summary> Public Orders As System.Data.DataTable ''' <summary>注文情報(明細)</summary> Public OrderDetails As System.Data.DataTable
テーブル・ビューに対する単純な CRUD 処理を行うデータアクセスクラス、SQL ファイルについては、Open 棟梁付属の D 層自動生成ツールで自動生成が可能です。
-
C:\root\programs\C#\Frameworks\DaoGen_Tool\bin\Debug\DaoGen_Tool.exe
を実行し、D 層自動生成ツールを起動します。 -
以下のように値を設定し、「取得」ボタンをクリックします。
- データプロバイダ: SQL Server Client
- 接続文字列: Data Source=localhost\SQLExpress;Initial Catalog=Northwind;Integrated Security=true;
- プルダウン: 概要情報
-
接続文字列等の情報に誤りがなければ、「DBMSのスキーマ情報の表示(概要情報)ダイアログ」が表示されます。
本ダイアログが表示されたことを確認し、「閉じる」ボタンをクリックして、ダイアログを閉じます。
-
「テーブル一覧の取得」ボタンをクリックします。
テーブル名称に関する注意を促すダイアログが表示されますが、「OK」ボタンをクリックして閉じてください。
-
Northwind データベース内のテーブル/ビューがリストに表示されます。本チュートリアルでは Orders テーブルと Order Details テーブルのみ使用しますので、Orders テーブル、Order Details テーブル以外を選択して、「削除」ボタンをクリックします。
-
リスト内の項目が、Orders テーブルと Order Details テーブルのみになったことを確認し、「ロード」ボタンをクリックします。
-
「D層定義情報を生成」ボタンが活性化されますので、出力エンコーディングとして「utf-8」を選択し、「D層定義情報を生成」ボタンをクリックします。
D 層定義情報ファイルの保存ダイアログが表示されますので、
C:\root\Info.vbv
にファイルを保存します。 -
D 層定義情報ファイルが正常に生成できたことを示すダイアログが表示されますので、「OK」ボタンをクリックして閉じます。
-
「STEP2へ遷移」ボタンをクリックします。
-
「ステップ2」画面が表示されますので、以下のように値を設定し、「プログラムを生成する」ボタンをクリックします。
- 言語: VB
- D 層定義情報ファイル: C:\root\Info.vbv
- ソーステンプレートフォルダ: C:\root\files\tools\DGenTemplates
- 出力ファイル: C:\root
- 上記以外はデフォルトのまま
-
Dao、SQL ファイルが正常に生成できたことを示すダイアログが表示されますので、「OK」ボタンをクリックして閉じます。
-
C:\root
フォルダ以下に、Dao ファイル、SQL ファイルが生成されていることを確認します。【注意】Open 棟梁では、SQL ファイルとして、拡張子が
.sql
のファイルと、.xml
のファイルがある。(詳しくは Open 棟梁の説明書をご覧ください) -
自動生成した Dao クラスをサンプルプログラムに含めるため、Visual Studio でサンプルプログラムを開き、
AppCode\sample\Dao
フォルダを選択し、ツールバーの「プロジェクト(P)」-「既存の項目の追加(G)」を選択します。 -
既存項目の追加ダイアログで、
C:\root\DaoOrders.vb
とC:\root\DaoOrder_Details.vb
ファイルを選択し、「追加(A)」ボタンをクリックします。 -
C:\root
フォルダ直下に生成された SQL ファイル・XML ファイルを、C:\root\files\resource\Sql
フォルダに移動します。 -
D 層自動生成ツールを終了します。
D 層自動生成ツールでは、単純な CRUD 処理を行う Dao クラスや SQL ファイルを生成できます。しかし、複数のテーブルを結合 (JOIN) させる SQL など、単純な CRUD 処理ではない SQL は、個別に作成する必要があります。
-
C:\root\files\resource\Sql
フォルダに、SelectOrders.sql
ファイルを作成します。 -
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
本チュートリアルでは、以下の 3 つの Dao クラスを使用します。
- DaoOrders
- Orders テーブルへのアクセス用
- DaoOrder_Details
- Order Details テーブルへのアクセス用
- CmnDao (Open 棟梁の共通 Dao)
- 4.5.2 項で作成した SQL ファイルを使用したアクセス用
これらの Dao クラスの呼び出しを制御し、業務ロジッククラス (B 層クラス) に対する窓口 (ファサード) となる、DAO 集約クラスを作成します。
-
Visual Studio のソリューション エクスプローラーで、
AppCode\sample\Dao
フォルダを選択し、ツールバーの「プロジェクト(P)」-「クラスの追加(C)」を選択します。 -
ConsolidatedLayerD.vb
という名前のクラスを追加します。 -
以下のコードを
ConsolidatedLayerD.vb
に追加し、Open 棟梁が提供するクラスをインポートします。' Open棟梁 Imports Touryo.Infrastructure.Business.Dao Imports Touryo.Infrastructure.Public.Db ' 引数・戻り値クラス Imports ProjectX_sample.AppCode.sample.Common
-
ConsolidatedLayerD クラスの宣言部分を以下のように修正し、Open 棟梁の「DAO 集約親クラス」を継承させます。
Public Class ConsolidatedLayerD Inherits BaseConsolidateDao
-
ConsolidatedLayerD クラスに、以下のようにコンストラクタを作成します。
Public Sub New(dam As BaseDam) MyBase.New(dam) End Sub
-
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
-
同様に、注文 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
-
同様に、画面で入力した注文情報を 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
-
Visual Studio のソリューション エクスプローラーで、
AppCode\sample\Business
フォルダを選択し、ツールバーの「プロジェクト(P)」-「クラスの追加(C)」を選択します。 -
OrdersLogic.vb
という名前のクラスを追加します。 -
以下のコードを
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
-
OrdersLogic クラス宣言部分を以下のように修正し、Open 棟梁の「業務親クラス 2」を継承させます。
Public Class OrdersLogic Inherits MyFcBaseLogic
-
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
メソッドに処理が振り分けられます。(後述)
-
Visual Studio のソリューション エクスプローラーで、
Aspx\Common\TouryoMaster.master.vb
ファイルを開きます。 -
以下のコードを
TouryoMaster.master.vb
に追加し、Open 棟梁の名前空間をインポートします。Imports Touryo.Infrastructure.Framework.Presentation
-
クラス宣言部分を以下のように修正し、Open 棟梁の「マスターページ親クラス」を継承させます。
Public Partial Class TouryoMaster Inherits BaseMasterController
【注意】
Open 棟梁は、マスターページ・コンテンツページ内のコントロール取得用のユーティリティメソッドを提供しています。この時、マスターページが「マスターページ親クラス」を継承していないと正常にコントロールを取得できなくなります。このため、このユーティリティ メソッドを利用する場合は、「マスターページ親クラス」を継承させる必要があります。(詳しくは Open 棟梁の利用ガイド (纏め者編) をご覧ください)
-
Visual Studio のソリューション エクスプローラーで、
Aspx\start\menu.aspx.vb
ファイルを開きます。 -
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 棟梁の利用ガイド (共通編) をご覧ください)
-
Visual Studio のソリューション エクスプローラーで、
Aspx\sample\OrdersList.aspx.vb
ファイルを開きます。 -
以下のコードを
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
-
クラス宣言部分を以下のように修正し、Open 棟梁の「画面親クラス 2」を継承させます。
Public Partial Class Aspx_sample_OrdersList Inherits MyBaseController
-
電球マークをクリックし、「抽象クラスの実装」を選択します。
-
自動生成された Page_Load メソッドを削除します。
-
画面ロード時に注文情報の一覧を取得するため、以下のように
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
-
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
-
Visual Studio のソリューション エクスプローラーで、
Aspx\sample\OrderDetails.aspx.vb
ファイルを開きます。 -
4.7.3 項と同じように、
OrderDetails.aspx.vb
についても、Open 棟梁の「画面親クラス 2」を継承させ、UOC_FormInit
メソッド、UOC_FormInit_PostBack
メソッドを作成します。 -
自動生成された
Page_Load
メソッドを削除します。 -
画面ロード時に 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
-
Visual Studio のソリューション エクスプローラーで、
Aspx\sample\OrderDetails.aspx
ファイルを開きます。 -
注文情報 (サマリ) を表示するための
gvwOrderSummary
コントロールを選択し、プロパティウィンドウの「イベント」アイコンをクリックします。 -
イベントの一覧から、
RowEditing
RowCancelingEdit
イベントをダブルクリックします。 -
OrderDetails.aspx.vb
にgvwOrderSummary_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 棟梁の利用ガイド (共通編) をご覧ください) -
注文情報 (サマリ) の修正内容を保存するためのメソッドを
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
-
同様に、注文情報 (明細) を表示するための 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
-
修正内容を 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
-
Visual Studio のソリューション エクスプローラーで、
web.config
ファイルを開きます。 -
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>
-
スタートメニューの「プログラムとファイルの検索」ボックスで
services.msc
を実行します。 -
サービス画面から「ASP.NET 状態サービス」を右クリックし、「開始」を選択します。
-
「ASP.NET 状態サービス」の状態が「開始」になったことを確認します。
-
スタートメニューの「プログラムとファイルの検索」ボックスで
inetcpl.cpl
を実行します。 -
インターネットのプロパティダイアログで、「セキュリティ」タブを選択します。表示されたゾーンの中で、「ローカル イントラネット」を選択し、「サイト」ボタンをクリックします。
-
ローカル イントラネットダイアログで、以下のように設定し、「OK」ボタンを押下クリックします。
- イントラネットのネットワークを自動的に検出する: チェックなし
- 上記以外: チェックあり
-
「OK」ボタンをクリックし、インターネット オプションダイアログを閉じます。
-
Visual Studio のソリューション エクスプローラーで、
Aspx\start\menu.aspx
を右クリックし、「スタート ページに設定」を選択します。 -
Visual Studio でサンプルプログラムをデバッグ実行します。
-
ブラウザが起動し、ログイン画面が表示されますので、以下のように値を入力し、「ログイン」ボタンを押下します。
- ユーザID: 空でない任意の文字列
- パスワード: 任意の文字列 (空でもよい)
-
メニュー画面が表示されるので、「注文情報の一覧を取得」リンクを押下します。
-
OrdersList.aspx
に遷移し、注文情報の一覧が表示されることを確認し、任意の行の「選択」ボタンを押下します。 -
OrderDetails.aspx
に遷移し、注文情報の詳細が表示されることを確認し、修正したい行の「編集」リンクをクリックします。 -
「編集」リンクをクリックした行が編集モードになりますので、任意の値に修正します。修正が完了したら、「更新」リンクをクリックして修正内容を保存します。
-
「修正内容を反映」ボタンを押下して、修正した内容を DB に反映させます。
-
以下のコマンドを実行し、修正した内容で 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=【選択した注文番号】"
-
「メニュー画面」リンクをクリックして、メニュー画面に戻ります。
-
「モーダルダイアログを表示」リンクをクリックします。
-
ダイアログ画面上で PDF ファイルが表示されることを確認し、ダイアログを閉じます。
-
ブラウザのアドレスバーに
http://localhost:9999/ProjectX_sample/Aspx/sample/OrdersList.aspx
と入力し、実行します。 -
Open 棟梁のエラーメッセージが表示されることを確認します。
【注意】
このエラーメッセージは、OrdersList.aspx
に対する Get メソッドでの画面遷移が許可されていないことを示している。これは、4.3.2 項で注文情報一覧画面・詳細画面をSCDefinitions.xml
に定義したとき、directLink=”deny”
と定義したためです。(詳しくは Open 棟梁の利用ガイド (各機能編) をご覧ください)
-
C:\root\files\resource\Log\ACCESS.yyyy-mm-dd.log
をメモ帳などで開きます。(yyyy-mm-dd には、実行日付が入ります) -
各画面へのアクセスがトレースログとして記録されていることを確認します。(以下はトレースログを抜粋したものです。
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
-
C:\root\files\resource\Log\SQLTRACE.yyyy-mm-dd.log
をメモ帳などで開きます。(yyyy-mm-dd には、実行日付が入ります) -
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,