ドロップダウンのリストを動的に作成したい

お世話になっております。

フォームの設定の変更を参照しつつ以下のScriptを組んでみましたが、

XXXXの部分にlabelと同じ値を入れたいのですが、設定の仕方がわかりません。

なにとぞご教授をお願いいたします。

 var params = {
              app: kintone.app.getId(),
              id : kintone.app.record.getId(),
             
              properties: {
                '(フィールドコード)': {
                    type : "DROP_DOWN",
                  options: {
                    XXXX:{
                      label: yearmon[0],
                      index: 0
                    }
                  }
                }
              }
            };
       
        kintone.api(kintone.api.url("/k/v1/preview/app/form/fields", true),
            'PUT',
            params,
            function(event){
               
             location.reload();
        });

冨永真基 さん

キー項目に変数を使いたい場合には、を用いれば

実現可能です。以下記述例となります。

var key = 'キー名';
var obj = {};
obj[key] = {
label: key
};
/*
以下の書き方と同じ結果になります
var obj = {
'キー名': {
label: 'キー名'
}
};
*/

今回のケースで言えば、paramオブジェクトの初期化時に空のoptionsを

宣言しておき、後からparamオブジェクトにブラケット記法を用いて

XXXXに該当する内容をセットすれば実現できると思います。

ご回答ありがとうございます。

おかげさまでparamsの設定はすることができました。

ただ。PUT処理も走っているのですが、セットした内容がドロップダウンにセットされません。

原因などわかるでしょうか?

以下コードになります。

kintone.events.on(events, function(event) {
       
        var yearmon =[];

        for(var n = -6; n<7;n++){
       
            var tmp = new Date();
            tmp.setDate(1);
            // setMonthで、「現在月 = 現在月 + nヶ月」を行う
            tmp.setMonth( tmp.getMonth() + n );
           
            var year = tmp.getFullYear();
            var mon = tmp.getMonth();
            var date = year + "/" + (mon < 9 ? '0' : '') + (mon + 1);
       
            yearmon.push(String(date))
       
        }

        var obj = {};
          for(var i=0; i<yearmon.length; i++){
           
            var key = yearmon[i];
           
            obj[key]={
                  label: key,
                  index: i
                };
           
        }
       
        var params = {
              app: kintone.app.getId(),
              id : kintone.app.record.getId(),
             
              properties: {
                '(フィールドコード): {
                    type : "DROP_DOWN",
                  options: obj
                   
                  
                }
              }
            }
       
        kintone.api(kintone.api.url("/k/v1/preview/app/form/fields", true),
            'PUT',
            params,
            function(resp){
               
            //  location.reload();
        });
       
    });

冨永真基 さん

フォームの設定を変更するAPIを確認しましたが、URIが

/k/v1/preview/app/form/fields.json

となっており、previewが含まれている事から、APIを実行するとテスト環境のアプリ情報が変更されます。

そのため、本番環境に反映するためにはアプリの設定画面から「アプリを更新」ボタンを押すか、

「アプリの設定の運用環境への反映」APIを実行する必要があり、どのタイミングで更新するか?

については別途考える必要がありそうです。

 

挙げていただいたコードを少し変更(yearmonを固定値に簡略化)して動作確認を行いましたが、

レコード追加画面が表示された時のイベントを使用するとエラーになりました。

また、レコード一覧画面が表示された時のイベントを使用したところ、「アプリの更新」ボタンを押して

アプリを更新すれば、ドロップダウンを変更できる事が確認できました。

なお、paramsに「id : kintone.app.record.getId()」が含まれておりますが、

APIのページに記載されていない事から、不要なパラメータかと思います。

ご回答ありがとうございます。

更新ボタンを押したところ、うまく作成することができました。

たびたび申し訳ございませんが、「アプリの設定の運用環境への反映」APIを

使用しようとしましたが、いまいち動作がうまくいきません。

「アプリの設定の運用環境への反映」APIを使う場合は、レコード一覧画面が表示された時のイベントを使用

すればよろしいのでしょうか?

 

冨永真基 さん

レコード一覧画面が表示された時のイベントを使用しても動作可能だと思います。

処理の流れとしては、「フォームの設定を変更」→「アプリを更新」になると思うため、

「フォームの設定を変更」が終了した後で「アプリの設定を運用環境へ反映」APIを呼び出す必要があります。

しかし、レコード一覧画面が表示された時のイベントを使用した場合、画面を切り替えるたびに

処理が実行されるため、動的には切り替わるものの、レコード一覧画面が表示される度に

アプリを更新した事になり、私の個人的な感覚ではありますが、処理としてあまり美しくないかなと思います。

そのため、レコード一覧画面にボタンを設置し、ボタンが押されたタイミングで上記処理を実施する、

といった方法をお勧めしたいです。

ボタンの設置方法としては、以下のページが参考になるかと思います。

https://developer.cybozu.io/hc/ja/articles/201767270

 

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。