見出し画像

【フォームブリッジ】テーブルのドロップダウンの値に応じて動的にフィールド編集を制御する

この記事では、kintoneのプラグインフォームブリッジのドロップダウンフィールドの値に応じて、特定のフィールドの編集を禁止するカスタマイズを紹介します。

サンプルコード:

(function () {
    "use strict";

    // テーブルとフィールドのコードを宣言
    const tableCode = "テーブルフィールドコード";
    const triggerFieldCode = "ドロップダウンフィールドコード";
    const fieldsToControl = ['フィールドコード1', 'フィールドコード2']; // 編集を制御したいフィールドのコード

    // テーブル内のドロップダウンフィールドの変更を検知し、条件に応じて編集禁止を設定
    fb.events.fields[tableCode].fields[triggerFieldCode].changed = [function (state, params) {
        // ドロップダウンフィールドの変更があった行の参照を取得
        const rowSelector = `[data-vv-name="${tableCode}-${params.index}-${triggerFieldCode}"]`;
        const rowElement = document.querySelector(rowSelector).closest('tr');

        if (params.value === 'その他') {
            // 条件に一致する場合、特定のフィールドを編集禁止にする
            disableFields(rowElement, fieldsToControl, params.index);
        } else {
            // 条件に一致しない場合、フィールドの編集禁止を解除
            enableFields(rowElement, fieldsToControl, params.index);
        }
    }];

    // 指定したフィールドを編集禁止にする関数
    function disableFields(rowElement, fieldCodes, rowIndex) {
        fieldCodes.forEach(code => {
            const input = rowElement.querySelector(`[data-vv-name="${tableCode}-${rowIndex}-${code}"] input`);
            if (input) input.disabled = true;
        });
    }

    // 指定したフィールドの編集禁止を解除する関数
    function enableFields(rowElement, fieldCodes, rowIndex) {
        fieldCodes.forEach(code => {
            const input = rowElement.querySelector(`[data-vv-name="${tableCode}-${rowIndex}-${code}"] input`);
            if (input) input.disabled = false;
        });
    }

})();

使い方

下記の部分をフォームブリッジに合わせて変更してください。

    const tableCode = "テーブルフィールドコード";
    const triggerFieldCode = "ドロップダウンフィールドコード";
    const fieldsToControl = ['フィールドコード1', 'フィールドコード2']; 

課題点

その場で編集をできないようにするだけなので、先に値をいれてからドロップダウンを変更されてしまうと、値を入力できてしまいます。

下記を参考に、編集を禁止した箇所に値をセットして、不正な値が入力されないようにしたいところです。

フォームブリッジのJavascriptカスタマイズでハマったこと、工夫したこと

ちょっと記事としては中途半端な感じになってしまいましたが、今回は以上です。

この記事が気に入ったらサポートをしてみませんか?