目次＞第3章 サンプルアプリケーション構築 > 3.3 業務ロジックの実行

# 3.3 業務ロジックの実行

## 概要

本節では、Server Frameworkが提供するビジネスロジック生成機能を用いて、掛け算を行う業務ロジックを生成し、実行する方法を学習する。
ビジネスロジック生成機能を用いると、ビジネスロジック設定ファイルの定義をもとに、ビジネスロジック名に対応するビジネスロジッククラスのインスタンスを生成することが可能となる。ビジネスロジック設定ファイルにビジネスロジックの型名が管理されるので、ビジネスロジック設定ファイルを修正するだけで実行するビジネスロジックを変更できる。詳細は、機能説明書『CM-04 ビジネスロジック実行機能』を参照のこと。
必ずしも業務処理をビジネスロジックに記述する必要はないが、TERASOLUNAでは、ビジネスルールやトランザクション管理が必要な複雑な業務処理はビジネスロジック内に記述し、業務に直結しない画面表示処理ロジックは画面イベントに記述する方式を推奨している。画面表示処理と業務処理のロジックを分離することで再利用性および保守性が向上する。

### 動作イメージ

図3.3-1 動作イメージ

- 対象画面
  - 計算画面（CalcForm.aspx）
- 処理概要
  1. （クライアント）計算画面で数値Aと数値Bを入力し、「計算」ボタンを押下する。
  2. （サーバ）計算ボタンのクリックイベント（CalcForm.aspx）で、ビジネスロジック生成機能を用いて、ビジネスロジックを生成する。
  3. （サーバ）計算ボタンのクリックイベント（CalcForm.aspx）で、ビジネスロジックを実行する。ビジネスロジックの引数には、画面で入力された数値A,Bをデータセットに格納して設定する。
  4. （サーバ）ビジネスロジックで掛け算を実行し、結果を返却する。ビジネスロジックの戻り値には、数値A,Bを掛けた結果をデータセットに格納して設定する。
  5. （クライアント）計算画面に掛け算の結果を表示する。

## 作業手順

- 作成イメージ
  1. 画面の確認
  2. データセットの作成
  3. ビジネスロジックの作成
  4. ビジネスロジック設定ファイルの設定
  5. 計算画面のイベントの実装
  6. メニュー画面のイベントの実装

### 1. 画面の確認

#### 1.1 計算画面に配置されたコントロールの確認

計算画面（CalcForm.aspx）に配置されたコントロールと、そのプロパティについての説明を以下に記す。
図3.3-2 計算画面に配置されたコントロール

表3.3-1 計算画面に配置されたコントロールのプロパティ設定

番号 | コントロール | IDプロパティ | Textプロパティ | Enabledプロパティ | ValidationGroupプロパティ
① | TextBox | TextBoxNumberA |  |  | calc
② | TextBox | TextBoxNumberB |  |  | calc
③ | TextBox | TextBoxAnswer |  | false |
④ | Button | ButtonCalc | 計算 |  | calc
⑤ | Button | ButtonReturnMenu | メニュー画面に戻る |  |

#### 1.2 計算画面に配置された入力値検証コントロールの確認

計算画面（CalcForm.aspx）に配置された数値Aおよび数値Bに対する入力値検証コントロールと、そのプロパティについての説明を以下に記す。
必須チェックにはRequiredFieldValidater、数値チェックにはCompareValidatorを使用する。
図3.3-3 計算画面に配置された入力値検証コントロール

表3.3-2 計算画面に配置された入力値検証コントロールのプロパティ設定

番号 | コントロール | IDプロパティ | Textプロパティ | Displayプロパティ | DisplayModeプロパティ | ErrorMessageプロパティ | ControlToValidateプロパティ | ValidationGroupプロパティ | Operatorプロパティ | Typeプロパティ
① | ValidationSummary | ValidationSummaryCalc |  |  | List |  |  | calc |  |
② | RequiredFieldValidater | RequiredFieldValidatorA | * | Dynamic |  | 数値Aは必須入力です。 | TextBoxNumberA | calc |  |
③ | CompareValidator | CompareValidatorA | * | Dynamic |  | 数値Aには数字を入力してください。 | TextBoxNumberA | calc | DataTypeCheck | Integer
④ | RequiredFieldValidater | RequiredFieldValidatorB | * | Dynamic |  | 数値Bは必須入力です。 | TextBoxNumberB | calc |  |
⑤ | CompareValidator | CompareValidatorB | * | Dynamic |  | 数値Bには数字を入力してください。 | TextBoxNumberB | calc | DataTypeCheck | Integer

### 2. データセットの作成

ポイント!

図3.3-4 データセットの作成

「計算」ボタンのクリックイベントからビジネスロジックを実行する際、データセットによってデータのやり取りを行う。
ビジネスロジックの入力となる数値Aと数値Bはビジネスロジックの入力データセットに格納し、ビジネスロジックの出力となる掛け算の結果はビジネスロジックの出力データセットに格納することとなる。 ここでは、ビジネスロジック入力データセットおよび出力データセットの作成方法について説明する。

#### 2.1 ビジネスロジック入力データセットの作成

計算画面で入力された数値Aと数値Bを格納するデータセット（CalcParamDataSet.xsd）を作成する。
図3.3-5 ビジネスロジック入力データセットの作成

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

DataTable]名 | Column(列)名 | DataType(型)
CalcParam |  |
| NumberA | System.Int32
| NumberB | System.Int32

#### 2.2 ビジネスロジック出力データセットの作成

掛け算の結果を格納するデータセット（CalcResultDataSet.xsd）を作成する。
図3.3-6 ビジネスロジック出力データセットの作成

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

DataTable名 | Column(列)名 | DataType(型)
CalcResult |  |
| Answer | System.Int32

### 3. ビジネスロジックの作成

掛け算処理を行うビジネスロジックを新規作成する。ビジネスロジッククラスは、Server Frameworkが提供するIBLogicインタフェースを実装すること。

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

ビジネスロジック(BLogic\CalcBLogic.cs)を作成する。
図3.3-7 ビジネスロジックの作成

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

IBLogicインターフェイスで定義しているExecuteメソッドに掛け算処理を実装する。
Executeメソッドの引数「BLogicParam」クラスおよび戻り値「BLogicResult」クラスはServer Frameworkが提供するクラスである。
BLogicParamにはビジネスロジック入力データセット、BLogicResultにはビジネスロジック出力データセットが格納される。

CalcBLogic.cs

    /// <summary>
    /// 掛け算を実行するビジネスロジック。
    /// </summary>
    public class CalcBLogic : IBLogic
    {
        /// <summary>
        /// ビジネスロジックの本体を記述します。
        /// </summary>
        /// <param name="paramData">ビジネスロジック入力クラス。</param>
        /// <returns>ビジネスロジック結果クラス。</returns>
        public BLogicResult Execute(BLogicParam param)
        {
            // ビジネスロジック結果クラスを生成する
            BLogicResult result = new BLogicResult();

            CalcParamDataSet paramDataSet = (CalcParamDataSet)param.ParamData;

            // ビジネスロジック入力データセットに格納された数値Aと数値Bをもとに掛け算を実行する
            int answer = paramDataSet.CalcParam[0].NumberA * paramDataSet.CalcParam[0].NumberB;

            // 掛け算の実行結果をビジネスロジック出力データセットに格納する
            CalcResultDataSet resultDataSet = new CalcResultDataSet();
            resultDataSet.CalcResult.AddCalcResultRow(answer);

            result.ResultData = resultDataSet;

            result.ResultString = BLogicResult.SUCCESS;

            return result;
        }
    }

BLogicParamからビジネスロジック入力データセットを取得し、そこに格納された数値Aと数値Bを取得して掛け算を行う。
掛け算の結果をビジネスロジック出力データセットに格納し、BLogicResultに設定する。
ビジネスロジックの実行に成功した場合、BLogicResultにSUCCESSを設定する。

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

ポイント!

ビジネスロジック設定ファイル(Config\BLogicConfiguration.config)に、3. ビジネスロジックの作成で作成した掛け算ビジネスロジッククラスの定義を追加する。
ビジネスロジック名（name属性）には"calc"を、type属性にはビジネスロジックのアセンブリ修飾名を設定する。
もし、CalcBLogicから別のビジネスロジックに変更したければ、変更するビジネスロジッククラスの型をtype属性に設定すれば良い。

BLogicConfiguration.config

    <?xml version="1.0" encoding="utf-8"?>
    <!--ビジネスロジック設定ファイルの設定-->
    <blogicConfiguration xmlns="http://www.terasoluna.jp/schema/BLogicSchema.xsd">
      <!-- 掛け算ビジネスロジックの定義 -->
      <blogic name="calc" type="TutorialServerWeb.BLogic.CalcBLogic, TutorialServerWeb" />
    </blogicConfiguration>

### 5. 計算画面のイベントの実装

「計算」ボタンのクリックイベントから、ビジネスロジックを実行するロジックを記述する。

#### 5.1 「計算」ボタンのクリックイベント

計算画面（CalcForm.aspx）に配置した「計算」ボタンのクリックイベントを追加する。
図3.3-8 「計算」ボタンのクリックイベントの追加

#### 5.2 「計算」ボタンのクリックイベントの実装

ポイント!

「計算」ボタンのクリックイベントで、ビジネスロジック生成機能が提供するBLogicFactoryクラスを用いて掛け算ビジネスロジックを生成し、生成したビジネスロジックで掛け算を実行する処理を実装する。
ビジネスロジックのExecuteメソッドの引数「BLogicParam」クラスおよび戻り値「BLogicResult」クラスはServer Frameworkが提供するクラスである。

CalcForm.aspx.cs

    /// <summary>
    /// 掛け算を実行する。
    /// </summary>
    /// <param name="sender">イベントのソース。</param>
    /// <param name="e">イベントデータを格納している<see cref="EventArgs"/>。</param>
    protected void ButtonCalc_Click(object sender, EventArgs e)
    {
        // ビジネスロジックの生成
        IBLogic blogic = BLogicFactory.CreateBLogic("calc");

        // ビジネスロジック入力クラスの作成
        BLogicParam param = new BLogicParam();

        // ビジネスロジック入力データセットの作成
        CalcParamDataSet paramDataSet = new CalcParamDataSet();
        paramDataSet.CalcParam.AddCalcParamRow(
            Int32.Parse(TextBoxNumberA.Text),
            Int32.Parse(TextBoxNumberB.Text));

        param.ParamData = paramDataSet;

        // ビジネスロジックの実行
        BLogicResult result = blogic.Execute(param);

        // ビジネスロジックの実行に成功した場合
        if (BLogicResult.SUCCESS.Equals(result.ResultString))
        {
            // ビジネスロジック出力データセットの取得
            CalcResultDataSet resultDataSet = (CalcResultDataSet)result.ResultData;

            TextBoxAnswer.Text = resultDataSet.CalcResult[0].Answer.ToString();
        }
    }

BLogicFactoryクラスのCreateBLogicメソッドを実行し、ビジネスロジックのインスタンスを生成する。CreateBLogicメソッドの第一引数に、4. ビジネスロジック設定ファイルの設定で設定した掛け算ビジネスロジックのビジネスロジック名"calc"を設定すると、ビジネスロジック設定ファイルの設定のtype属性で指定したクラスのインスタンスが生成される。
画面で入力された数値Aと数値Bをビジネスロジック入力データセットに格納し、ビジネスロジックを実行する。
ビジネスロジックが返却したBLogicResultにSUCCESSが格納されていた場合、ビジネスロジックの実行に成功したとみなし、BLogicResultからビジネスロジック出力データセットを取得する。そして、ビジネスロジック出力データセットに格納された掛け算の結果を、解のテキストボックス（TextBoxAnswer）に反映する。

### 6. メニュー画面のイベントの実装

#### 6.1 「計算画面」ボタンのクリックイベント

メニュー画面（MenuForm.aspx）に配置した「計算画面」ボタンのクリックイベントを追加する。
図3.3-9 「計算画面」ボタンのクリックイベントの追加

#### 6.2 「計算画面」ボタンのクリックイベントの実装

「計算」ボタンのクリックイベントに「計算画面」に遷移するロジックを実装する。
Transitメソッドの引数には、計算画面の画面ID"CalcForm"を設定する。"CalcForm"は画面遷移設定ファイルに設定されている。

MenuForm.aspx.cs

    /// <summary>
    /// 計算画面に遷移する。
    /// </summary>
    /// <param name="sender">イベントのソース。</param>
    /// <param name="e">イベントデータを格納している<see cref="EventArgs"/>。</param>
    protected void ButtonCalc_Click(object sender, EventArgs e)
    {
        WebUtils.Transit("CalcForm");
    }

## 動作確認

### 1. 計算画面への遷移

1. サーバアプリケーションを起動する(TutorialServerWebプロジェクトの発行)。
2. ブラウザのアドレス欄のURLに「http://localhost/tutorialServerWeb/Form/LogonForm.aspx」を入力し、移動ボタンをクリックし、正常にログオン画面が表示されることを確認する。
3. メニュー画面に配置された「計算画面」ボタンをクリックする。
4. 計算画面に遷移したことを確認する。

図3.3-10 計算画面への遷移

### 2. 計算の実行

1. 計算画面の数値Aおよび数値Bのテキストボックスに数字を入力し、「計算」ボタンをクリックする。
2. 解のテキストボックスに、数値Aと数値Bの値を掛けた結果が表示されることを確認する。

図3.3-11 計算の実行

次節：3.4 SQL文管理