ユーザ定義チェック
最終更新日: 2020年10月27日
R8 | R9
実装イメージ
図1は「会社名」項目に空白が含まれていた場合にエラーとする例です。エラーメッセージも任意に用意したものです。

注意
ユーザ定義チェックはリアルタイムでは行われません。保存ボタン押下後にサーバ側でチェックされます。
定義方法
モデル項目の詳細定義ダイアログで「入力チェック」タブをクリックして開きます。
「ユーザ定義」欄に式とエラーメッセージを入力します。
式の値が「真(true)」となれば正常とします。「偽(false)」のときエラーメッセージを表示します。
項目名はプレースホルダ ${...} で括ります。式中には関数も使用できます。

ワンポイント
式は「正常系(許可される)」内容を記述します。式の値が真(true)なら、エラーメッセージは表示されません。
警告の設定
警告を表示しますが、ここで保存ボタンを押下すると登録自体は妨げないという設定を行う場合は、入力欄右側のリストボックスから「(警告)」と付与されている選択肢を指定します。

よく使う条件式
項目 item1 の未入力をエラーとしたい。(Wagbyの必須指定は使わない)
NOT(ISEMPTY(${item1}))
項目 item1 が数字型で、0 以上であることを判定したい。
${item1} >= 0
項目 item1 に "0" から "9" までの数字が含まれていること。そうでなければエラーとなる。
ISINCLUDE(${item1},"0123456789")
項目 item3 に半角スペースが含まれていないこと。もし含まれていればエラーとなる。
NOT(ISINCLUDE(${item3}, " "))
チェックボックス項目 item4 は 3 つまで選択できる。4 つ以上選択された場合、エラーとなる。
CHECKED(${item4})<=3
日付時刻型項目 sdate の値が、本日より30日以前の場合、入力が行えないとする。
OR(
DATE(TODATE(${sdate})) >= DATE(TODAY()),
DATE(TODATE(${sdate})) + 30 < DATE(TODAY())
)
sdate は日付時刻型のため、関数 TODATE を介して日付型に変換している。
今日が5月18日のとき、今日及び未来の日付、そして一ヶ月より前(4月17日より前)は入力できるが、4月18日から5月17日まではエラーになる。
複数の項目による条件式
IF 関数を組み合わせることで、複数の項目の条件を一つの式で記述することができます。
次の例は item1 (文字列型) が "株式" の場合、item2 (数値型) は 100 を上限とする、という式です。
true
とfalse
を返すような記述になります。
IF(
EXACT(${item1},"株式"),
IF(
${item2} < 100, true, false
),
true
)
入力チェックスクリプトの利用
国際化対応
仕様・制約
- このチェックは「保存」などのボタンを押下したタイミングで、サーバ側で行われます。
- エラーとなった入力項目は、背景が赤となります。テキスト入力項目または日付時刻リストボックスが対象です。
- 繰り返し項目、繰り返しコンテナ、外部キー関連モデルに対する COUNT, SUM 等の集合処理関数を用いることはできません。
- 他の入力チェックは画面から入力された文字列に対して行われますが、この式を用いたチェックは唯一「ストアモデル」の項目を対象としています。(正確には、画面から入力された文字列から構成されたプレゼンテーションモデルからストアモデルへと変換したあと、そのストアモデルの値に対して式が適用されます。)ストアモデルとプレゼンテーションモデルの詳細は"モデルの基本"をお読みください。
- エラーメッセージに改行を含めることはできません。(スクリプトを使ってエラーメッセージを設定する場合、この制約を解除することができます。)
- 入力対象ではない項目に対する入力チェックを行うことはできません。具体的には計算式で求められる項目や、読み込み専用項目、参照連動項目です。
読み込み専用項目をチェックする方法
例として、項目 a, 項目 b, そして項目 sum を用意します。
ここで sum = a + b の関係があり、かつ sum の値は 100 でなければならない、という入力チェックを想定します。
この場合、sum 項目側に入力チェックを記述することはできません。
Wagby では読み込み専用項目(ユーザが直接編集できない項目; 自動計算項目もこれに含まれる)に対しては入力チェックを行わないようになっているためです。
そこで、項目 a の側に式を記述します。
${sum}==100