Tutorial_2CS_VB.ja - OpenTouryoProject/OpenTouryo GitHub Wiki

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

2014幎11月27日

はじめに

本ドキュメントの目的

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

本ドキュメントの察象

Open 棟梁を甚いた 2 å±€ 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
    • 開発蚀語
      • Visual Basic

あらかじめ、マむクロ゜フトのサむトなどを参考に、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\VB\Samples\2CS_sample\2CSClientWin_sample\2CSClientWin_sample.sln を開きたす。

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

4.2 P局画面デザむンの䜜成

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

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

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

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

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

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

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

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

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

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

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

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

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

4.3.1 匕数クラスの䜜成

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

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

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

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

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

    Public Sub New(screenId As String, controlId As String, methodName As String, actionType As String, user As MyUserInfo)
      MyBase.New(screenId, controlId, methodName, actionType, user)
    End Sub
  6. 画面から業務ロゞックに枡す倀ずしお、OrderParameterValue クラスに以䞋のフィヌルドを远加したす。

    ''' <summary>泚文 ID</summary>
    Public OrderId As String
    
    ''' <summary>泚文情報サマリ</summary>
    Public Orders As System.Data.DataTable
    
    ''' <summary>泚文情報明现</summary>
    Public OrderDetails As System.Data.DataTable

4.3.2 戻り倀クラスの䜜成

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

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

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

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

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

4.4 共通䟋倖凊理の実装

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

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

    Imports Touryo.Infrastructure.Framework.RichClient.Business
  3. サンプルプログラムでは、共通䟋倖ハンドラずしお Application_ThreadException メ゜ッドが甚意されおいたす。ここに、共通䟋倖凊理ずしお、デヌタベヌス トランザクションをロヌルバックする凊理を远蚘したす。

    Public Shared Sub Application_ThreadException(sender As Object,  e As ThreadExceptionEventArgs)
      ' DB のトランザクションをロヌルバックする (DB に接続しおいない堎合は䜕もしない)
      BaseLogic2CS.RollbackAndClose()
      ShowErrorMessage(e.Exception, "Application_ThreadExceptionによる䟋倖通知です。")
    End Sub

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」画面が衚瀺されたすので、以䞋のように倀を蚭定し、「プログラムを生成する」ボタンをクリックしたす。

    • 蚀語: VB
    • 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 でサンプルプログラムを開き、Dao フォルダを遞択し、ツヌルバヌの「プロゞェクト(P)」-「既存の項目の远加(G)」を遞択したす。

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

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

  16. D 局自動生成ツヌルを終了したす。

4.5.2 SQL ファむルの䜜成

D 局自動生成ツヌルでは、単玔な CRUD 凊理を行う Dao クラスや SQL ファむルを生成できたす。しかし、耇数のテヌブルを結合 (JOIN) させる SQL など、単玔な CRUD 凊理ではない SQL は、個別に䜜成する必芁がありたす。

  1. C:\root\files\resource\Sql フォルダに、SelectOrders.sql ファむルを䜜成したす。

  2. SelectOrders.sql に、以䞋の SQL 文を蚘述したす。

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

4.5.3 DAO 集玄クラスの䜜成

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

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

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

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

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

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

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

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

    Public Sub New(dam As BaseDam)
      MyBase.New(dam)
    End Sub
  6. ConsolidatedLayerD クラスに、泚文情報䞀芧を取埗する GetOrders メ゜ッドを䜜成したす。

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

    Public Function GetOrderById(orderParameter As OrderParameterValue) As OrderReturnValue
      ' 戻り倀クラスを䜜成する
      Dim returnValue As New OrderReturnValue()
    
      ' 自動生成した D 局クラスのむンスタンスを生成する
      Dim orderDao As New DaoOrders(this.Dam)
      Dim orderDetailsDao As New DaoOrder_Details(this.Dam)
    
      ' 泚文情報、泚文詳现情報を栌玍するための DataTable
      Dim orderTable As New System.Data.DataTable()
      Dim orderDetailsTable As New System.Data.DataTable()
    
      ' パラメヌタを蚭定する
      orderDao.PK_OrderID = orderParameter.OrderId
      orderDetailsDao.PK_OrderID = orderParameter.OrderId
    
      ' 泚文 ID をもずに泚文情報を怜玢する
      orderDao.D2_Select(orderTable)
      orderDetailsDao.D2_Select(orderDetailsTable)
    
      ' 戻り倀クラスに結果セットを栌玍し、B 局クラスに返す
      returnValue.Orders = orderTable
      returnValue.OrderDetails = orderDetailsTable
      Return returnValue
    End Function
  8. 同様に、画面で入力した泚文情報を DB に反映する UpdateOrder メ゜ッドを䜜成したす。

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

4.6 B局の䜜成

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

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

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

    ' 業務フレヌムワヌク
    Imports Touryo.Infrastructure.Business.Business
    Imports Touryo.Infrastructure.Business.Common
    Imports Touryo.Infrastructure.Business.Dao
    Imports Touryo.Infrastructure.Business.Exceptions
    Imports Touryo.Infrastructure.Business.Presentation
    Imports Touryo.Infrastructure.Business.Util
    Imports Touryo.Infrastructure.Business.RichClient.Asynchronous
    Imports Touryo.Infrastructure.Business.RichClient.Business
    Imports Touryo.Infrastructure.Business.RichClient.Presentation
    
    ' フレヌムワヌク
    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.Framework.RichClient.Presentation
    
    ' 郚品
    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 _2CSClientWin_sample.Common
    
    ' DAO クラス
    Imports _2CSClientWin_sample.Dao
  4. OrdersLogic クラス宣蚀郚分を以䞋のように修正し、Open 棟梁の「業務芪クラス 2」を継承させたす。

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

    Private Sub UOC_GetOrders(orderParameter As OrderParameterValue)
      ' DAO 集玄クラスを生成する
      Dim facade As new ConsolidatedLayerD(Me.GetDam())
    
      ' 泚文情報䞀芧を取埗する
      Dim returnValue As OrderReturnValue = facade.GetOrders(orderParameter)
    
      ' 戻り倀クラスを返す
      Me.ReturnValue = returnValue
    End Sub
    
    Private Sub UOC_GetOrderById(orderParameter  As OrderParameterValue)
      ' DAO 集玄クラスを生成する
      Dim facade As new ConsolidatedLayerD(Me.GetDam())
    
      ' 泚文情報の詳现を取埗する
      Dim returnValue As OrderReturnValue = facade.GetOrderById(orderParameter)
    
      ' 戻り倀クラスを返す
      Me.ReturnValue = returnValue
    End Sub
    
    Private Sub UOC_UpdateOrder(orderParameter  As OrderParameterValue)
      ' DAO 集玄クラスを生成する
      Dim facade As new ConsolidatedLayerD(Me.GetDam())
    
      ' 泚文情報をDBに登録する
      Dim returnValue As OrderReturnValue = facade.UpdateOrder(orderParameter)
    
      ' 戻り倀クラスを返す
      Me.ReturnValue = returnValue
    End Sub

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

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

4.7.1 泚文情報䞀芧画面の画面コヌドクラス (OrdersForm.vb) の䜜成

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

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

    ' 業務フレヌムワヌク
    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.Business.RichClient.Asynchronous
    Imports Touryo.Infrastructure.Business.RichClient.Presentation
    
    ' フレヌムワヌク
    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.Framework.RichClient.Business
    Imports Touryo.Infrastructure.Framework.RichClient.Presentation
    
    ' 郚品
    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 _2CSClientWin_sample.Common
    
    ' B 局クラス
    Imports _2CSClientWin_sample.Business
  3. OrdersLogic クラス宣蚀郚分を以䞋のように修正し、Open 棟梁の「画面芪クラス 2」を継承させたす。

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

    Protected Overrides Sub UOC_FormInit()
      ' 匕数クラスを生成
      Dim param As New OrderParameterValue(Me.Name, "", "GetOrders", "SQL", MyBaseControllerWin.UserInfo)
    
      ' 戻り倀クラスを生成
      Dim returnValue As OrderReturnValue
    
      ' 局呌出し
      Dim logic As New OrdersLogic()
      returnValue = DirectCast(logic.DoBusinessLogic(param), OrderReturnValue)
    
      ' DataGridView をクリア
      Me.dataGridView1.DataSource = Nothing
    
      If returnValue.ErrorFlag = True Then
        ' ゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("ErrorMessageID:" & returnValue.ErrorMessageID & vbCrLf _
          & "ErrorMessage:" & returnValue.ErrorMessage & vbCrLf _
          & "ErrorInfo:" & returnValue.ErrorInfo & vbCrLf)
      Else
        ' 泚文情報䞀芧を DataGridView に衚瀺する
        Me.dataGridView1.DataSource = returnValue.Orders
    
        ' DataGridView を線集䞍可にする
        Me.dataGridView1.ReadOnly = True
      End If
    
      ' DBずの接続を閉じる
      BaseLogic2CS.CommitAndClose()
    End Sub
  5. 次に、ボタン抌䞋時に泚文情報詳现画面を衚瀺するためのメ゜ッドを远加したす。

    Protected Sub UOC_btnShowOrderDetail_Click(eventArgs As RcFxEventArgs)
      If Me.dataGridView1.SelectedRows.Count = 0 Then
        ' DataGridView の行が遞択されおいない堎合は、゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("行が遞択されおいたせん")
        Return
      End If
    
      ' 泚文情報詳现画面を生成する
      Dim orderDetailsForm As New OrderDetailsForm()
    
      ' 泚文情報䞀芧画面に、泚文情報詳现画面を所有させる
      orderDetailsForm.Owner = Me
    
      ' 泚文情報詳现画面を衚瀺する
      orderDetailsForm.Show()
    End Sub
  6. 泚文情報䞀芧から、遞択されおいる泚文 ID を返すプロパティを䜜成したす。

    Public ReadOnly Property SelectedOrderId() As String
      Get
        If Me.dataGridView1.SelectedRows.Count = 0 Then
          ' 行が遞択されおいない堎合は null を返す
          Return Nothing
        Else
          ' 遞択されおいる泚文 ID を返す
          Return Me.dataGridView1.SelectedRows(0).Cells(0).Value.ToString()
        End If
      End Get
    End Property

4.7.2 泚文情報詳现画面の画面コヌドクラス (OrderDetailsForm.vb) の䜜成

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

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

    Protected Overrides Sub UOC_FormInit()
      ' 匕数クラスを生成
      Dim param As New OrderParameterValue(Me.Name, "", "GetOrderById", "SQL", MyBaseControllerWin.UserInfo)
      param.OrderId = DirectCast(Me.Owner, OrdersForm).SelectedOrderId
    
      ' 戻り倀クラスを生成
      Dim returnValue As OrderReturnValue
    
      ' 局呌出し
      Dim logic As New OrdersLogic()
      returnValue = DirectCast(logic.DoBusinessLogic(param), OrderReturnValue)
    
      ' DataGridView をクリア
      Me.dataGridView1.DataSource = Nothing
      Me.dataGridView2.DataSource = Nothing
    
      If returnValue.ErrorFlag = True Then
        ' ゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("ErrorMessageID:" & returnValue.ErrorMessageID & vbCrLf _
          & "ErrorMessage:" & returnValue.ErrorMessage & vbCrLf _
          & "ErrorInfo:" & returnValue.ErrorInfo & vbCrLf)
      Else
        ' 泚文情報サマリの衚瀺
        Me.dataGridView1.DataSource = returnValue.Orders
    
        ' 特定の列を線集䞍可にする
        Me.dataGridView1.Columns("OrderId").ReadOnly = True
        Me.dataGridView1.Columns("CustomerId").ReadOnly = True
        Me.dataGridView1.Columns("EmployeeId").ReadOnly = True
    
        ' 泚文情報明现の衚瀺
        Me.dataGridView2.DataSource = returnValue.OrderDetails
    
        ' 特定の列を線集䞍可にする
        Me.dataGridView2.Columns("OrderId").ReadOnly = True
        Me.dataGridView2.Columns("ProductId").ReadOnly = True
      End If
    
      ' DBずの接続を閉じる
      BaseLogic2CS.CommitAndClose()
    End Sub
  3. 次に、ボタン抌䞋時に泚文情報を DB に反映させるためのメ゜ッドを远加したす。

    Protected Sub UOC_btnUpdateOrder_Click(eventArgs As RcFxEventArgs)
      ' グリッドの倀を取埗する
      Dim orderTable As DataTable = Me.dataGridView1.DataSource
      Dim orderDetailTable As DataTable = Me.dataGridView2.DataSource
    
      ' 匕数クラスを生成
      Dim param As New OrderParameterValue(Me.Name, "", "UpdateOrder", "SQL", MyBaseControllerWin.UserInfo)
    
      ' 業務ロゞックに匕数ずしおグリッドの倀を枡す
      param.Orders = orderTable
      param.OrderDetails = orderDetailTable
    
      ' 戻り倀クラスを生成
      Dim returnValue  As OrderReturnValue
    
      ' 局呌出し
      Dim logic As New OrdersLogic()
      returnValue = logic.DoBusinessLogic(param)
    
      If returnValue.ErrorFlag = true Then
        ' トランザクションをロヌルバックする
        BaseLogic2CS.RollbackAndClose()
    
        ' ゚ラヌメッセヌゞを衚瀺する
        MessageBox.Show("ErrorMessageID:" & returnValue.ErrorMessageID & vbCrLf _
          & "ErrorMessage:" & returnValue.ErrorMessage & vbCrLf _
          & "ErrorInfo:" & returnValue.ErrorInfo & vbCrLf)
      Else
        ' トランザクションをコミットする
        BaseLogic2CS.CommitAndClose()
    
        ' 結果正垞系
        MessageBox.Show("正垞に DB を曎新したした。")
      End If
    End Sub

4.8 その他

4.8.1 アプリケヌション構成ファむル (app.config) の蚭定内容の確認

  1. Visual Studio の゜リュヌション ゚クスプロヌラヌで、app.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 スタヌトアップ画面の倉曎

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

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

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

    ' 業務画面の衚瀺業務の開始
    Application.Run(New OrdersForm())

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

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

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

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

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

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

  6. 以䞋のコマンドを実行し、修正した内容で 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.9.3 トレヌスログの確認

  1. C:\root\programs\C#\Samples\2CS_sample\2CSClientWin_sample\bin\Debug\ACCESS_2CS.yyyy-mm-dd.log をメモ垳などで開きたす。(yyyy-mm-dd には、実行日付が入りたす)

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

    [2017/04/06 11:24:54,043],[INFO ],[9],Splash
    [2017/04/06 11:24:54,058],[INFO ],[10],Splash
    [2017/04/06 11:24:57,084],[INFO ],[9],,,,Login,Form_Load
    [2017/04/06 11:25:00,060],[INFO ],[9],,,----->,Login,btnButton1
    [2017/04/06 11:25:00,065],[INFO ],[9],,user01,,Login,Form_Closed
    [2017/04/06 11:25:00,076],[INFO ],[9],,user01,<-----,Login,btnButton1,16,0
    [2017/04/06 11:25:00,099],[INFO ],[9],,user01,,OrdersForm,Form_Load
    [2017/04/06 11:25:00,667],[INFO ],[9],,user01,pc01,----->>,OrdersForm,,GetOrders,
    [2017/04/06 11:25:03,008],[INFO ],[9],,user01,pc01,<<-----,OrdersForm,,GetOrders,,2341,203
    [2017/04/06 11:28:46,964],[INFO ],[9],,user01,----->,OrdersForm,btnShowOrderDetail
    [2017/04/06 11:28:46,983],[INFO ],[9],,user01,,OrderDetailsForm,Form_Load
    [2017/04/06 11:28:46,986],[INFO ],[9],,user01,pc01,----->>,OrderDetailsForm,,GetOrderById,
    [2017/04/06 11:28:49,486],[INFO ],[9],,user01,pc01,<<-----,OrderDetailsForm,,GetOrderById,,2501,31
    [2017/04/06 11:28:49,537],[INFO ],[9],,user01,<-----,OrdersForm,btnShowOrderDetail,2573,109
    [2017/04/06 11:36:09,282],[INFO ],[9],,user01,----->,OrderDetailsForm,btnUpdateOrder
    [2017/04/06 11:36:09,456],[INFO ],[9],,user01,pc01,----->>,OrderDetailsForm,,UpdateOrder,
    [2017/04/06 11:36:10,000],[INFO ],[9],,user01,pc01,<<-----,OrderDetailsForm,,UpdateOrder,,543,47
    [2017/04/06 11:39:11,799],[INFO ],[9],,user01,<-----,OrderDetailsForm,btnUpdateOrder,182512,125
    [2017/04/06 11:39:13,542],[INFO ],[9],,user01,,OrderDetailsForm,Form_Closed
    [2017/04/06 11:39:15,232],[INFO ],[9],,user01,,OrdersForm,Form_Closed
  3. C:\root\programs\C#\Samples\2CS_sample\2CSClientWin_sample\bin\Debug\SQLTRACE_2CS.yyyy-mm-dd.log をメモ垳などで開きたす。(yyyy-mm-dd には、実行日付が入りたす)

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

    [2017/04/06 11:25:03,006],[INFO ],[9],207,16,[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/06 11:28:49,335],[INFO ],[9],51,16,[commandText]: -- DaoOrders_D2_Select -- 2012/7/30 日立 倪郎 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/06 11:28:49,486],[INFO ],[9],150,0,[commandText]: -- DaoOrder_Details_D2_Select -- 2012/7/30 日立 倪郎 SELECT [OrderID], [ProductID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE [OrderID] = @OrderID  [commandParameter]:OrderID=10248,
⚠ **GitHub.com Fallback** ⚠