いつもお世話になっております。
フォームブリッジのサブテーブル上で条件付きで数字の最大値を設定したいと考えています。
例えば
最大値設定フィールド suryomax
テーブル名 table3 に
フィールドコード syouhincd と suryo
がある場合 syouhincd が01の場合 suryoの最大値を10に設定して11以上だとエラーを返すようにしたいと思います。
を使用していろいろ試行錯誤をしたのですがうまく動作しません。
お手数をおかけしますが、どなたかご教授をお願いいたします。
Validation rule
を利用したほうが良いのか、初心者でうまく解決できませんでした。
試したコードは以下の通りです。
(function () {
“use strict”;
fb.events.fields.table3.fields.suryo.changed, function (event){
var record = event.record;
var p1 = Number(record[“suryo”].value);
var p2 = Number(record[“suryomax”].value);
var p3 = record[“syohincd”].value;
// 数量が一定数を超えるとエラーになる
if (p1 > p2 && p3 == “01”) {
event.record.suryo.error = ‘最大9個までです。’;
}
return event;
};
})();
コード間違えていました
fb.events.fields.table3.fields.suryo.changed, function (event){
のところは
fb.events.fields.table3.fields.suryo.changed = function (event){
で作成しています。
この時コンソールで
vue.runtime.esm.js:1888 TypeError: Cannot read properties of undefined (reading ‘params’)
が出力されます。
tanakaさん
こんにちは。
FormBridgeではkintoneのようにevent.errorが使えません。
代わりにバリデーション設定が必要です。
詳細はコードにコメント入れましたのでご確認ください。
fb.addValidators = function(state) {
return {
max_validation: {
// エラーメッセージ内容
getMessage: function(fieldCode, params) {
return '最大' + state.record.suryomax.value + '個までです。';
},
// エラー判定条件
validate: function(value, params) {
// valueはtable3と同値
for (let i = 0; i < value.length; i++) {
// 行のsuryoが最大値を超える かつ 行のsyouhincd='01'の場合はエラー
if (value[i].value.suryo.value > state.record.suryomax.value && value[i].value.syouhincd.value == '01') {
return false;
}
}
return true;
}
}
}
};
fb.events.form.created = [function(state) {
// 全フィールドからエラーを出したいフィールドを検索
state.fields.filter(function(field) {
// エラーを出したいフィールド(※サブテーブル内のフィールドが指定できないためサブテーブルを指定)
return field.code === 'table3';
})[0].validations.push({
params: [],
rule: 'max_validation' // fb.addValidatorsで定義した中から適用したいバリデーション名
});
return state;
}];
koichi様
ありがとうございます。
うまく動作することが出来ました。本当にありがとうございました。
非常に参考になり、まだまだ勉強不足を実感しています(-_-