目次 >  第3章 サンプルアプリケーション構築 > 3.4 通信処理機能 > 3.4.1 XML通信

3.4.1 XML通信

概要

本節ではClient Frameworkが提供するイベント処理機能及びXML通信処理機能を用いて、クライアント・サーバ間でXML電文の送受信を行う方法を説明する。
XML通信処理を行う場合は、画面からClient Frameworkが提供するXML通信用のビジネスロジックを実行する。XML通信用のビジネスロジックは、ビジネスロジック入力データセットをXML電文に変換してサーバに送信し、サーバから受信したXML電文をビジネスロジック出力データセットに変換する。詳細は、機能説明書『FB-02 データセット変換機能』、『CM-04 ビジネスロジック生成機能』を参照のこと。

動作イメージ

XML通信機能3.4-1
図3.4.1-1 動作イメージ

  • 対象画面
    • 計算画面
  • 処理概要
    1. (クライアント)計算ボタンを押下して、イベント処理機能を実行する。
    2. (クライアント)イベント処理機能は、画面データセットにバインドされた数値A、数値Bの値をビジネスロジック入力データセットにコピーし、XML通信用ビジネスロジックを実行する。
    3. (クライアント)XML通信用ビジネスロジックは、ビジネスロジック入力データセットの値をサーバへ送信する。
    4. (サーバ)計算ビジネスロジックが数値を受け取り、数値の積を計算する。
    5. (サーバ)計算結果をクライアントへ送信する。
    6. (クライアント)XML通信用ビジネスロジックは、受信したXMLをビジネスロジック出力データセットに変換する。
    7. (クライアント)イベント処理機能は、ビジネスロジック出力データセットに格納された解の値を画面データセットにコピーし、画面に表示する。

クライアントが送信するリクエストの仕様

リクエストヘッダにはリクエスト名"calc"を設定する。リクエスト名によって実行するビジネスロジックが決定される。 リクエストボディには、ユーザが計算画面で入力した数値Aと数値Bの情報をXMLとして設定する。

  • リクエストヘッダ

表3.4.1-1 リクエストヘッダ内容

Key値 Value値 内容
RequestName calc サーバで実行するビジネスロジックを特定するためのリクエスト名。
  • リクエストボディ
    <CalcFormDs xmlns="http://com.example.dotnet/CalcFormDs.xsd">
      <CalcTable>
        <NumberA>12</NumberA>
        <NumberB>2</NumberB>
      </CalcTable>
    </CalcFormDs>
    

クライアントが受信するレスポンスの仕様

画面から入力された数値の計算結果がXMLとして返却される。

  • レスポンスボディ
    <CalcFormDs xmlns="http://com.example.dotnet/CalcFormDs.xsd">
      <CalcTable>
        <Answer>24</Answer>
      </CalcTable>
    </CalcFormDs>
    

作業手順

  • 作成イメージ

XML通信機能3.4-2
図3.4.1-2 作業イメージ

  1. 業務画面の確認
  2. 画面データセットの作成
  3. 画面項目と画面データセットのバインド
  4. データセット変換設定ファイルの設定
  5. ビジネスロジック設定ファイルの設定
  6. EventControllerコンポーネントのインスタンスの追加
  7. EventControllerコンポーネントのプロパティの設定
  8. EventControllerコンポーネントの実行

1. 業務画面の確認

計算画面(CalcForm.cs)がVisual Studioのデザイナに表示されることを確認する。また、計算画面は拡張フォーム(FormBase)を継承していることを確認する。

XML通信機能3.5-3
図3.4.1-3 計算画面の確認

CalcForm.cs

namespace TutorialClient
{
    /// <summary>
    /// 掛け算を行う画面です。
    /// </summary>
    /// <remarks>
    /// 数値Aと数値Bの掛け算の結果を表示します。
    /// </remarks>
    public partial class CalcForm : FormBase
    {
        /// <summary>
        /// <see cref="CalcForm"/> クラスの新しいインスタンスを初期化します。
        /// </summary>
        /// <remarks>
        /// デフォルトコンストラクタです。
        /// </remarks>
        public CalcForm()
        {
            InitializeComponent();
        }
    }
}

2. 画面データセットの作成

2.1 画面データセットの新規作成

計算画面の画面データセット(CalcFormDs.xsd)を作成する。 第3章 3.1 画面作成時のポイントを参考にすること。

表3.4.1-2 データセットの格納場所とファイル名

ファイル格納場所ファイル名
\TutorialClientBlank\ViewDataCalcFormDs.xsd

表3.4.1-3 作成するデータセットの名前空間

Namespacehttp://com.example.dotnet/CalcFormDs.xsd

表3.4.1-4 作成するデータセットのテーブル、カラム、データ型の一覧

Table名Column名DataType(型)DefaultValue
CalcTable
NumberSystem.String空文字列
NumberSystem.String空文字列
AnswerSystem.Int32<DBNull>

XML通信機能3.5-4
図3.4-4 画面データセットの完成形

2.2画面データセットがツールボックスに表示されることの確認

画面データセットの作成が完了したら保存し、ビルドする。ビルド後に作成したデータセットがツールボックスに表示され、コンポーネントとして利用できるようになっていることを確認する。

XML通信機能3.5-5
図3.4-5 データセットがコンポーネントに追加されている例

3. 画面項目と画面データセットのバインド

3.1 画面データセットのインスタンスの追加

ツールボックスからデータセット「CalcFormDs」のインスタンスを計算画面へ追加する。追加したデータセットのインスタンスのNameプロパティを「calcFormDs1」から「calcFormDs」に変更する。

XML通信機能3.5-6
図3.4-6 画面データセットの追加

3.2 画面項目と画面データセットのバインド

計算画面の画面項目と画面データセットをバインドする。

表3.4.1-5 画面項目と画面データセットの対応一覧

画面項目名コントロール種別DataTable名Column(列)名
CalcTable
数値Aテキストボックス NumberA
数値Bテキストボックス NumberB
テキストボックス Answer


図3.4-7 数値Aのテキストボックスと、データセットのNumberAカラムをバインドした例

3.3 画面データセットの初期化

計算画面クラスのLoadイベントに、画面データセットの行を追加するロジックを実装する。

CalcForm.cs

/// <summary>
/// フォームロード時に実行されるイベントハンドラです。
/// </summary>
/// <remarks>
/// 画面データセットを初期化します。
/// </remarks>
/// <param name="sender">イベントのソース。</param>
/// <param name="e">イベントデータを格納している <see cref="EventArgs"/> 。</param>
private void CalcForm_Load(object sender, EventArgs e)
{
    calcFormDs.CalcTable.AddCalcTableRow(
        calcFormDs.CalcTable.NewCalcTableRow());
}

4. データセット変換設定ファイルの設定

データセット変換設定ファイル(ConversionConfiguration.config)に、画面データセットとビジネスロジック入出力データセットの変換仕様を定義する。コンバートIDは"calc"を、param要素にはサーバに送信する画面データセットのカラム(NumberAおよびNumberB)を、result要素にはサーバから受信した値を反映する画面データセットのカラム(Answer)を記述する。データセット変換設定ファイルの設定に関する詳細は、機能説明書『FB-02 データセット変換機能』を参照のこと。

ConversionConfiguration.config

<?xml version="1.0" encoding="utf-8" ?>
<!-- データセット変換設定ファイル -->
<conversionConfiguration xmlns="http://www.terasoluna.jp/schema/ConversionSchema.xsd">

  <convert id="logon">
    <param>
      <column src="LogonTable.Id" />
      <column src="LogonTable.Pass" />
    </param>
    <result>
    </result>
  </convert>

  <convert id="calc">
    <param>
      <column src="CalcTable.NumberA"/>
      <column src="CalcTable.NumberB"/>
    </param>
    <result>
      <column src="CalcTable.Answer"/>
    </result>
  </convert>
  
</conversionConfiguration>

5. ビジネスロジック設定ファイルの設定

ビジネスロジック設定ファイル(BLogicConfiguration.config)に、XML通信を実行するビジネスロジックを定義する。 ビジネスロジックのname属性には"communicateBLogic"を、type属性にはServer Frameworkが提供するXML通信用ビジネスロジッククラス(DataSetXmlCommunicateBLogic)のアセンブリ修飾名を記述する。ビジネスロジック設定ファイルの設定に関する詳細は『CM-04 ビジネスロジック生成機能』を参照のこと。

BLogicConfiguration.config

<?xml version="1.0" encoding="utf-8"?>
<!-- ビジネスロジック設定ファイル -->
<blogicConfiguration xmlns="http://www.terasoluna.jp/schema/BLogicSchema.xsd">

  <!-- ユーザー定義ビジネスロジック -->
  <blogic name="logonBLogic" type="TutorialClient.BLogic.LogonBLogic, TutorialClient" />

  <!-- XML通信を行うビジネスロジック -->
  <blogic name="communicateBLogic" type="TERASOLUNA.Fw.Client.BLogic.DataSetXmlCommunicateBLogic`1, TERASOLUNA.Fw.Client" />

</blogicConfiguration>

6. EventControllerコンポーネントのインスタンスの追加

ツールボックスからEventControllerのインスタンスを画面に追加する。

XML通信機能3.5-8
図3.4-8 EventControllerコンポーネント

7. EventControllerコンポーネントのプロパティの設定

計算画面に追加したEventControllerインスタンスのプロパティを設定する。BLogicNameプロパティに5. ビジネスロジック設定ファイルの設定 で設定した"communicateBLogic"を指定することで、XML通信を行うことができる。

XML通信用イベントコントローラのプロパティ(Client)
図3.4.1-9 calcEventのプロパティの設定例

表3.4.1-6 calcEventのプロパティの設定例

プロパティ名 設定値 備考
Name calcEvent インスタンスの名前。
ConvertId calc データセット変換設定ファイルに定義されたコンバートIDを指定する。
BLogicName communicateBLogic 5. ビジネスロジック設定ファイルの設定 でビジネスロジック設定ファイルに設定された、サーバとXML通信を行うビジネスロジック名"communicateBLogic"を設定する。
RequestName calcサーバで実行するビジネスロジックを特定するためのリクエスト名。
ErrorHandlerCalcFormIErrorHandler実装クラスのインスタンス。
ViewDatacalcFormDs画面データセットのインスタンス。

8. EventControllerコンポーネントの実行

計算画面(CalcForm.cs)の計算ボタンのクリックイベントに、6. EventControllerコンポーネントのインスタンスの追加 で画面に追加したEventControllerを実行するロジックを実装する。

CalcForm.cs

/// <summary>
/// 計算ボタン押下時に実行されるイベントハンドラです。
/// </summary>
/// <remarks>
/// 掛け算の処理を実行します。
/// </remarks>
/// <param name="sender">イベントのソース。</param>
/// <param name="e">イベントデータを格納している <see cref="EventArgs"/> 。</param>


private void calcButton_Click(object sender, EventArgs e)
{
    ExecutionResult result = calcEvent.Execute();

    if (result.Errors.Count != 0)
    {
        string message = result.Errors[0].Message;
        MessageBox.Show(message);
    }
}

計算ボタンのクリックイベントでは、EventControllerのExecuteメソッドを実行する。計算ボタンのクリックイベントで業務エラーが発生した場合、エラーメッセージが出力される。

備考

ここでは業務エラーをExecutionResult.Errorsプロパティにエラーメッセージが設定されているかどうかで判定しているが、EventControllerのBLogicFailedイベントなど各種エラーイベントを使用して実装することもできる。詳細は、機能説明書『FB-01 イベント処理機能』を参照のこと。

動作確認

  1. 通信先URLの確認を行う。

通信先URLがアプリケーション構成ファイル(App.config)に指定されていることを確認する。アプリケーション構成ファイルのadd要素のkey属性に「BaseUrl」、value属性に「http://localhost/TutorialServerRich/Request.aspx」と設定されていることを確認する。

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

 ・・・ 省略 ・・・

  <appSettings>
    <!-- 通信先URL設定 -->
    <add key="BaseUrl" value="http://localhost/TutorialServerRich/Request.aspx"/>
  </appSettings>

</configuration>
  1. クライアントアプリケーションを起動する(デバッグ⇒デバッグなしで開始)。
  2. ユーザID "tera"、パスワード "soluna" と入力し、ログオンボタンを押下する。

ログオン画面⇒メニュー画面
図3.4-11 ログオン画面⇒メニュー画面

  1. 計算画面ボタンを押下する。

メニュー画面⇒計算画面
図3.4-12 メニュー画面⇒計算画面

  1. 数値A "12"、数値B "2" を入力後、計算ボタンを押下し、解に掛け算結果"24"が表示されることを確認する。

計算画面(計算前)⇒計算画面(計算後)
図3.4-13 計算画面(計算前)⇒計算画面(計算後)


次節:3.4.2 ファイルアップロード通信