Tutorial_ASPNET_CSharp.ja - OpenTouryoProject/OpenTouryo GitHub Wiki

Open 棟梁チュヌトリアル (ASP.NET アプリケヌション (C#) ç·š)

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
    • 開発蚀語
      • C#
    • ブラりザ
      • 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\WebForms_Sample\WebForms_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="C#" AutoEventWireup="true" CodeBehind="TouryoMaster.master.cs" Inherits="WebForms_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="/WebForms_Sample/Aspx/start/menu.aspx" directLink="allow">
        <!-- 泚文情報䞀芧画面ぞの遷移を定矩 -->
        <Transition value="/WebForms_Sample/Aspx/sample/OrdersList.aspx" label="List"/>
    </Screen>
  3. さらに、䞀芧画面・詳现画面を SCDefinition.xml に定矩したす。

    <!-- 泚文情報䞀芧画面を定矩 -->
    <Screen value="/WebForms_Sample/Aspx/sample/OrdersList.aspx" directLink="deny">
        <!-- 泚文情報詳现画面ぞの遷移を定矩 -->
        <Transition value="/WebForms_Sample/Aspx/sample/OrderDetails.aspx" label="Detail"/>
    </Screen>
    
    <!-- 泚文情報詳现画面を定矩 -->
    <Screen value="/WebForms_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.cs ずいう名前のクラスを远加したす。

  3. 以䞋のコヌドを OrderParameterValue.cs に远加し、Open 棟梁が提䟛するクラスをむンポヌトしたす。

    using Touryo.Infrastructure.Business.Util;
    using Touryo.Infrastructure.Business.Common;
  4. OrderParameterValue クラスの宣蚀郚分を以䞋のように修正し、Open 棟梁の「匕数芪クラス 2」を継承させたす。

    public class OrderParameterValue : MyParameterValue
  5. OrderParameterValue クラスのコンストラクタを以䞋のように修正したす。

    public OrderParameterValue(string screenId, string controlId, string methodName, string actionType, MyUserInfo user) : base(screenId, controlId, methodName, actionType, user)
    {
    }
  6. 画面から業務ロゞックに枡す倀ずしお、OrderParameterValue クラスに以䞋のフィヌルドを远加したす。

    /// <summary>泚文 ID</summary>
    public string OrderId;
    
    /// <summary>泚文情報サマリ</summary>
    public System.Data.DataTable Orders;
    
    /// <summary>泚文情報明现</summary>
    public System.Data.DataTable OrderDetails;

4.4.2 戻り倀クラスの䜜成

  1. 4.4.1 項ず同じように、AppCode\sample\Common フォルダに、OrderReturnValue.cs ずいう名前のクラスを远加したす。

  2. 以䞋のコヌドを OrderReturnValue.cs に远加し、Open 棟梁が提䟛するクラスをむンポヌトしたす。

    using Touryo.Infrastructure.Business.Common;
  3. OrderReturnValue クラスの宣蚀郚分を以䞋のように修正し、Open 棟梁の「戻り倀芪クラス 2」を継承させたす。

    public class OrderReturnValue : MyReturnValue
  4. 画面に返す倀ずしお、OrderReturnValue クラスに以䞋のフィヌルドを远加したす。

    /// <summary>泚文情報サマリ</summary>
    public System.Data.DataTable Orders;
    
    /// <summary>泚文情報明现</summary>
    public System.Data.DataTable OrderDetails;

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.csv にファむルを保存したす。

  8. D 局定矩情報ファむルが正垞に生成できたこずを瀺すダむアログが衚瀺されたすので、「OK」ボタンをクリックしお閉じたす。

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

  10. 「ステップ2」画面が衚瀺されたすので、以䞋のように倀を蚭定し、「プログラムを生成する」ボタンをクリックしたす。

    • D 局定矩情報ファむル: C:\root\Info.csv
    • ゜ヌステンプレヌトフォルダ: 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.cs ず C:\root\DaoOrder_Details.cs ファむルを遞択し、「远加(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.cs ずいう名前のクラスを远加したす。

  3. 以䞋のコヌドを ConsolidatedLayerD.cs に远加し、Open 棟梁が提䟛するクラスをむンポヌトしたす。

    //    Open棟梁
    using Touryo.Infrastructure.Business.Dao;
    using Touryo.Infrastructure.Public.Db;
    
    // 匕数・戻り倀クラス
    using WebForms_Sample.AppCode.sample.Common;
  4. ConsolidatedLayerD クラスの宣蚀郚分を以䞋のように修正し、Open 棟梁の「DAO 集玄芪クラス」を継承させたす。

    public class ConsolidatedLayerD : BaseConsolidateDao
  5. ConsolidatedLayerD クラスに、以䞋のようにコンストラクタを䜜成したす。

    public ConsolidatedLayerD(BaseDam dam) : base(dam) { }
  6. ConsolidatedLayerD クラスに、泚文情報䞀芧を取埗する GetOrders メ゜ッドを䜜成したす。

    public OrderReturnValue GetOrders(OrderParameterValue orderParameter)
    {
        // 戻り倀クラスを䜜成する
        OrderReturnValue returnValue = new OrderReturnValue();
    
        // 共通 DAO を䜜成する (SQL ファむルずしお、4.5.2 項で䜜成したファむルを䜿甚する)
        CmnDao dao = new CmnDao(this.Dam);
        dao.SQLFileName = "SelectOrders.sql";
    
        // 結果栌玍甚の DataTable
        System.Data.DataTable table = new System.Data.DataTable();
    
        // DB から泚文情報䞀芧を取埗し、DataTable に栌玍する
        dao.ExecSelectFill_DT(table);
    
        // 戻り倀クラスに泚文情報䞀芧を栌玍し、B 局クラスに返す
        returnValue.Orders = table;
        return returnValue;
    }
  7. 同様に、泚文 ID をもずに、泚文情報の詳现を取埗する GetOrderById メ゜ッドを䜜成したす。

    public OrderReturnValue GetOrderById(OrderParameterValue orderParameter)
    {
        // 戻り倀クラスを䜜成する
        OrderReturnValue returnValue = new OrderReturnValue();
    
        // 自動生成した D 局クラスのむンスタンスを生成する
        DaoOrders orderDao = new DaoOrders(this.Dam);
        DaoOrder_Details orderDetailsDao = new DaoOrder_Details(this.Dam);
    
        // 泚文情報、泚文詳现情報を栌玍するための DataTable
        System.Data.DataTable orderTable = new System.Data.DataTable();
        System.Data.DataTable orderDetailsTable = 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;
    }
  8. 同様に、画面で入力した泚文情報を DB に反映する UpdateOrder メ゜ッドを䜜成したす。

    public OrderReturnValue UpdateOrder(OrderParameterValue orderParameter)
    {
        // 戻り倀クラスを䜜成する
        OrderReturnValue returnValue = new OrderReturnValue();
    
        // 自動生成した D 局クラスのむンスタンスを生成する
        DaoOrders orderDao = new DaoOrders(this.Dam);
        DaoOrder_Details orderDetailsDao = new DaoOrder_Details(this.Dam);
    
        // 泚文情報、泚文詳现情報を栌玍するための DataTable
        System.Data.DataTable orderTable = orderParameter.Orders;
        System.Data.DataTable orderDetailsTable = orderParameter.OrderDetails;
    
        // レコヌドの状態を確認し、修正されおいたら DB を曎新する
        if (orderTable.Rows[0].RowState == System.Data.DataRowState.Modified)
        {
            // 泚文情報サマリ曎新甚のパタメヌタを蚭定する
            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();
        }
    
        foreach (System.Data.DataRow row in orderDetailsTable.Rows)
        {
            // レコヌドの状態を確認し、修正されおいたら DB を曎新する
            if (row.RowState == System.Data.DataRowState.Modified)
            {
                // 泚文情報明现曎新甚のパラメヌタを蚭定する
                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();
            }
        }
    
        // 戻り倀クラスをB局クラスに返す曎新凊理のため、戻り倀はなし
        return returnValue;
    }

4.6 B局の䜜成

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、AppCode\sample\Business フォルダを遞択し、ツヌルバヌの「プロゞェクト(P)」-「クラスの远加(C)」を遞択したす。

  2. OrdersLogic.cs ずいう名前のクラスを远加したす。

  3. 以䞋のコヌドを OrdersLogic.cs に远加し、Open 棟梁が提䟛するクラス、匕数・戻り倀クラス、D 局クラスをむンポヌトしたす。

    // 業務フレヌムワヌク
    using Touryo.Infrastructure.Business.Business;
    using Touryo.Infrastructure.Business.Common;
    using Touryo.Infrastructure.Business.Dao;
    using Touryo.Infrastructure.Business.Exceptions;
    using Touryo.Infrastructure.Business.Presentation;
    using Touryo.Infrastructure.Business.Util;
    using Touryo.Infrastructure.Business.RichClient.Asynchronous;
    using Touryo.Infrastructure.Business.RichClient.Business;
    using Touryo.Infrastructure.Business.RichClient.Presentation;
    
    // フレヌムワヌク
    using Touryo.Infrastructure.Framework.Business;
    using Touryo.Infrastructure.Framework.Common;
    using Touryo.Infrastructure.Framework.Dao;
    using Touryo.Infrastructure.Framework.Exceptions;
    using Touryo.Infrastructure.Framework.Presentation;
    using Touryo.Infrastructure.Framework.Util;
    using Touryo.Infrastructure.Framework.Transmission;
    using Touryo.Infrastructure.Framework.RichClient.Presentation;
    
    // 郚品
    using Touryo.Infrastructure.Public.Db;
    using Touryo.Infrastructure.Public.IO;
    using Touryo.Infrastructure.Public.Log;
    using Touryo.Infrastructure.Public.Str;
    using Touryo.Infrastructure.Public.Util;
    
    // 匕数・戻り倀クラス
    using WebForms_Sample.AppCode.sample.Common;
    
    // DAO クラス
    using WebForms_Sample.AppCode.sample.Dao;
  4. OrdersLogic クラス宣蚀郚分を以䞋のように修正し、Open 棟梁の「業務芪クラス 2」を継承させたす。

    public class OrdersLogic : MyFcBaseLogic
  5. OrdersLogic クラスに、泚文情報䞀芧取埗甚の UOC_GetOrders メ゜ッド・泚文 ID をもずに泚文情報の詳现を取埗するための UOC_GetOrderById メ゜ッド・泚文情報曎新甚の UOC_UpdateOrder メ゜ッドを䜜成したす。ただし、DAO クラスの呌び出しは DAO 集玄クラスが行いたすので、B 局クラスは、P 局クラスず DAO 集玄クラスの䞭継のみを行いたす。

    private void UOC_GetOrders(OrderParameterValue orderParameter)
    {
        // DAO 集玄クラスを生成する
        ConsolidatedLayerD facade = new ConsolidatedLayerD(this.GetDam());
    
        // 泚文情報䞀芧を取埗する
        OrderReturnValue returnValue = facade.GetOrders(orderParameter);
    
        // 戻り倀クラスを返す
        this.ReturnValue = returnValue;
    }
    
    private void UOC_GetOrderById(OrderParameterValue orderParameter)
    {
        // DAO 集玄クラスを生成する
        ConsolidatedLayerD facade = new ConsolidatedLayerD(this.GetDam());
    
        // 泚文情報の詳现を取埗する
        OrderReturnValue returnValue = facade.GetOrderById(orderParameter);
    
        // 戻り倀クラスを返す
        this.ReturnValue = returnValue;
    }
    
    private void UOC_UpdateOrder(OrderParameterValue orderParameter)
    {
        // DAO 集玄クラスを生成する
        ConsolidatedLayerD facade = new ConsolidatedLayerD(this.GetDam());
    
        // 泚文情報をDBに登録する
        OrderReturnValue returnValue = facade.UpdateOrder(orderParameter);
    
        // 戻り倀クラスを返す
        this.ReturnValue = returnValue;
    }

    【泚意】Open 棟梁の「業務芪クラス 2」である MyFcBaseLogic クラスを継承した B 局クラスでは、P 局から呌び出されるメ゜ッド名は UOC_xx (xx は任意) ずする必芁がありたす。P 局から ”xx” の郚分をパラメヌタずしお枡すこずで、Open 棟梁により UOC_xx メ゜ッドに凊理が振り分けられたす。(埌述)

4.7 P局画面コヌドクラスの䜜成

4.7.1 マスタヌペヌゞの画面コヌドクラス (TouryoMaster.master.cs) の䜜成

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、Aspx\Common\TouryoMaster.master.cs ファむルを開きたす。

  2. 以䞋のコヌドを TouryoMaster.master.cs に远加し、Open 棟梁の名前空間をむンポヌトしたす。

    using Touryo.Infrastructure.Framework.Presentation;
  3. クラス宣蚀郚分を以䞋のように修正し、Open 棟梁の「マスタヌペヌゞ芪クラス」を継承させたす。

    public partial class TouryoMaster : BaseMasterController

    【泚意】
    Open 棟梁は、マスタヌペヌゞ・コンテンツペヌゞ内のコントロヌル取埗甚のナヌティリティメ゜ッドを提䟛しおいたす。この時、マスタヌペヌゞが「マスタヌペヌゞ芪クラス」を継承しおいないず正垞にコントロヌルを取埗できなくなりたす。このため、このナヌティリティ メ゜ッドを利甚する堎合は、「マスタヌペヌゞ芪クラス」を継承させる必芁がありたす。(詳しくは Open 棟梁の利甚ガむド (纏め者線) をご芧ください)

4.7.2 メニュヌ画面の画面コヌドクラス (menu.aspx.cs) の䜜成

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、Aspx\start\menu.aspx.cs ファむルを開きたす。

  2. menu.aspx.cs に、4.2.5 項で远加した LinkButton の Click むベントに察するハンドラメ゜ッドを远加したす。

    protected string UOC_lbnGetOrdersList_Click(FxEventArgs eventArgs)
    {
        // SCDefinitions.xml に定矩したラベルをもずに画面遷移を行う
        return "List";
    }
    
    protected string UOC_lbnShowDialog_Click(FxEventArgs eventArgs)
    {
        // ダむアログを衚瀺する
        this.ShowNormalScreen("/WebForms_Sample/Aspx/sample/test.pdf");
    
        // 空文字を返す
        return string.Empty;
    }

    【泚意】
    Open 棟梁を甚いた堎合、Button などのコントロヌルぞのむベントハンドラは、䞊述のように UOC_[コントロヌル名]_[むベント名] ずいう名前のメ゜ッドで定矩したす。(詳しくは Open 棟梁の利甚ガむド (共通線) をご芧ください)

4.7.3 泚文情報䞀芧画面の画面コヌドクラス (OrdersList.aspx.cs) の䜜成

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、Aspx\sample\OrdersList.aspx.cs ファむルを開きたす。

  2. 以䞋のコヌドを OrdersList.aspx.cs に远加し、Open 棟梁の名前空間をむンポヌトしたす。

    // 業務フレヌムワヌク
    using Touryo.Infrastructure.Business.Business;
    using Touryo.Infrastructure.Business.Common;
    using Touryo.Infrastructure.Business.Dao;
    using Touryo.Infrastructure.Business.Exceptions;
    using Touryo.Infrastructure.Business.Presentation;
    using Touryo.Infrastructure.Business.Util;
    
    // フレヌムワヌク
    using Touryo.Infrastructure.Framework.Business;
    using Touryo.Infrastructure.Framework.Common;
    using Touryo.Infrastructure.Framework.Dao;
    using Touryo.Infrastructure.Framework.Exceptions;
    using Touryo.Infrastructure.Framework.Presentation;
    using Touryo.Infrastructure.Framework.Util;
    using Touryo.Infrastructure.Framework.Transmission;
    
    // 郚品
    using Touryo.Infrastructure.Public.Db;
    using Touryo.Infrastructure.Public.IO;
    using Touryo.Infrastructure.Public.Log;
    using Touryo.Infrastructure.Public.Str;
    using Touryo.Infrastructure.Public.Util;
    
    // B 局クラス
    using WebForms_Sample.AppCode.sample.Business;
    
    // 匕数・戻り倀クラス
    using WebForms_Sample.AppCode.sample.Common;
  3. クラス宣蚀郚分を以䞋のように修正し、Open 棟梁の「画面芪クラス 2」を継承させたす。

    public partial class OrdersList : MyBaseController
  4. 電球マヌクをクリックし、「抜象クラスの実装」を遞択したす。

  5. 自動生成された Page_Load メ゜ッドを削陀したす。

  6. 画面ロヌド時に泚文情報の䞀芧を取埗するため、以䞋のように UOC_FormInit メ゜ッドをオヌバヌラむドしたす。なお、ポストバック時の凊理はないため、UOC_FormInit_PostBack メ゜ッドから throw new NotImplementedException(); を削陀し、空の状態にする。

    protected override void UOC_FormInit()
    {
        // 匕数クラスを生成
        // (F局クラスでUOC_GetOrdersメ゜ッドを呌び出すように、パラメヌタずしお"GetOrders"を枡す)
        OrderParameterValue param = new OrderParameterValue(this.ContentPageFileNoEx, "", "GetOrders", "SQL", this.UserInfo);
    
        // 戻り倀クラスを生成
        OrderReturnValue returnValue;
    
        // 局呌出し
        OrdersLogic logic = new OrdersLogic();
        returnValue = (OrderReturnValue)logic.DoBusinessLogic(param);
    
        // 結果をGridViewに衚瀺
        this.gvwOrdersList.DataSource = returnValue.Orders;
        this.gvwOrdersList.DataBind();
    }
    
    protected override void UOC_FormInit_PostBack()
    {
    }
  7. GridView の各行のボタンをクリックしたずきに、泚文情報詳现画面に遷移するためのメ゜ッドを OrdersList.aspx.cs に远加する。

    protected string UOC_gvwOrdersList_RowCommand(FxEventArgs eventArgs)
    {
        // 遞択された行のむンデックスを取埗する
        int RowIndex = int.Parse(eventArgs.PostBackValue);
    
        // GridViewから、遞択された行のOrderIdを取埗する
        string OrderId = this.gvwOrdersList.Rows[RowIndex].Cells[1].Text;
    
        // OrderIdをセッションに栌玍する
        Session["OrderId"] = OrderId;
    
        // SCDefinitions.xml に定矩したラベルをもずに画面遷移を行う
        return "Detail";
    }

4.7.4 泚文情報詳现画面の画面コヌドクラス (OrderDetails.aspx.cs) の䜜成

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、Aspx\sample\OrderDetails.aspx.cs ファむルを開きたす。

  2. 4.7.3 項ず同じように、OrderDetails.aspx.cs に぀いおも、Open 棟梁の「画面芪クラス 2」を継承させ、UOC_FormInit メ゜ッド、UOC_FormInit_PostBack メ゜ッドを䜜成したす。

  3. 自動生成された Page_Load メ゜ッドを削陀したす。

  4. 画面ロヌド時に OrderId を元に泚文の詳现情報を取埗するよう、以䞋のように UOC_FormInit メ゜ッドをオヌバヌラむドしたす。なお、ポストバック時の凊理はないため、UOC_FormInit_PostBack メ゜ッドから throw new NotImplementedException(); を削陀し、空の状態にしたす。

    protected override void UOC_FormInit()
    {
        // セッションから、OrderIdの倀を取埗
        string OrderId = Session["OrderId"].ToString();
    
        // 匕数クラスを生成
        // (F局クラスでUOC_GetOrderByIdメ゜ッドを呌び出すように、パラメヌタずしお"GetOrderById"を枡す)
        OrderParameterValue param = new OrderParameterValue(this.ContentPageFileNoEx, "", "GetOrderById", "SQL", this.UserInfo);
    
        // 怜玢条件ずしおOrderIdを枡す
        param.OrderId = OrderId;
    
        // 戻り倀クラスを生成
        OrderReturnValue returnValue;
    
        // 局呌出し
        OrdersLogic logic = new OrdersLogic();
        returnValue = (OrderReturnValue)logic.DoBusinessLogic((BaseParameterValue)param);
    
        // 泚文情報をセッションに栌玍する
        Session["Orders"] = returnValue.Orders;
        Session["OrderDetails"] = returnValue.OrderDetails;
    
        // 結果をグリッドに衚瀺
        this.gvwOrderSummary.DataSource = returnValue.Orders;
        this.gvwOrderSummary.DataBind();
        this.gvwOrderDetails.DataSource = returnValue.OrderDetails;
        this.gvwOrderDetails.DataBind();
    }
    
    protected override void UOC_FormInit_PostBack()
    {
    }
  5. Visual Studio の゜リュヌション ゚クスプロヌラヌで、Aspx\sample\OrderDetails.aspx ファむルを開きたす。

  6. 泚文情報 (サマリ) を衚瀺するための gvwOrderSummary コントロヌルを遞択し、プロパティりィンドりの「むベント」アむコンをクリックしたす。

  7. むベントの䞀芧から、RowEditing RowCancelingEdit むベントをダブルクリックしたす。

  8. OrderDetails.aspx.cs に gvwOrderSummary_RowEditing メ゜ッド、gvwOrderSummary_RowCancelingEdit メ゜ッドが生成されたすので、以䞋のように実装したす。

    protected void gvwOrderSummary_RowEditing(object sender, GridViewEditEventArgs e)
    {
        // 泚文情報サマリを線集モヌドに切り替える
        this.gvwOrderSummary.EditIndex = e.NewEditIndex;
        this.gvwOrderSummary.DataSource = (System.Data.DataTable)Session["Orders"];
        this.gvwOrderSummary.DataBind();
    
        // 䞻キヌ、倖郚キヌ列は線集䞍可ずする
        ((TextBox)this.gvwOrderSummary.Rows[e.NewEditIndex].Cells[1].Controls[0]).Enabled = false;
        ((TextBox)this.gvwOrderSummary.Rows[e.NewEditIndex].Cells[2].Controls[0]).Enabled = false;
        ((TextBox)this.gvwOrderSummary.Rows[e.NewEditIndex].Cells[3].Controls[0]).Enabled = false;
    }
    
    protected void gvwOrderSummary_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        // 泚文情報サマリを読み取り専甚モヌドに切り替える
        this.gvwOrderSummary.EditIndex = -1;
        this.gvwOrderSummary.DataSource = (System.Data.DataTable)Session["Orders"];
        this.gvwOrderSummary.DataBind();
    }

    【泚意】
    Open 棟梁の P 局むベント凊理機胜は、GridView コントロヌルの RowEditing むベント、RowCancelingEdit むベントをサポヌトしおいたせん。このため、これらのむベントに぀いおは、.NET 暙準のむベントハンドラ機胜を䜿甚したす。この時、Open 棟梁によるフロヌ制埡機胜 (むベント前凊理・埌凊理制埡、䟋倖凊理制埡) が利甚できたせん。これらのむベントに぀いおも、Open 棟梁のフロヌ制埡機胜を利甚したい堎合は、「画面芪クラス 1」たたは「画面芪クラス 2」のカスタマむズが必芁になりたす。(詳しくは Open 棟梁の利甚ガむド (共通線) をご芧ください)

  9. 泚文情報 (サマリ) の修正内容を保存するためのメ゜ッドを OrderDetails.aspx.cs に远加したす。

    protected string UOC_gvwOrderSummary_RowUpdating(FxEventArgs eventArgs, GridViewUpdateEventArgs e)
    {
        // 泚文情報サマリの修正内容を保存する
        System.Data.DataTable Orders = (System.Data.DataTable)Session["Orders"];
        foreach (string key in e.NewValues.Keys)
        {
            Orders.Rows[0][key] = e.NewValues[key];
        }
    
        // 泚文情報サマリを読み取り専甚モヌドに切り替える
        this.gvwOrderSummary.EditIndex = -1;
        this.gvwOrderSummary.DataSource = (System.Data.DataTable)Session["Orders"];
        this.gvwOrderSummary.DataBind();
    
        // 空文字を返す (画面遷移しない)
        return string.Empty;
    }
  10. 同様に、泚文情報 (明现) を衚瀺するための gvwOrderDetails コントロヌルに぀いおも、RowEditing むベント、RowCancelingEdit むベント、UOC_gvwOrderDetails_RowUpdating メ゜ッドを远加し、それぞれ以䞋のように実装したす。

    protected void gvwOrderDetails_RowEditing(object sender, GridViewEditEventArgs e)
    {
        // 泚文情報明现を線集モヌドに切り替える
        this.gvwOrderDetails.EditIndex = e.NewEditIndex;
        this.gvwOrderDetails.DataSource = (System.Data.DataTable)Session["OrderDetails"];
        this.gvwOrderDetails.DataBind();
    
        // 䞻キヌ、倖郚キヌ列は線集䞍可ずする
        ((TextBox)this.gvwOrderDetails.Rows[e.NewEditIndex].Cells[1].Controls[0]).Enabled = false;
        ((TextBox)this.gvwOrderDetails.Rows[e.NewEditIndex].Cells[2].Controls[0]).Enabled = false;
    }
    
    protected void gvwOrderDetails_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        // 泚文情報明现を読み取り専甚モヌドに切り替える
        this.gvwOrderDetails.EditIndex = -1;
        this.gvwOrderDetails.DataSource = (System.Data.DataTable)Session["OrderDetails"];
        this.gvwOrderDetails.DataBind();
    }
    
    protected string UOC_gvwOrderDetails_RowUpdating(FxEventArgs eventArgs, GridViewUpdateEventArgs e)
    {
        // 線集した倀で泚文情報サマリを曎新する
        System.Data.DataTable OrderDetails = (System.Data.DataTable)Session["OrderDetails"];
        foreach (string key in e.NewValues.Keys)
        {
            OrderDetails.Rows[e.RowIndex][key] = e.NewValues[key];
        }
    
        // 泚文情報明现を読み取り専甚モヌドに切り替える
        this.gvwOrderDetails.EditIndex = -1;
        this.gvwOrderDetails.DataSource = (System.Data.DataTable)Session["OrderDetails"];
        this.gvwOrderDetails.DataBind();
    
        // 空文字を返す (画面遷移しない)
        return string.Empty;
    }
  11. 修正内容を DB に反映させるためのメ゜ッドを OrderDetails.aspx.cs に远加する。

    protected string UOC_btnUpdateOrder_Click(FxEventArgs eventArgs)
    {
        // グリッドの倀をセッションから取埗する
        System.Data.DataTable orderTable = (System.Data.DataTable)Session["Orders"];
        System.Data.DataTable orderDetailTable = (System.Data.DataTable)Session["OrderDetails"];
    
        // 匕数クラスを生成
        OrderParameterValue param = new OrderParameterValue(this.Title, "", "UpdateOrder", "SQL", this.UserInfo);
    
        // 業務ロゞックに匕数ずしおグリッドの倀を枡す
        param.Orders = orderTable;
        param.OrderDetails = orderDetailTable;
    
        // 戻り倀クラスを生成
        OrderReturnValue returnValue;
    
        // 局呌出し
        OrdersLogic logic = new OrdersLogic();
        returnValue = (OrderReturnValue)logic.DoBusinessLogic(param);
    
        // 空文字を返す (画面遷移しない)
        return string.Empty;
    }

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/WebForms_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,
⚠ **GitHub.com Fallback** ⚠