見出し画像

kintoneでチェックボックスの値によって必須を分けるJavaScript

最近kintoneのカスタマイズにかかわるようになってきたので備忘録として書いていこうと思います!

やりたいこと

  1. チェックボックスのON/OFFによってフィールドの表示/非表示を切り替える

  2. チェックボックスのON/OFFによって保存時にフィールドの値が入っているかをチェックして保存させるかを判定する

  3. (おまけ)チェックボックスをOFFにしたらフィールドの値を消す

サンプル

1.従業員情報の退職済チェックボックスがONの時に退職日フィールドを表示させる

左が退職フラグOFF、右が退職フラグON

2.保存時に退職フラグがONなのに退職日がないときはエラーを出す

退職フラグがONだが退職日に何も入力されていないためエラーにする

3.(おまけ)退職日を入力後に退職フラグをOFFにしたら退職日を消す

退職日フラグがOFFになったになったら退職日を消す

JavaScriptの内容

コードの内容

レコード一覧画面、新規レコード追加画面、レコード詳細画面を対象にイベントを設定してみました。

(() => {
    'use strict';
    /**
     * 退職日フィールドの表示/非表示を制御する関数
     */
    // 退職フラグをチェックするイベント
    const chEvents = [
        'app.record.create.show',
        'app.record.edit.show',
        'app.record.detail.show',
        'app.record.index.edit.show',
        'app.record.create.change.退職フラグ',
        'app.record.edit.change.退職フラグ',
        'app.record.index.edit.change.退職フラグ'
    ];
    kintone.events.on(chEvents, (e) => {
        const record = e.record;

        // 退職フラグの内容を確認する
        if (record.退職フラグ.value[0] == '退職済') {
            // 退職済フラグがONの時は退職日のフィールドを有効化する。
            record.退職日.disabled = false;
        } else {
            record.退職日.disabled = true;
            record.退職日.value = "";
        }
        return e;
    });


    /**
     * 保存時に退職日フラグがONのとき、退職日を必須とする関数
     */
    // 保存するときのイベント
    const saveEvents = [
        'app.record.create.submit',
        'app.record.edit.submit',
        'app.record.index.edit.submit'
    ];
    kintone.events.on(saveEvents, (e) => {
        const record = e.record;
        console.log(record);
        // 退職フラグの内容を確認する
        if (record.退職フラグ.value[0] == '退職済') {
            // 退職済フラグがONの時は退職日のフィールドが記入済みかを確認する。
            if (!record.退職日.value) {
                // 保存させないようにする
                e.error = '退職日を入力してください';
                record.退職日.error = '必須項目です';
            }  
        }
        return e;
    });

})();

つまづいたところ

保存時に退職日の入力を判定する部分の条件式ではじめは
if (record.退職日.value == '') { ~ }
としていたのですがレコード一覧でしか発火しないという事象が。。
調べたところレコード一覧ではrecord.退職日.valueは””となっていたのですがレコード新規登録画面、レコード編集画面ではundefinedとなっていました。
トラップ、、、

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