目次＞ 第3章 サンプルアプリケーション構築 > 3.3 業務処理の呼び出し

# 3.3 業務処理の呼び出し機能

## 1 概要

本節では、Client Frameworkが提供するイベント処理機能を用いて、業務処理を呼び出す（ビジネスロジックを実行する）方法を学習する。
イベント処理機能を用いることで、ビジネスロジックの実行および入力値検証機能を用いた画面データセットに対する入力値検証が可能となる。画面とビジネスロジック間のデータのやり取りは、データセット変換機能を用いて行う。
本節では、データセット変換とビジネスロジック実行についての演習を行い、入力値検証処理に関しては、3.5 入力値検証機能で演習を行う。詳細は、機能説明書『FB-01 イベント処理機能』、『FB-02 データセット変換機能』、『CM-04 ビジネスロジック生成機能』を参照のこと。
イベント処理機能は以下の順番で処理を行う。

1. 入力値検証 … 画面データセットの値に対して、入力チェックを行う。
2. データセット変換 … データセット変換機能を用いて、画面データセットの値をビジネスロジック入力データセットにコピーする。
3. ビジネスロジック実行 … ビジネスロジック生成機能を用いてビジネスロジックを生成し、実行する。
4. データセット変換 … データセット変換機能を用いて、ビジネスロジック出力データセットの値を画面データセットにコピーする。

### 1.1 動作イメージ

図1.1-1 業務処理呼び出し動作イメージ

- 対象画面
  - ログオン画面(LogonForm.cs)
  - メニュー画面(MenuForm.cs)
- 処理概要
  1. (クライアント)ログオン画面のログオンボタンを押下して、イベント処理機能を実行する。
  2. (クライアント)イベント処理機能は、ログオン画面の画面データセットにバインドされたユーザIDとパスワードの値をビジネスロジック入力データセットにコピーし、ビジネスロジックを実行する。
  3. (クライアント)ビジネスロジックは、ビジネスロジック入力データセットにコピーされたユーザIDとパスワードを用いて認証処理を行い、認証結果を返却する。
  4. (クライアント)ビジネスロジックの認証に成功した場合、メニュー画面に遷移する。失敗した場合はエラーメッセージを表示する。

## 2 作業手順

- 作成イメージ

図2-2 業務処理の呼び出し作業イメージ

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

### 2.1 業務画面の確認

ログオン画面(LogonForm.cs)がVisual Studioのデザイナに表示されることを確認する。

図2.1-1 ログオン画面の確認

### 2.2 画面データセットの確認

第3章3.1画面作成時のポイントで作成したログオン画面の画面データセット(LogonFormDs.xsd)を確認する。

図2.2-1 画面データセット

画面項目は以下の通り画面データセットにバインドされている。 表2.2-1 画面項目と画面データセットの対応一覧

画面項目名 | コントロール種別 | DataTable名 | Column(列)名
|  | LogonTable |
ユーザID | テキストボックス |  | Id
パスワード | テキストボックス |  | Pass

### 2.3 データセット変換設定ファイルの設定

データセット変換設定ファイル（ConversionConfiguration.config）に、画面データセットとビジネスロジック入出力データセットの変換仕様を定義する。
コンバートID(convert要素のid属性）には一意のIDを、param/column要素にはビジネスロジック入力データセットにコピーする画面データセットのカラムを「データテーブル名.カラム名」の形式で、result/column要素にはビジネスロジック出力データセットの値を反映する画面データセットのカラムを「データテーブル名.カラム名」の形式で記述する。データセット変換設定ファイルの設定に関する詳細は、「FB-02 データセット変換機能」を参照のこと。
本節では、コンバートIDに"logon"を、param/column要素には画面からビジネスロジックに渡すIdカラムおよびPassカラムを設定し、result/column要素は省略する。ビジネスロジックから画面に返却する値がない場合はresult/column要素を省略する。逆に画面からビジネスロジックに渡す値がない場合はparam/column要素を省略する。

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>

    </conversionConfiguration>

### 2.4 ビジネスロジックの作成

画面から入力されたユーザIDとパスワードを受け取り、ログオン認証処理を行うビジネスロジックを新規作成する。ビジネスロジッククラスは、Client Frameworkが提供するClientBLogicBaseクラスを実装すること。ClientBLogicBaseクラスを実装することで、ビジネスロジックのキャンセル処理や、進行状況通知イベントの実行が可能となる。

#### 2.4.1 ビジネスロジッククラスの新規作成

ログオン認証処理を行うビジネスロジッククラス(BLogic\LogonBLogic.cs)を作成する。

図2.4-1 ビジネスロジックの作成

#### 2.4.2 ビジネスロジックの実装

ClientBLogicBaseのExecuteメソッドをオーバーライドし、ログオン認証処理を実装する。
Executeメソッドの引数「BLogicParam」クラスおよび戻り値「BLogicResult」クラスはClient Frameworkが提供するクラスである。BLogicParamのParamDataプロパティにはビジネスロジック入力データセット、BLogicResultのresultDataプロパティにはビジネスロジック出力データセットが格納される。
ビジネスロジックが実行に成功した場合、BLogicResultに「BLogicResult.SUCCESS」を設定する。実行に失敗した場合は、BLogicResultに「BLogicResult.SUCCESS」以外の文字列を設定する。

LogonBLogic.cs

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Text;
    using TERASOLUNA.Fw.Client.BLogic;
    using TERASOLUNA.Fw.Common;
    using TERASOLUNA.Fw.Common.BLogic;
    using TutorialClient.ViewData;

    namespace TutorialClient.BLogic
    {
        /// <summary>
        /// ログオン認証を行う <see cref="ClientBLogicBase"/> 実装クラスです。
        /// </summary>
        public class LogonBLogic : ClientBLogicBase
        {
            private static readonly string USER_ID = "tera";
            private static readonly string PASSWORD = "soluna";
            private static readonly string FAILURE = "FAILURE";

            /// <summary>
            /// ログオン認証を行います。
            /// </summary>
            /// <param name="param">ビジネスロジック入力クラス。</param>
            /// <returns>ビジネスロジック結果クラス。</returns>
            public override BLogicResult Execute(BLogicParam param)
            {
                // ユーザ ID とパスワードの取得
                LogonFormDs resultData = param.ParamData as LogonFormDs;
                string id = resultData.LogonTable[0].Id;
                string pass = resultData.LogonTable[0].Pass;

                if (USER_ID.Equals(id) && PASSWORD.Equals(pass))
                {
                    //ログオン成功時のビジネスロジック結果クラスの作成
                    return new BLogicResult(BLogicResult.SUCCESS, new DataSet());
                }
                else
                {
                    //ログオン失敗時のビジネスロジック結果クラスの作成
                    BLogicResult blogicResult = new BLogicResult(FAILURE);
                    MessageInfo errorMessageInfo = new MessageInfo(Properties.Resources.E_LOGIN_FAILURE);
                    blogicResult.Errors.Add(errorMessageInfo);
                    return blogicResult;
                }
            }
        }
    }

BLogicParamからビジネスロジック入力データセットを取得し、そこに格納されたユーザIDとパスワードを取得する。ビジネスロジック入力データセットは、画面データセットの型（LogonFormDs）にキャストして扱う。
ユーザIDが"tera"、パスワードが"soluna"の場合、認証に成功したとみなす。
認証に成功した場合、BLogicResultのコンストラクタの第一引数に認証に成功したことを示す文字列「BLogicResult.SUCCESS」を、第二引数にはビジネスロジック出力データセットを設定してBLogicResultのインスタンスを生成し返却する。本節では、ビジネスロジックから画面に返却する値はないので、ビジネスロジック出力データセットには空のデータセットを設定する。
認証に失敗した場合、BLogicResultのコンストラクタの第一引数に認証に失敗したことを示す文字列"FAILURE"を、第二引数にはビジネスロジック出力データセットを設定し、BLogicResultのインスタンスを生成し、エラーを格納する。本節では、ビジネスロジックから画面に返却する値はないので、ビジネスロジック出力データセットには空のデータセットを設定する。
エラーを格納する場合、生成したBLogicResultのErrorsプロパティに、エラーメッセージを格納したMessageInfoクラスを追加する。

##### 補足

EventControllerの標準のプロパティ設定では、ビジネスロジック入力データセットとビジネスロジック出力データセットの型として画面データセットの型が使用される。もし、ビジネスロジックの入力データセットの型と画面データセットの型を別にしたい場合は、EventControllerのBLogicParamTypeNameプロパティにビジネスロジック入力データセットの型を設定する。同様にビジネスロジックの出力データセットの型を画面データセットの型を別にしたい場合は、EventControllerのBLogicResultTypeNameプロパティに出力データセットの型を設定する。詳細は、機能説明書『FB-01 イベント処理機能』を参照のこと。

### 2.5 ビジネスロジック設定ファイルの設定

ビジネスロジック設定ファイル(Config\BLogicConfiguration.config)に、4. ビジネスロジックの作成で作成したログオン認証を行うビジネスロジッククラスの定義を追加する。
ビジネスロジック名（name属性）には"logonBLogic"を、type属性にはビジネスロジックのアセンブリ修飾名を設定する。ビジネスロジック設定ファイルの設定に関する詳細は『CM-04 ビジネスロジック生成機能』を参照のこと。

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

このように、ビジネスロジック設定ファイルでビジネスロジックを管理することで、後から設定ファイルベースで実行するビジネスロジックの型を変更することが可能となる。
設定完了後のビジネスロジック設定ファイルの内容を以下に記す。

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" />

    </blogicConfiguration>

### 2.6 EventControllerコンポーネントのインスタンスの追加

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

図2.6-1 EventControllerコンポーネント

### 2.7 EventControllerコンポーネントのプロパティの設定

ログオン画面に追加したEventControllerインスタンスのプロパティを設定する。各プロパティの詳細は、機能説明書『FB-01 イベント処理機能』を参照のこと。 BLogicNameプロパティに5.ビジネスロジック設定ファイルの設定 で設定した"logonBLogic"を指定することで、EventControllerが4.ビジネスロジックの作成 で作成したログオン認証を行うビジネスロジックを実行する。

図2.7-1 logonEventのプロパティの設定例

表2.7-1 logonEventのプロパティの設定

プロパティ名 | 設定値 | 備考
(Name) | logonEvent | インスタンスの名前。
BLogicName | logonBLogic | 5.ビジネスロジック設定ファイルの設定 でビジネスロジック設定ファイルに設定したビジネスロジックID"logonBLogic"を指定する。
ConvertId | logon | 3.データセット変換設定ファイルの設定 でデータセット変換設定ファイルに設定したコンバートID"logon"を指定する。
ErrorHandler | LogonForm | IErrorHandler実装クラスのインスタンス。
ViewData | logonFormDs | 画面データセットのインスタンスの名前。

### 2.8 EventControllerコンポーネントの実行

ログオン画面(LogonForm.cs)のログオンボタンのクリックイベントに、7. EventControllerコンポーネントのプロパティの設定 で画面に追加したEventControllerを実行するロジックを実装する。 EventControllerを実行すると、4.ビジネスロジックの作成 で作成したログオン認証を行うビジネスロジックが実行される。
EventControllerを実行した戻り値ExecutionResultには、ビジネスロジックの実行結果が格納される。 ビジネスロジックでBLogicResultにBLogicResult.SUCCESSが設定された場合、ExecutionResultのSuccessプロパティにはtrueが設定される。ビジネスロジックでBLogicResultのErrorsプロパティに追加したエラーメッセージは、ExecutioinResultのErrorsプロパティに格納される。

LogonForm.cs

    /// <summary>
    /// ログオンボタン押下時に実行されるイベントハンドラです。
    /// </summary>
    /// <remarks>ログオン認証処理を実行します。</remarks>
    /// <param name="sender">イベントのソース。</param>
    /// <param name="e">イベントデータを格納している<see cref="EventArgs"/>。</param>
    private void logonButton_Click(object sender, EventArgs e)
    {
        ExecutionResult result = logonEvent.Execute();

        if (result.Success)
        {
            Items["UserId"] = userIdTextBox.Text;
            logonFormForwarder.Execute();
            this.Visible = false;
        }
        else
        {
            if (result.Errors.Count != 0)
            {
                string message = result.Errors[0].Message;
                MessageBox.Show(message);
            }
        }
    }

EventControllerのインスタンス「logonEvent」のExecuteメソッドを実行する。
ExecutionResultのSuccessプロパティがtrueの場合、ビジネスロジックで認証に成功したとみなし、メニュー画面へ遷移を行う。
ExecutionResultのSuccessプロパティがtrue以外の場合、ビジネスロジックで認証に失敗したとみなし、ExecutionResultのErrorsプロパティに設定されたエラーメッセージを画面に表示する。

## 3 動作確認

1. クライアントアプリケーションを起動する(デバッグ⇒デバッグなしで開始)。
2. ログオン画面でユーザID "tera"、パスワード "luna" と入力し、ログオンボタンを押下する。
3. メッセージボックスが開き、「ログインに失敗しました。ユーザIDもしくはパスワードが間違っています。」と表示されることを確認する。
4. メッセージボックスのOKボタンを押下して、メッセージボックスを閉じる。
5. ログオン画面でユーザID "tera"、パスワード "soluna" と入力し、ログオンボタンを押下する。
6. メニュー画面に遷移することを確認する。

図3-1 認証処理の動作確認

次節：3.4 通信処理