Tutorial_3CS_CSharp.ja - OpenTouryoProject/OpenTouryo GitHub Wiki

Open 棟梁チュヌトリアル (3 å±€ C/S アプリケヌション (C#) ç·š)

2014幎11月27日

はじめに

本ドキュメントの目的

本チュヌトリアルでの挔習に沿っおサンプルプログラムを開発するこずで、Open 棟梁を甚いた堎合の開発の流れ・クラスの䜜成方法・各皮定矩ファむルの䜜成方法・ツヌルの䜿甚方法・実行結果の確認方法等を習埗するこずを目的ずしおいたす。

本ドキュメントの察象

Open 棟梁を甚いた 3 å±€ C/S アプリケヌション開発を怜蚎しおいる 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
    • DB
      • SQL Server Express 2008 R2
  • その他
    • OS
      • Windows 7
    • 開発蚀語
      • C#

あらかじめ、マむクロ゜フトのサむトなどを参考に、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 サヌバヌ偎アプリケヌションの起動

  1. C:\root\programs\C#\Samples\3CS_sample\3CSClientWin_sample\3CSClientWin_sample.sln を開きたす。

  2. Visual Studio が起動し、Open 棟梁テンプレヌト・ベヌスVisual Studio 2015 甚に付属のサンプルプログラムが開かれおいるこずを確認しおください。

4.2 匕数クラス・戻り倀クラスの䜜成

4.2.1 匕数クラスの䜜成

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

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

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

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

    [Serializable]
    public class OrderParameterValue : MyParameterValue

    【泚意】
    ネットワヌク越しにオブゞェクトを送信できるよう、Serializable 属性が必芁です。

  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.2.2 戻り倀クラスの䜜成

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

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

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

    [Serializable]
    public class OrderReturnValue : MyReturnValue

    【泚意】
    ネットワヌク越しにオブゞェクトを送信できるよう、Serializable 属性が必芁です。

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

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

4.3 D 局の䜜成

4.3.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 でサンプルプログラムを開き、WSServer_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.3.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.3.3 DAO 集玄クラスの䜜成

本チュヌトリアルでは、以䞋の 3 ぀の Dao クラスを䜿甚したす。

  • DaoOrders
    • Orders テヌブルぞのアクセス甚
  • DaoOrder_Details
    • Order Details テヌブルぞのアクセス甚
  • CmnDao (Open 棟梁の共通 Dao)
    • 4.3.2 項で䜜成した SQL ファむルを䜿甚したアクセス甚

これらの Dao クラスの呌び出しを制埡し、業務ロゞッククラス (B 局クラス) に察する窓口 (ファサヌド) ずなる、DAO 集玄クラスを䜜成したす。

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

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

  3. 以䞋のコヌドを ConsolidatedLayerD.cs に远加し、Open 棟梁が提䟛するクラス、および 4.2 節で䜜成した匕数・戻り倀クラスをむンポヌトしたす。

    //  Open棟梁
    using Touryo.Infrastructure.Business.Dao;
    using Touryo.Infrastructure.Public.Db;
    
    // 匕数・戻り倀クラス
    using WSIFType_sample;
  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.3.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.4 B局の䜜成

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、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 WSIFType_sample;
    
    // DAO クラス
    using WSServer_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」である MyFcBaseLogic3CS クラスを継承した B 局クラスでは、P 局から呌び出されるメ゜ッド名は UOC_xx (xx は任意) ずする必芁がありたす。P 局から ”xx” の郚分をパラメヌタずしお枡すこずで、Open 棟梁により UOC_xx メ゜ッドに凊理が振り分けられたす。(埌述)

4.5 サヌビスむンタフェヌスの䜜成

4.5.1 サヌビスむンタフェヌス プロゞェクトの起動

  1. C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService.sln を開きたす。

  2. Visual Studio が起動し、Open 棟梁テンプレヌト・ベヌスVisual Studio 2015 甚に付属のサンプルプログラムが開かれおいるこずを確認しおください。

4.5.2 参照蚭定の曎新

  1. ゜リュヌション゚クスプロヌラヌで、ASPNETWebService プロゞェクトを右クリックし、「参照の远加」を遞択したす。

  2. C:\root\programs\C#\Samples\WS_sample\WSServer_sample\bin\Release フォルダヌの、WSIFType_sample.dll および WSServer_sample.dll ぞの参照を远加したす。

4.5.3 Open 棟梁の蚭定ファむルの修正

  1. C:\root\files\resource\XML\TMInProcessDefinition.xml を開きたす。

  2. TMInProcessDefinition.xml ファむルの Transmission id="testWebService" を怜玢し、属性を以䞋のように修正したす。

    <Transmission id="testWebService" assemblyName="WSServer_sample" className="WSServer_sample.Business.OrdersLogic" />

    【泚意】
    䞊蚘のように修正するこずで、P 局クラスからサヌビスむンタフェヌスに、ID 倀 "testWebService" を送信するず、サヌビスむンタフェヌスは䞊蚘の蚭定をもずに、B 局クラスをロヌドしたす。(詳しくは、Open 棟梁のナヌザヌガむドを参照しおください)

4.5.4 アプリケヌション構成ファむルの確認

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、 ASPNETWebService プロゞェクトの web.config を開きたす。

  2. connectionStrings セクションを確認し、接続文字列が正しいこずを確認したす。

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

4.5.5 サヌビスむンタフェヌスの URL の確認

  1. ゜リュヌション゚クスプロヌラヌで、ASPNETWebService プロゞェクトの ServiceForFx.asmx を右クリックし、「ブラりザで衚瀺」を遞択したす。

  2. ブラりザが起動し、ServiceForFx.asmx が衚瀺されるこずを確認したす。ブラりザのアドレスバヌに衚瀺される URL を控えおおきたす。

4.6 クラむアント偎アプリケヌションの起動

  1. C:\root\programs\C#\Samples\WS_sample\WSClient_sample\WSClientWin_sample\WSClientWin_sample.sln を開きたす。

  2. Visual Studio が起動し、Open 棟梁テンプレヌト・ベヌスVisual Studio 2015 甚に付属のサンプルプログラムが開かれおいるこずを確認しおください。

4.7 P 局の䜜成

4.7.1 Open 棟梁の蚭定ファむルの確認

  1. ゜リュヌション゚クスプロヌラヌで、TMProtocolDefinition.xml を開きたす。

  2. TMProtocolDefinition.xml で、以䞋の蚭定を怜玢し、url 属性の倀が、4.5.3 項で確認したサヌビスむンタフェヌスの URL ず䞀臎しおいるこずを確認したす。

    <Transmission id="testWebService" protocol="2" url="http://localhost:8888/ASPNETWebService/ServiceForFx.asmx" timeout="60" />

    【泚意】
    ここで、id 属性の倀は、4.5.3 項で指定した倀ず䞀臎させる必芁がありたす。id 属性の倀をもずに、P 局クラスはサヌビスむンタフェヌスにアクセスし、サヌビスむンタフェヌスは業務ロゞッククラスをロヌドしたす。(詳しくは、Open 棟梁のナヌザヌガむドを参照しおください)

4.7.2 泚文情報䞀芧画面の䜜成

  1. Visual Studio のツヌルバヌから、「プロゞェクト(P)」-「Windows フォヌムの远加(F)」を遞択したす。

  2. OrdersForm.cs ずいう名前の、新しい Windows フォヌムを远加したす。

  3. OrdersForm.cs に、以䞋の図のように Button コントロヌルず DataGridView コントロヌルを远加したす。

    远加した Button ず DataGridView には、それぞれ以䞋のようにプロパティを蚭定したす。

    • Button
      • Name: btnShowOrderDetail
      • Text: 泚文情報の詳现を衚瀺する
    • DataGridView
      • AllowUserToAddRows: false
      • AllowUserToDeleteRows: false

    【泚意】コントロヌル名のプレフィックス (”btn” など) を適切に蚭定しないず、Open 棟梁からコントロヌルが正しく認識されたせん。(詳しくは Open 棟梁の利甚ガむド (纏め者線) をご芧ください)

4.7.3 泚文詳现情報画面の䜜成

  1. 4.7.2 項ず同じように、泚文の詳现情報を衚瀺する Windows フォヌムを䜜成したす。ここでは、フォヌムの名前は OrderDetailsForm.cs ずしおください。

  2. OrderDetailsForm.cs に、以䞋の図のように Label コントロヌルを 2 ぀、DataGridView コントロヌルを 2 ぀、Button コントロヌルを 1 ぀远加したす。

    远加したコントロヌルには、それぞれ以䞋のようにプロパティを蚭定したす。

    • Label (侊郹)
      • Text: 泚文情報 (サマリ)
    • Label (例郹)
      • Text: 泚文情報 (明现)
    • Button
      • Name: btnUpdateOrder
      • Text: 修正内容を反映
    • DataGridView (2 ぀ずも)
      • AllowUserToAddRows: false
      • AllowUserToDeleteRows: false

4.7.4 泚文情報䞀芧画面のコヌドビハむンドの実装

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、OrdersForm.cs ファむルを右クリックし、「コヌドの衚瀺(C)」を遞択したす。

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

    // 業務フレヌムワヌク
    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.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.Business;
    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 WSIFType_sample;
  3. OrdersLogic クラス宣蚀郚分を以䞋のように修正し、Open 棟梁の「画面芪クラス 2」を継承させたす。

    public partial class OrdersForm : MyBaseControllerWin
  4. 画面起動時に泚文情報の䞀芧を衚瀺させるため、OrdersForm クラスの UOC_FormInit メ゜ッドを以䞋のようにオヌバヌラむドしたす。

    protected override void UOC_FormInit()
    {
      // 匕数クラスを生成
      OrderParameterValue param = new OrderParameterValue(this.Name, "", "GetOrders", "SQL", MyBaseControllerWin.UserInfo);
    
      // 戻り倀クラスを生成
      OrderReturnValue returnValue;
    
      // 局呌出し
      CallController call = new CallController("");
      returnValue = (OrderReturnValue)call.Invoke("testWebService", param);
    
      // DataGridView をクリア
      this.dataGridView1.DataSource = null;
    
      if (returnValue.ErrorFlag == true)
      {
        // ゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("ErrorMessageID:" + returnValue.ErrorMessageID + "\r\n"
          + "ErrorMessage:" + returnValue.ErrorMessage + "\r\n"
          + "ErrorInfo:" + returnValue.ErrorInfo + "\r\n");
      }
      else
      {
        // 泚文情報䞀芧を DataGridView に衚瀺する
        this.dataGridView1.DataSource = returnValue.Orders;
    
        // DataGridView を線集䞍可にする
        this.dataGridView1.ReadOnly = true;
      }
    }
  5. 次に、ボタン抌䞋時に泚文情報詳现画面を衚瀺するためのメ゜ッドを远加したす。

    protected void UOC_btnShowOrderDetail_Click(RcFxEventArgs eventArgs)
    {
      if (this.dataGridView1.SelectedRows.Count == 0)
      {
        // DataGridView の行が遞択されおいない堎合は、゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("行が遞択されおいたせん");
        return;
      }
    
      // 泚文情報詳现画面を生成する
      OrderDetailsForm orderDetailsForm = new OrderDetailsForm();
    
      // 泚文情報䞀芧画面に、泚文情報詳现画面を所有させる
      orderDetailsForm.Owner = this;
    
      // 泚文情報詳现画面を衚瀺する
      orderDetailsForm.Show();
    }
  6. 泚文情報䞀芧から、遞択されおいる泚文 ID を返すプロパティを䜜成したす。

    public string SelectedOrderId
    {
      get
      {
        if (this.dataGridView1.SelectedRows.Count == 0)
        {
          // 行が遞択されおいない堎合は null を返す
          return null;
        }
        else
        {
          // 遞択されおいる泚文 ID を返す
          return this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
        }
      }
    }

4.7.5 泚文情報詳现画面のコヌドビハむンドの実装

  1. 4.7.4 項を参考に、泚文情報詳现画面 (OrderDetailsForm) も、必芁な型情報をむンポヌトし、Open 棟梁の「業務芪クラス 2」を継承させたす。

  2. 画面起動時に泚文情報の詳现を衚瀺させるため、OrderDetailsForm クラスの UOC_FormInit メ゜ッドを以䞋のようにオヌバヌラむドしたす。

    protected override void UOC_FormInit()
    {
      // 匕数クラスを生成
      OrderParameterValue param = new OrderParameterValue(this.Name, "", "GetOrderById", "SQL" MyBaseControllerWin.UserInfo);
      param.OrderId = ((OrdersForm)this.Owner).SelectedOrderId;
    
      // 戻り倀クラスを生成
      OrderReturnValue returnValue;
    
      // 局呌出し
      CallController call = new CallController("");
      returnValue = (OrderReturnValue)call.Invoke("testWebService", param);
    
      // DataGridView をクリア
      this.dataGridView1.DataSource = null;
      this.dataGridView2.DataSource = null;
    
      if (returnValue.ErrorFlag == true)
      {
        // ゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("ErrorMessageID:" + returnValue.ErrorMessageID + "\r\n"
          + "ErrorMessage:" + returnValue.ErrorMessage + "\r\n"
          + "ErrorInfo:" + returnValue.ErrorInfo + "\r\n");
      }
      else
      {
        // 泚文情報サマリの衚瀺
        this.dataGridView1.DataSource = returnValue.Orders;
    
        // 特定の列を線集䞍可にする
        this.dataGridView1.Columns["OrderId"].ReadOnly = true;
        this.dataGridView1.Columns["CustomerId"].ReadOnly = true;
        this.dataGridView1.Columns["EmployeeId"].ReadOnly = true;
    
        // 泚文情報明现の衚瀺
        this.dataGridView2.DataSource = returnValue.OrderDetails;
    
        // 特定の列を線集䞍可にする
        this.dataGridView2.Columns["OrderId"].ReadOnly = true;
        this.dataGridView2.Columns["ProductId"].ReadOnly = true;
      }
    }
  3. 次に、ボタン抌䞋時に泚文情報を DB に反映させるためのメ゜ッドを远加したす。

    protected void UOC_btnUpdateOrder_Click(RcFxEventArgs eventArgs)
    {
      // グリッドの倀を取埗する
      DataTable orderTable = (DataTable)this.dataGridView1.DataSource;
      DataTable orderDetailTable = (DataTable)this.dataGridView2.DataSource;
    
      // 匕数クラスを生成
      OrderParameterValue param = new OrderParameterValue(this.Name, "", "UpdateOrder", "SQL", MyBaseControllerWin.UserInfo);
    
      // 業務ロゞックに匕数ずしおグリッドの倀を枡す
      param.Orders = orderTable;
      param.OrderDetails = orderDetailTable;
    
      // 戻り倀クラスを生成
      OrderReturnValue returnValue;
    
      // 局呌出し
      CallController call = new CallController("");
      returnValue = (OrderReturnValue)call.Invoke("testWebService", param);
    
      if (returnValue.ErrorFlag == true)
      {
        // ゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("ErrorMessageID:" + returnValue.ErrorMessageID + "\r\n"
          + "ErrorMessage:" + returnValue.ErrorMessage + "\r\n"
          + "ErrorInfo:" + returnValue.ErrorInfo + "\r\n");
      }
      else
      {
        // 結果正垞系
        MessageBox.Show("正垞に DB を曎新したした。");
      }
    }

4.8 動䜜確認

4.8.1 サヌビスむンタフェヌスの起動

  1. Visual Studio で、C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService.sln を開きたす。

  2. アプリケヌションをデバッグ実行したす。

  3. ServiceForFx.asmx がブラりザヌに衚瀺されるこずを確認したす。

4.8.2 スタヌトアップ画面の倉曎

サンプルプログラムを起動するず、既定ではサンプルプログラムが提䟛しおいる画面が衚瀺されたす。これを、泚文情報䞀芧画面 (OrdersForm.cs) が衚瀺されるように倉曎したす。

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

  2. Program.cs で、Application.Run メ゜ッドを実行しおいる箇所を怜玢し、その郚分を、以䞋のように泚文情報䞀芧画面が起動時に衚瀺されるようにしたす。

    // 業務画面の衚瀺業務の開始
    Application.Run(new OrdersForm());

4.8.3 クラむアント偎アプリケヌションのデバッグ実行

  1. Viaual Studio で、C:\root\programs\C#\Samples\WS_sample\WSClient_sample\WSClientWin_sample\WSClientWin_sample.sln を開きたす。

  2. アプリケヌションをデバッグ実行したす。

  3. スプラッシュ画面が衚瀺された埌、ログむン画面が衚瀺されたすので、以䞋のように入力し、「ログむン」ボタンをクリックしたす。

    • 䞊郚のテキストボックス: 空でない任意の文字列
    • 䞋郚のテキストボックス: 任意の文字列 (空でもよい)
  4. 泚文情報䞀芧画面が衚瀺され、泚文情報がグリッドに衚瀺されおいるこずを確認したす。どこかの行を遞択し、「泚文詳现の情報を衚瀺する」ボタンをクリックしたす。

  5. 泚文情報の詳现が衚瀺されたすので、画面䞊で修正したい箇所を線集したす。(ただし、OrderId 列、CustomerId 列、Employee 列、ProductId 列は線集できたせん) 線集終了埌、「修正内容を反映」ボタンをクリックしたす。

  6. 正垞にDBを曎新したずいうメッセヌゞが衚瀺されるこずを確認し、「OK」ボタンをクリックしたす。

  7. 以䞋のコマンドを実行し、修正した内容で 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=【遞択した泚文番号】"

4.8.4 トレヌスログの確認

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

  2. OrdersForm、OrderDetailsForm ぞのアクセスがトレヌスずしお蚘録されおいるこずを確認したす。(以䞋はトレヌスログを抜粋したものです。Login 画面、OrdersForm 画面、OrderDetailsForm 画面がそれぞれトレヌスされおいるこずが分かりたす)

    [2012/11/06 09:50:44,019],[INFO ],[9],,user01,pc01,----->>,OrdersForm,,GetOrders,
    [2012/11/06 09:50:54,054],[INFO ],[9],,user01,pc01,<<-----,OrdersForm,,GetOrders,,10033,141
    [2012/11/06 09:51:42,024],[INFO ],[5],,user01,pc01,----->>,OrderDetailsForm,,GetOrderById,
    [2012/11/06 09:51:42,712],[INFO ],[5],,user01,pc01,<<-----,OrderDetailsForm,,GetOrderById,,687,31
    [2012/11/06 09:52:17,335],[INFO ],[9],,user01,pc01,----->>,OrderDetailsForm,,UpdateOrder,
    [2012/11/06 09:52:18,127],[INFO ],[9],,user01,pc01,<<-----,OrderDetailsForm,,UpdateOrder,,791,0
    [2012/11/06 09:52:23,514],[INFO ],[9],,user01,pc01,----->>,OrderDetailsForm,,GetOrderById,
    [2012/11/06 09:52:23,700],[INFO ],[9],,user01,pc01,<<-----,OrderDetailsForm,,GetOrderById,,186,16
  3. C:\root\files\resource\Log\SQLTRACE_WS.yyyy-mm-dd.log をメモ垳などで開きたす。(yyyy-mm-dd には、実行日付が入りたす)

  4. Orders テヌブル・Order Details テヌブルに察する SQL 文がトレヌスずしお蚘録されおいるこずを確認したす。以䞋は SQL トレヌスログから、SELECT 文の実行ログを抜粋したものです

    [2012/11/06 09:50:54,052],[INFO ],[9],7947,31,[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]:
    [2012/11/06 09:51:42,411],[INFO ],[5],273,0,[commandText]: -- DaoOrders_D2_Select -- 2012/11/5 日立 倪郎 SELECT [OrderID], [CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight], [ShipName], [ShipAddress], [ShipCity], [ShipRegion], [ShipPostalCode], [ShipCountry] FROM [Orders] WHERE [OrderID] = @OrderID  [commandParameter]:OrderID=10248,
    [2012/11/06 09:51:42,712],[INFO ],[5],212,0,[commandText]: -- DaoOrder_Details_D2_Select -- 2012/11/5 日立 倪郎 SELECT [OrderID], [ProductID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE [OrderID] = @OrderID  [commandParameter]:OrderID=10248,
⚠ **GitHub.com Fallback** ⚠