フォームブリッジ テーブル上で条件付きで最大値を設定したい

いつもお世話になっております。

フォームブリッジのサブテーブル上で条件付きで数字の最大値を設定したいと考えています。

例えば

最大値設定フィールド 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様

ありがとうございます。

うまく動作することが出来ました。本当にありがとうございました。

非常に参考になり、まだまだ勉強不足を実感しています(-_-:wink: