フィールド修飾子でフィールドの入力内容に制約を設ける

フォームからジョブフローへ渡す値の入力やテーブルなどオブジェクトに項目を登録・編集する際に、フィールドに対して何らかのルールを設けたい場面があるかと思います。
ジョブフローを実行するフォームを作成する」では、これを実現するフィールド修飾子について、enum 、object を指定する場合の例についてご紹介しました。
今回は、上記コラムでは挙げられていない制約に関するフィールド修飾子についてご紹介いたします。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.5.5.post11
OS CentOS 7.8.2003

または

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post4
OS CentOS 7.8.2003

または

ソフトウェア バージョン
Kompira Enterprise 1.6.8
OS CentOS Stream 8

フィールド修飾子のおさらい

本題に入る前に、フィールド修飾子について振り返ります。

フィールド修飾子は、オブジェクトのフィールド型に対し、表示の制御や制約内容を設定するものです。
Kompira Enterprise 上で作成可能なオブジェクトのうち、型オブジェクト設定オブジェクトフォームの3つで設定することができます。

具体的には、次の場面で設定した内容が適用されます。

・ 設定または独自の型オブジェクトの登録または変更
・ テーブルへ項目を登録、登録済みの項目を変更
・ フォーム上のパラメータ指定

フィールド修飾子は、JSON 形式 { “key”: “value” } で記入します。例えば、フィールドの初期値を hoge に設定したい場合は以下のようになります。

{ "default": "hoge" }

記入は以下のように、オブジェクトの登録・編集画面内の「フィールド修飾子」、またはその横のボタンを押すことで表示されるエディタから行います。

次に現在の Kompira Enterprise で用意されているフィールド修飾子についてご説明します。
以下の表は、使用可能なフィールド修飾子と対応するフィールド型をまとめたものです。

太字の項目が入力内容に制約を持たせるものになります。

※Kompira Enterprise のバージョンによっては使用できないフィールド修飾子もあります。
詳しくは Kompira Enterprise ドキュメント「5.2.2. フィールド修飾子」を参照してください。

フィールド修飾子名 設定可能なフィールド型
default 全フィールド
invisible 全フィールド
help_text 全フィールド
object Object
directory Object
filter Object
order_by Object
no_empty Object
enum Enum
pattern String
min_length String
max_length String
strip String, Text, LargeText, Password
key_strip Dictionary<T>
min_value Integer, Float
max_value Integer, Float
file_accept File
schemes URL

紹介するフィールド修飾子について

振り返りを踏まえて、制約に関わる以下7点を順に説明していきます。そのほかの修飾子に関しては Kompira Enterprise ドキュメント「5.2.2. フィールド修飾子」を参照してください。

目次

・ 入力可能な文字列の長さを指定する (min_length と max_length)

・ 入力可能な整数値を指定する (min_value と max_value)

・ 入力可能な文字列を正規表現で指定する (pattern)

・ Object 型フィールドで選択可能なオブジェクトを制限する (object)

・ 未選択を許可しない (no_empty)

・ アップロード可能なファイル形式を制限する (file_accept)

・ Array<T> 、Dictionary<T> 型へのフィールド修飾子 (バージョン1.6.0以降)

・Object 型フィールドで選択肢を絞り込みソート順を指定する(バージョン1.6.4以降)


入力可能な文字列の長さを指定する (min_length と max_length)

文字列を入力するための String 型フィールドに対して入力可能な文字列の長さに制約を設けることが可能です。
最小文字数・最大文字数を表す min_length と max_length の2つのフィールド修飾子が用意されています。

以下の例では、5文字以上10文字以内の文字列のみ許可します。

{ "min_length": 5, "max_length": 10 }

この設定を無視して範囲外の文字列を登録・変更しようとした場合、画面上に警告が表示されます。


入力可能な整数値を指定する (min_value と max_value)

整数値を入力するための Integer 型フィールドに対して入力可能な値に制約を設けることが可能です。
最小・最大値を表す min_value と max_value の2つのフィールド修飾子が用意されています。

以下の例では、1~10の範囲の整数値のみ許可します。

{ "min_value": 1, "max_value": 10 }

この設定を行うと、フィールド内の上下ボタンによる値変更も設定した最小・最大値が反映され、それ以上、それ以下には変更できなくなります。
フィールドへ直接入力した場合、設定した範囲外の値を入力することは可能ですが、保存する際に画面上に警告が表示されます。


入力可能な文字列を正規表現で指定する (pattern)

String 型フィールドに対して pattern を指定することで、入力可能な文字列の制約を正規表現で設定することができます。
例えば、英数字のみ入力できるようにしたい場合、以下のようなパターン文字列を指定します。

{ "pattern": "^[a-zA-Z0-9]+$" }

この設定を無視して、登録・変更しようとした場合、画面上に警告が表示されます。

pattern を活用することで、 String 型フィールドへ独自の制約を設けることができます。

例 : 03からはじまるハイフンあり電話番号 (03 – 半角数字4桁 – 半角数字4桁) のみ許可

{ "pattern": "^03-\\d{4}-\\d{4}$" }

例 : 郵便番号 (半角数字3桁 – 半角数字4桁) のみ許可

{ "pattern": "\\d{3}-\\d{4}" }

例 : 24時間制の時刻 (hh : mm : ss 、0埋め2桁) を表す文字列のみ許可

{ "pattern": "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])" }

Object 型フィールドで選択可能なオブジェクトを制限する (object)

フィールド修飾子 object を使って、フィールドで選択可能なオブジェクトの型を制限する方法を紹介します。

システムで定義されている型オブジェクトに制限する

システム定義型ディレクトリ /system/types に格納されている型オブジェクトが指定できます。

例えば設定オブジェクトのみ選択可能にしたい場合、以下のように object 修飾子に /system/types/Config を指定します。

{ "object": "/system/types/Config" }

なお、特定ディレクトリ配下の設定オブジェクトのみ参照させる場合は、directory 修飾子を使用して参照できるディレクトリを制限します。
以下の例ではフォームと同じディレクトリ下の Configs フォルダにある設定オブジェクトに限定しています。

{ "object": "/system/types/Config", "directory": "./Configs" }

独自に定義した型オブジェクトに制限する

システムで定義されている型オブジェクトと同様に、object 修飾子に独自の型オブジェクトを指定します。
以下の例では、フォームと同一ディレクトリに独自に定義した、SampleType を型オブジェクトに指定しています。

{ "object": "./SampleType" }


未記入を許可しない (no_empty)

フィールド修飾子 no_empty を指定することで、該当フィールドの記入を必須にできます。
以下のように設定します。

{ "no_empty": true }


アップロード可能なファイル形式を制限する (file_accept)

File 型フィールドを使用する際に、利用するファイルの拡張子を制限したい場合があるかと思います。
フィールド修飾子 file_accept を用いることで、File 型フィールドにアップロードするファイルの拡張子を「.(拡張子)」形式で指定することができます。
以下の例では、.txt 形式の選択のみ許可します。

{ "file_accept": ".txt" }

フィールド修飾子を設定すると、以下のようにファイル選択ダイアログ上で選択可能なファイル形式が制限されます。

ただし、ダイアログ上のファイル形式の種類 (上記画像では右下の Text Document (*.txt) の部分) はユーザーで変更可能なため、この設定だけではほかのファイル形式を選択できてしまいます。
より厳格に制限するには、例えば file_accept の設定と合わせて、以下のようにジョブフロー側でのファイル形式チェック処理が必要になります。

|file|

# 受け取ったファイル型データのキーnameを参照し、許可されたファイル形式かどうかを判断
{ if file["name"] !~ g"*.txt" |
    abort()
}

Array<T> 、Dictionary<T> 型へのフィールド修飾子 (バージョン1.6.0以降)

バージョン1.6.0以降からフィールド種別に Array 型、Dictionary 型 を選択する場合、配列および辞書の各要素を何型にするか指定できるようになりました。例えば、フィールド種別に Array<Integer> を選択した場合、各要素が Integer の配列になります。

これらにも本稿で説明した設定は適用可能です。例えば Array<Enum> 型に以下のようなフィールド修飾子を設定すると、各要素に A、B、C のどれかが入る配列を作成できます。

{ "enum": ["A", "B", "C"] }


Object 型フィールドで選択肢を絞り込みソート順を指定する(バージョン1.6.4以降)

修飾子 object および directory を使うと、選択可能なオブジェクトが多くなる場合があり、絞り込みや並べ替えの条件を追加したい場面があるかと思います。
バージョン1.6.4から新しいフィールド修飾子 filter が指定できるようになりました。filter に設定できる絞り込み条件は、ディレクトリオブジェクトの find()メソッドのパラメータを辞書形式で指定できます。
指定できるパラメータについて詳しくは Kompira Enterprise ドキュメント「5.3.2.2. ディレクトリ(Directory) メソッド」を参照して下さい。

また、ソート順は新しいフィールド修飾子 order_by にて指定できます。ソート順には一般オブジェクトに共通の属性名 (abspath、display_name など) を指定することができます。 また、”-abspath” などと先頭に “-” を記述するとソート結果が逆順となります。デフォルトは昇順です。

例えば、以下のようなアカウント情報があった時に、Object 型に以下のようなフィールド修飾子を設定すると、各要素に development1、development2、development3 のどれかが入る配列を作成できます。

{
  "directory": "./account",
  "filter": {
    "type_object": "/system/types/AccountInfo",
    "abspath__contains": "development"
  },
  "order_by": "abspath" 
}


まとめ

本記事では、制約に関するフィールド修飾子の使い方をご紹介しました。
フィールド修飾子を設定することで、人間の操作が必要な場面での入力負担の軽減や入力ミスの防止が期待できます。
型オブジェクト、設定オブジェクト、フォームを用意する際は、合わせてフィールド修飾子の使用もご検討下さい。

TOP