フォームブリッジでのフィールド入力値制御(formbridge×JavaScript)
目次
※本ページ先頭に戻りたい場合は画面右下のボタンを押して下さい。
概要
formbridgeの特定フィールドにて
「●文字以上、●文字以下に文字数が収まっていない場合はエラー」と制御する事で、
想定パターンのみでしかデータ送信させないようにする
デモ動画
- 「童話_タイトル」フィールド
→入力文字数2文字以上、50文字以下で無い場合にエラー表示 - 「童話_本文」フィールド
→入力文字数20文字以上、200文字以下で無い場合にエラー表示
formbridge(フォームブリッジ)とは?
プログラムを作成した理由
担当者がformbridgeにデータ入力、回答をして頂く業務があるのですが、
下記のように「注意事項」を記載しているにも関わらず、守られない事が多々あります
- 「タイトル(50文字まで)」フィールド
・100文字以上記載してしまう
・入力が面倒なのか「-」と1文字だけ入れる - 「郵便番号(ハイフン込み)」フィールド
・ハイフンの記載が無い - 「商談日時(時刻も設定する事)」フィールド
・時刻が初期値のまま「2022/09/18 00:00:00」で設定してしまう
これらに対して、
「何で注意書き読まずに入力してくるんだろう…」と嘆いていても仕方ないので、
「そもそも正しい入力方法でない場合はエラーで回答させない」
という方針で対応せざるを得なくなりました←
ソースコード
(※複数フィールドのエラー制御)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /* 概要:FBにてフィールド制御 */ (function () { 'use strict'; // FBが開かれた時のイベント // 参考:https://developer.cybozu.io/hc/ja/community/posts/900001013363-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E3%81%8C%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84 fb.events.form.created.push(function (state) { // 「童話_タイトル」に「title_err_event」イベントを紐づける state.fields.find(field => field.code === '童話_タイトル').validations.push({ // 対象フィールドのフィールドコード params: [], rule: 'title_err_event' }); // 「童話_本文」に「contents_err_event」イベントを紐づける state.fields.find(field => field.code === '童話_本文').validations.push({ // 対象フィールドのフィールドコード params: [], rule: 'contents_err_event' }); return state; }); // エラーメッセージ内容、条件設定 // ※対象フィールドが1文字でも変わったら、「validate」が常に走る // 参考:https://developer.cybozu.io/hc/ja/community/posts/900001013363-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E3%81%8C%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84 fb.addValidators = function (state) { // エラーメッセージ定義 const CONTENTS_ERR_MSG = "20文字以上~200文字以内で入力してください" const TITLE_ERR_MSG = "2文字以上~50文字以内で入力してください" return { // 「童話_タイトル」イベント // ※上記「rule: '●●'」と一致していれば、名称は何でもOK title_err_event: { // フィールド直下に表示されるエラーメッセージの設定 getMessage: function (fieldCode, params) { return TITLE_ERR_MSG; }, // エラーメッセージ表示/非表示設定 validate: function (value, params) { // エラーフラグ初期化 let ok_flg = true // 指定文字数に収まっていない場合はエラー if(value.length > 50 || 2 > value.length){ ok_flg = false } // False:エラー表示 // True:エラー非表示 return ok_flg; } }, // 「童話_本文」イベント // 上記「rule: '●●'」と一致していれば、名称は何でもOK contents_err_event: { // フィールド直下に表示されるエラーメッセージの設定 getMessage: function (fieldCode, params) { return CONTENTS_ERR_MSG; }, // エラーメッセージ表示/非表示設定 validate: function (value, params) { // エラーフラグ初期化 let ok_flg = true // 指定文字数に収まっていない場合はエラー if(value.length > 200 || 20 > value.length){ ok_flg = false } // True:エラー非表示 // False:エラー表示 return ok_flg; } } }; }; })(); |
ソースコード
(※1個のフィールドのみエラー制御)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | /* 概要:FBにてフィールド制御 */ (function () { 'use strict'; // FBが開かれた時のイベント // 参考:https://developer.cybozu.io/hc/ja/community/posts/900001013363-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E3%81%8C%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84 fb.events.form.created.push(function (state) { // 「童話_タイトル」に「title_err_event」イベントを紐づける state.fields.find(field => field.code === '童話_タイトル').validations.push({ // 対象フィールドのフィールドコード params: [], rule: 'title_err_event' }); return state; }); // エラーメッセージ内容、条件設定 // ※対象フィールドが1文字でも変わったら、「validate」が常に走る // 参考:https://developer.cybozu.io/hc/ja/community/posts/900001013363-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E3%81%8C%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84 fb.addValidators = function (state) { // エラーメッセージ定義 const TITLE_ERR_MSG = "2文字以上~50文字以内で入力してください" return { // 「童話_タイトル」イベント // ※上記「rule: '●●'」と一致していれば、名称は何でもOK title_err_event: { // フィールド直下に表示されるエラーメッセージの設定 getMessage: function (fieldCode, params) { return TITLE_ERR_MSG; }, // エラーメッセージ表示/非表示設定 validate: function (value, params) { // エラーフラグ初期化 let ok_flg = true // 指定文字数に収まっていない場合はエラー if(value.length > 50 || 2 > value.length){ ok_flg = false } // False:エラー表示 // True:エラー非表示 return ok_flg; } } }; }; })(); |
ソースコード_解説
:field.code
エラー制御を実施したいフィールドを指定
:rule
実行イベント名を自由に指定してOK
※今回は「タイトルのエラーイベント」という意味で「title_err_event」と指定
2、「実行イベント名」を指定し、エラー条件、文章を設定
:実行イベント名
「rule」で設定した実行イベント名を記載
:「getMessage」の返却値
フィールド直下に表示したいエラー文章を指定
:エラー発生条件をTrue or Falseで設定
- False:エラーを表示する
- True:エラーを表示しない
※「正常な値の場合はTrue」と考えてもOK
:で設定したフラグを指定
3、上記1~2を制御したいフィールド全てに設定する
※ソースコードでは下記2個のフィールドを制御している為、上記1~2処理を2回記載している
- 童話_タイトル
- 童話_本文
最後に
上記の実装方法さえ理解していれば、
どの種類のフィールドでも制御可能なのが本コードの魅力です
例えば、
「商談日時」フィールドにて下記のような
「商談したい日時」として明らかにおかしい日時を入力した場合に、エラーと表示する事も可能です
- 過去日
- 定時(9:00~18:00)外
- 土日祝
編集履歴
2022/09/18 新規作成