kintone | ドロップダウンの項目の選択肢を取得する方法

テーブル(サブテーブル)内のドロップダウンや入れ子になっていないドロップダウンに設定されて選択肢を取得するサンプル。

ドロップダウンの選択肢を取得

フィールドコードが「明細テーブル」というテーブル内のフィールドコードが「項目リスト」のドロップダウンの選択肢を取得します。

ドロップダウンがテーブルの外など入れ子になっていない場合は、サブテーブルのフィールドコードの値は null にします。

(function () {
    "use strict";

    // イベントの種類を指定
    var events = [
        'app.record.create.show', // 
        'app.record.edit.show',   // 
        // 'app.record.detail.show'
    ];

    // 指定したイベントが発生した際に実行
    kintone.events.on(events, function (event) {
        // アプリID
        var appId = kintone.app.getId();
        // ドロップダウンフィールドコード
        var dropdownFieldCode = '項目リスト';
        // サブテーブルのフィールドコード(サブテーブル外の場合は省略可)
        var subtableFieldCode = '明細テーブル'; // フィールドコード Or null

        // ドロップダウンの選択肢を取得し、処理を行う
        fetchDropdownOptions(appId, subtableFieldCode, dropdownFieldCode);

        return event; // イベント処理後のレコードオブジェクトを返す
    });


    /**
     * 指定されたアプリID、サブテーブルのフィールドコード、ドロップダウンのフィールドコードから選択肢を非同期で取得する
     * 
     * @param {Number} appId
     * @param {String|null} subtableFieldCode
     * @param {String} dropdownFieldCode
     * 
     * @returns {Promise<Object>} 
     */
    function getDropdownOptions(appId, subtableFieldCode, dropdownFieldCode) {
        return new Promise((resolve, reject) => {
            var params = { app: appId };
            var url = '/k/v1/app/form/fields.json'; // 

            kintone.api(kintone.api.url(url, true), 'GET', params, function (resp) {
                // サブテーブルフィールドコードが指定されている場合
                if (subtableFieldCode && resp.properties[subtableFieldCode] && resp.properties[subtableFieldCode].type === 'SUBTABLE') {
                    var subtableFields = resp.properties[subtableFieldCode].fields;
                    if (subtableFields[dropdownFieldCode] && subtableFields[dropdownFieldCode].type === 'DROP_DOWN') {
                        resolve(subtableFields[dropdownFieldCode].options);
                    } else {
                        reject(new Error('指定されたドロップダウンフィールドが見つかりません。'));
                    }
                } else if (resp.properties[dropdownFieldCode] && resp.properties[dropdownFieldCode].type === 'DROP_DOWN') {
                    // サブテーブルフィールドコードが指定されていない場合(フォーム全体のフィールド)
                    resolve(resp.properties[dropdownFieldCode].options);
                } else {
                    reject(new Error('指定されたフィールドが見つかりません。'));
                }
            }, function (error) {
                reject(error); // APIの呼び出しに失敗した場合、Promiseを拒否
            });
        });
    }


    /**
     * getDropdownOptions関数を利用して、ドロップダウンの選択肢を取得し、処理を行う
     * 
     * @param {Number} appId
     * @param {String|null} subtableFieldCode
     * @param {String} dropdownFieldCode
     */
    function fetchDropdownOptions(appId, subtableFieldCode, dropdownFieldCode) {
        getDropdownOptions(appId, subtableFieldCode, dropdownFieldCode)
            .then(options => {
                console.log('ドロップダウンの選択肢を取得しました: ', options);
                // 取得した選択肢を利用する処理
            })
            .catch(error => {
                console.error('エラーが発生しました: ', error);
                // エラー処理
            });
    }

})();

実行して取得に成功すると以下のようなオブジェクトが返ってきます。

{
  "デザイン": {
    "label": "デザイン",
    "index": "1"
  },
  "設計": {
    "label": "設計",
    "index": "0"
  }
}

コメント

タイトルとURLをコピーしました