目次 > 第3章 サンプルアプリケーション構築 > 3.4 入力値検証

# 3.4 入力値検証

## 概要

本節では、Server Frameworkが提供する入力値検証機能を用いて、ビジネスロジックの入力データセットに対して入力値検証を実行する方法を説明する。詳細は、機能説明書『FB-01 リクエストコントローラ機能』、『CM-02 入力値検証機能』を参照のこと。

### 動作イメージ

図3.4-1 動作イメージ

- 対象画面
  - 計算画面
- 処理概要
  - 入力値検証成功の場合
    1. (クライアント)計算ボタンを押下すると、数値をサーバへ送信する。
    2. (サーバ)数値に対して、入力値検証を行う。
    3. (サーバ)計算ビジネスロジックが数値を受け取り、数値の積を計算する。
    4. (サーバ)計算結果をクライアントへ送信する。
    5. (クライアント)サーバで実行された計算ビジネスロジックの結果を受信して、計算結果をテキストボックスに表示する。
  - 入力値検証失敗の場合
    1. (クライアント)計算ボタンを押下すると、数値をサーバへ送信する。
    2. (サーバ)数値に対して、入力値検証を行う。
    3. (サーバ)入力値検証エラーの内容をクライアントへ送信する。
    4. (クライアント)サーバから返却されたエラー内容を表示する。

### サーバが受信するリクエストの仕様

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

- リクエストヘッダ

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

> Key値 | Value値 | 内容
> RequestName | calc | サーバで実行するビジネスロジックを特定するためのリクエスト名。サーバ側のビジネスロジック設定ファイルに定義するビジネスロジック名と対応する。

- リクエストボディ

      <CalcFormDs xmlns="http://com.example.dotnet/CalcFormDs.xsd">
        <CalcTable>
          <NumberA>12</NumberA>
          <NumberB>2</NumberB>
        </CalcTable>
      </CalcFormDs>

### サーバが送信するレスポンスの仕様

画面から入力された数値が入力値検証の場合、入力値検証用XMLとして返却する。

- レスポンスボディ

      <errors>
        <error>
          <error-message>"数値A" には 200 以下の範囲の数値を入力してください。</error-message>
          <error-code>NumberA</error-code>
          <error-field>CalcTable[1]/NumberA</error-field>
        </error>
      </errors>

## 作業手順

- 作成イメージ

図3.4-2 作業イメージ

1. 入力値検証設定ファイルの確認
2. 入力値検証用の属性の追加

### 1. 入力値検証設定ファイルの確認

入力値検証設定ファイル(Validation/CalcFormDsValidation.config)の設定を確認する。 本チュートリアルでは、クライアントで入力した数値が200以下でない場合、入力値検証エラーとする。範囲チェックには、TERASOLUNAが提供する入力値検証クラスの中のInt型範囲チェッククラス(IntRangeValidator)を利用する。入力値検証クラスの詳細な設定方法については、機能説明書『CM-02 入力値検証機能』を参照すること。

表3.4-2 入力値検証内容

テーブル名 | カラム名 | 利用する入力値検証クラス | 検証内容
CalcTable | NumberA | IntRangeValidator | 200より大きい数値を入力値検証エラーとする。
CalcTable | NumberB | IntRangeValidator | 200より大きい数値を入力値検証エラーとする。

CalcFormDsValidation.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="validation" type="Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.ValidationSettings, Microsoft.Practices.EnterpriseLibrary.Validation, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </configSections>
      <validation>
        <!-- ① データテーブル名 -->
        <type assemblyName="TutorialServerRich" name="TutorialServerRich.Dto.CalcFormDs+CalcTableRow">
          <!-- ② ルールセット名 -->
          <ruleset name="Default">
            <properties>
              <!-- ③ データセットのカラム名 -->
              <property name="NumberA">
                <!-- ④ Int型範囲チェック -->
                <validator lowerBound="0" lowerBoundType="Ignore" upperBound="200"
                           upperBoundType="Inclusive" negated="false" messageTemplate=""
                           messageTemplateResourceName="" messageTemplateResourceType="" tag="数値A"
                           type="TERASOLUNA.Fw.Common.Validation.Validators.IntRangeValidator, TERASOLUNA.Fw.Common" name="Int Range Validator" />
              </property>
              <property name="NumberB">
                <validator lowerBound="0" lowerBoundType="Ignore" upperBound="200"
                           upperBoundType="Inclusive" negated="false" messageTemplate=""
                           messageTemplateResourceName="" messageTemplateResourceType="" tag="数値B"
                           type="TERASOLUNA.Fw.Common.Validation.Validators.IntRangeValidator, TERASOLUNA.Fw.Common" name="Int Range Validator" />
              </property>
            </properties>
          </ruleset>
        </type>
      </validation>
    </configuration>

表3.4-3 入力値検証設定ファイルの設定項目

項番 | 内容
① | 入力チェックを行うデータテーブルのアセンブリ名及び完全修飾名を設定する。
② | 入力チェックを行うルールセット名を設定する。
③ | ①で設定したテーブルに存在するカラム名を設定する。
④ | Int型範囲チェックなどの入力値検証情報を設定する。複数設定可能。

#### 備考

実際に入力値検証設定ファイルを編集する際に入力ミスが発生する可能性が高いため、TERASOLUNAが提供する項目テンプレートのValidationConfiguration.config、またはEnterprise Library Configuration Editorを利用して編集することをお勧めする。

### 2. 入力値検証用の属性の追加

入力値検証機能を実行するためには、ビジネスロジック(CalcBLogic.cs)の属性に入力値検証設定ファイルのパスやルールセット名を指定しなければならない。以下に設定する項目を示す。

表3.4-4 入力値検証属性の設定項目

属性 | プロパティ | 設定値 | 説明
ValidationInfo | ValidationFilePath | "Validation/CalcFormDsValidation.config" | 入力値検証設定ファイルのパス。
ValidationInfo | RuleSet | "Default" | ルールセット名。省略すると、"Default"になる。

CalcBLogic.cs

    /// <summary>
    /// 掛け算を行うビジネスロジックです。
    /// </summary>
    [ControllerInfo(RequestType=RequestTypeNames.NORMAL, InputDataSetType=typeof(CalcFormDs)]
    [ValidationInfo(ValidationFilePath = @"Validation\CalcFormDsValidation.config", RuleSet = "Default")]
    public class CalcBLogic : IBLogic
    {
      // メンバはXML通信を参照すること。
    }

## 動作確認

1. サーバアプリケーションを起動する(TutorialServerRichプロジェクトの発行)。
2. クライアントアプリケーションを起動する(TutorialClient.exeの押下)。
3. ユーザID"tera"、パスワード"soluna"と入力し、ログオンボタンを押下する。

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

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

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

5. 数値Aに"201"、数値Bに"100"を入力後、計算ボタンを押下し、掛け算処理失敗画面が表示されることを確認する。

図3.4-5 計算画面⇒計算失敗画面

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

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

次章：第4章 Appendix