【フォームブリッジ】文字列(複数行)フィールドの文字数上限チェック

フォームブリッジに設置した文字列(複数行)フィールドに文字数上限のチェックを組み込みたいと考えております。

 

確認画面表示前にチェックし、エラーの場合、入力画面へ戻るようにしたいのですが、バリデーションチェック及びエラーメッセージの記法は製品サイトにあるのですが、その他のチェックやエラー時に入力画面へ戻る方法がなく、どのようにすれば変わらず、対応に困っております。

 

fb.events.form.createdへの組み込みでは、それっぽいのができませしたが、kintoneのイベント(保存処理前にチェックし、エラーで返す)のような挙動はできそうになく困っております。

ご教授頂きますと助かります。

 

以下fb.events.form.createdで試したコード

(function () {

“use strict”;

constfCode=“comDetail”;

// 対象フィールドの配列インデックスを取得する

letfIndex;

// 画面表示時

fb.events.form.mounted= [(state) => {

console.log(state);

returnstate;

}];

// 確認画面表示前

fb.events.form.created= [(state) => {

console.log(state);

state.fields.forEach((element, index) => {

if (element.code==fCode) {

fIndex=index;

}

});

// 独自チェックを格納格納

state.fields[fIndex].validations.push(

{

‘param’: [],

‘rule’:‘custom_vali’

}

);

returnstate;

}];

// 独自チェック処理格納

fb.addValidators= (state) => {

console.log(state);

return {

‘custom_vali’: {

‘getMessage’: (fCode, params) => {

console.log(fCode);

console.log(params);

return’hei!';

},

‘validate’: (value, params) => {

console.log(value);

console.log(params);

if (5>=value.length) {

returntrue;

}

returnfalse;

}

}

}

}

})();

state.fields の対象フィールドを field とすると

field.validations.push({rule: ‘max’, params: [10]})

のように設定することで文字数上限のバリデーションを追加できます。

 

もし、入力時はバリデーションせずに確認画面に行く前にバリデーションしたい場合は、fb.events.form.confirm イベントで上記のようにバリデーションを追加することで実現できるかと思います。

 

以上、参考になりますでしょうか?

ご教授ありがとうございます。

とても助かりました。

 

ちなみになのですが、

 

‘validate’: (value, params) => {

     console.log(value);

     console.log(params);

     if (5>=value.length) {

     return true;

}

return false;

 

ここですが、返り値がfalseだとエラー、trueだとOKという形ですが、

もし、独自のチェックを組み込む場合、上記のようにチェックして返り値

でfalse/trueを渡せばよいのでしょうか。

その認識で問題ないかと思います。

上記の場合は、if文を使わずに return 5 \>= value.length にした方がスッキリするかと思います。

合わせてご教授願いたいのですが、

保存前にあるフィールドの値によってはチェックさせるような処理を組み込みたいのですが、うまくいきません。

チェック中に入力された値はどのように取得するのでしょうか。

(function () {

“use strict”;

// 確認画面表示前

fb.events.confirm.created= [(state) => {

// 独自チェックを格納格納

state.fields[0].validations.push(

{

‘param’: [],

‘rule’:‘custom_vali’

}

);

return state;

}];

// 独自チェック処理格納

fb.addValidators= (state) => {

return {

‘custom_vali’: {

‘getMessage’: (fCode, params) => {

return’hei!';

},

‘validate’: (value, params) => {

console.log(state.record);

if(state.record.prefecture.value==‘北海道’){

returnfalse;

}

returntrue;

// if (5 >= value.length) {

// return true;

// }

// return false;

}

}

}

}

})();

この質問と同じ趣旨となります

https://developer.cybozu.io/hc/ja/community/posts/115020432223–%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8-%E9%A0%85%E7%9B%AE%E3%81%AE%E5%80%A4%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E5%BF%85%E9%A0%88%E3%81%AB%E3%81%99%E3%82%8B

過去の質問等から対応としては、非表示の制御用フィールドを用意し、そこを必須とする

チェックしたい値によって、制御用フィールドへ値をセットする、しないで制御するしかないのかなと。

エラーメッセージは、表示できるのでフィールドの下部にはだせませんが、エラーメッセージで対応する形ですかね。

先にバリデーションに関する質問に回答させていただきますね!

 

 

> 過去の質問等から対応としては、非表示の制御用フィールドを用意し、そこを必須とする

> チェックしたい値によって、制御用フィールドへ値をセットする、しないで制御するしかないのかなと。

これは独自バリデーションに関するカスタマイズができなかった頃の質問かと思います。

今であれば、独自バリデーションで対応するのが良いかと思います。

 

> あるフィールドの値によってはチェックさせるような処理を組み込みたい

 

コードを拝見させていただいたところ、 prefecture フィールドが「北海道」でなければならないバリデーションかと思います。

 

prefecture フィールドが field[0] の場合、以下のようなコードで実現できるかと思います。

(function () {
'use strict';

fb.events.form.created.push(function (state) {
state.fields[0].validations.push({
params: [],
rule: 'custom_validation1'
});
return state;
});

fb.addValidators = function (state) {
return {
custom_validation1: {
getMessage: function (fieldCode, params) {
return '任意のメッセージ1';
},
validate: function (value, params) {
return value === '北海道';
}
}
};
};
})();

 

以上、参考になりますでしょうか?

 

すみません、表現とコードがよくなかったです。

例えば、選択肢が「北海道」の時、別のフィールドの値をチェックする(例えば、別フィールドに入力された市外局番があっているかなど)

ような処理を検討しております。

 

バリデーションを組み込んだフィールドの値は引数に存在するのですが、ほかのフィールドの値が取得できないため困っております。

mharumさん

state.fields[0].validations.push({
params: [state.record.prefecture],
rule: 'custom_validation1'
});

のようにparamsで値を渡して、

validate: function (value, [prefecture])

という感じで値を受け取るといいかと思います。

 

以上、参考になりますでしょうか?

 

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。