目次 > 第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 ビジネスロジック生成機能』を参照のこと。
動作イメージ
図3.4.1-1 動作イメージ
- 対象画面
- 計算画面
- 処理概要
- (クライアント)計算ボタンを押下して、イベント処理機能を実行する。
- (クライアント)イベント処理機能は、画面データセットにバインドされた数値A、数値Bの値をビジネスロジック入力データセットにコピーし、XML通信用ビジネスロジックを実行する。
- (クライアント)XML通信用ビジネスロジックは、ビジネスロジック入力データセットの値をサーバへ送信する。
- (サーバ)計算ビジネスロジックが数値を受け取り、数値の積を計算する。
- (サーバ)計算結果をクライアントへ送信する。
- (クライアント)XML通信用ビジネスロジックは、受信したXMLをビジネスロジック出力データセットに変換する。
- (クライアント)イベント処理機能は、ビジネスロジック出力データセットに格納された解の値を画面データセットにコピーし、画面に表示する。
クライアントが送信するリクエストの仕様
リクエストヘッダにはリクエスト名"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>
作業手順
- 作成イメージ
図3.4.1-2 作業イメージ
- 業務画面の確認
- 画面データセットの作成
- 画面項目と画面データセットのバインド
- データセット変換設定ファイルの設定
- ビジネスロジック設定ファイルの設定
- EventControllerコンポーネントのインスタンスの追加
- EventControllerコンポーネントのプロパティの設定
- EventControllerコンポーネントの実行
1. 業務画面の確認
計算画面(CalcForm.cs)がVisual Studioのデザイナに表示されることを確認する。また、計算画面は拡張フォーム(FormBase)を継承していることを確認する。
図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\ViewData | CalcFormDs.xsd |
表3.4.1-3 作成するデータセットの名前空間
Namespace | http://com.example.dotnet/CalcFormDs.xsd |
表3.4.1-4 作成するデータセットのテーブル、カラム、データ型の一覧
Table名 | Column名 | DataType(型) | DefaultValue |
CalcTable | |||
Number | System.String | 空文字列 | |
Number | System.String | 空文字列 | |
Answer | System.Int32 | <DBNull> |
図3.4-4 画面データセットの完成形
2.2画面データセットがツールボックスに表示されることの確認
画面データセットの作成が完了したら保存し、ビルドする。ビルド後に作成したデータセットがツールボックスに表示され、コンポーネントとして利用できるようになっていることを確認する。
図3.4-5 データセットがコンポーネントに追加されている例
3. 画面項目と画面データセットのバインド
3.1 画面データセットのインスタンスの追加
ツールボックスからデータセット「CalcFormDs」のインスタンスを計算画面へ追加する。追加したデータセットのインスタンスのNameプロパティを「calcFormDs1」から「calcFormDs」に変更する。
図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のインスタンスを画面に追加する。
図3.4-8 EventControllerコンポーネント
7. EventControllerコンポーネントのプロパティの設定
計算画面に追加したEventControllerインスタンスのプロパティを設定する。BLogicNameプロパティに5. ビジネスロジック設定ファイルの設定 で設定した"communicateBLogic"を指定することで、XML通信を行うことができる。
図3.4.1-9 calcEventのプロパティの設定例
表3.4.1-6 calcEventのプロパティの設定例
プロパティ名 | 設定値 | 備考 |
Name | calcEvent | インスタンスの名前。 |
ConvertId | calc | データセット変換設定ファイルに定義されたコンバートIDを指定する。 |
BLogicName | communicateBLogic | 5. ビジネスロジック設定ファイルの設定 でビジネスロジック設定ファイルに設定された、サーバとXML通信を行うビジネスロジック名"communicateBLogic"を設定する。 |
RequestName | calc | サーバで実行するビジネスロジックを特定するためのリクエスト名。 |
ErrorHandler | CalcForm | IErrorHandler実装クラスのインスタンス。 |
ViewData | calcFormDs | 画面データセットのインスタンス。 |
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 イベント処理機能』を参照のこと。
動作確認
- 通信先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>
- クライアントアプリケーションを起動する(デバッグ⇒デバッグなしで開始)。
- ユーザID "tera"、パスワード "soluna" と入力し、ログオンボタンを押下する。
図3.4-11 ログオン画面⇒メニュー画面
- 計算画面ボタンを押下する。
図3.4-12 メニュー画面⇒計算画面
- 数値A "12"、数値B "2" を入力後、計算ボタンを押下し、解に掛け算結果"24"が表示されることを確認する。
図3.4-13 計算画面(計算前)⇒計算画面(計算後)