【kintone】レコード詳細画面でワンクリックで値を追加する処理について

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

 

「レコード詳細画面でワンクリックで担当者に自分を追加するワザ」というTipについて伺いたいことがございます。

業務を効率化すためボタンをクリックした後に、「日付フィールド」に「今日」の値を入れたいと思っております。

上記のTipを参考にコードを書いたのですが、「日付フィールド」に「今日」の日付(値)がうまく追加されません。


(function () {

“use strict”;

    //イベントの取得
    kintone.events.on(‘app.record.detail.show’, function(event){
 
        //スペース要素の取得
        var space = kintone.app.record.getSpaceElement(‘スペース’);
 
        //ボタンの作成
        var btn = document.createElement(‘button’);
        btn.appendChild(document.createTextNode(‘今日’));
        btn.id = ‘btnAddMine’;
        btn.name = ‘btnAddMine’;
        space.appendChild(btn);

    btn.addEventListener(‘click’, addTodaySet);    

        // ボタンクリック後の処理
        function addTodaySet(){

        var record = kintone.app.record.get();
        var dt = new Date();
        var today = dt.getFullYear() +‘-’+ (dt.getMonth()+1) +‘-’+ dt.getDate();
        record[‘record’][‘日付’][‘value’] = today;
        kintone.app.record.set(record);
        
        // レコードを更新する
        kintone.api(‘/k/v1/record’, ‘PUT’, record, function(resp){

        // 成功時は画面をリロード
        location.reload(true);
        });
      }
});
})();


お気付きの点などございましたら、ご教授いただければ幸いです。

よろしくお願い申し上げます。

菅原尚哉さん

 

レコード詳細画面でボタンを押してREST APIで更新する意図と取れば、レコード更新APIのドキュメントを見ると、kintone.api()部分のパラメータを次のように指定する必要があると思います。またこの際、kintone.app.record.get/set は意味をなさないかと思います。

 

kintone.api('/k/v1/record', 'PUT', {
  app: kintone.app.getId(),
  id: kintone.app.record.getId(),
  record: record
}, function(resp) {
  // 成功時は画面をリロード
  location.reload(true);
});

 

他方、レコード編集画面でセットしたいのであれば、イベントが app.record.create.show や app.record.edit.show となり、今度は kintone.app.record.get/set が効いてきますので、編集画面でかつボタン押下時に値がセットされるので、kintone.api() が不要になるかと思います。

 

現状では、前者のkintone.api() のパラメータが問題でエラーが出ているはずですので、こんな時にはまずこちらを参考にデバッグを試みましょう。

Ryu Yamashita さま

早速のご回答、誠にありがとうございました。
教えていただいたコードで書き換えてみたところ、kintone.api()のパラメーターのエラーは解消されました。
しかし、

record[‘record’][‘日付’][‘value’] = today;

の部分(value)でエラーが出てしまいました。


(function () {

“use strict”;

    //イベントの取得
    kintone.events.on(‘app.record.detail.show’, function(event){

        //スペース要素の取得
        var space = kintone.app.record.getSpaceElement(‘スペース’);
 
        //ボタンの作成
        var btn = document.createElement(‘button’);
        btn.appendChild(document.createTextNode(‘今日’));
        btn.id = ‘btnAddMine’;
        btn.name = ‘btnAddMine’;
        space.appendChild(btn);

    btn.addEventListener(‘click’, addTodaySet);    

        // ボタンクリック後の処理
        function addTodaySet(){

        var record = event.record;
        var dt = new Date();
        var today = dt.getFullYear() +‘-’+ (dt.getMonth()+1) +‘-’+ dt.getDate();
        record[‘record’][‘日付’][‘value’] = today;
        
        // レコードを更新する
        kintone.api(‘/k/v1/record’, ‘PUT’, {
        app: kintone.app.getId(),
        id: kintone.app.record.getId(),
        record: record
        }, function(resp) {
  // 成功時は画面をリロード
  location.reload(true);
    });
  }
});
})();


お気付きの点などございましたら、ご教授いただければ幸いです。

event.recordから取得しているrecordをconsole.log()やブレイクポイントで確認してみてください。recordオブジェクト配下にフィールドのオブジェクト群があることに気づくと思います。また、todayはrecord.日付.valueにセットすると良いことがわかると思います。ただ、REST APIで更新するのでしたら、PUT用のレコードを作るのが普通かと思います。

 

var record = {
  "日付": {
    "value" : today
  }
};

 

return event と kintone.app.record.set() 、またREST APIによる更新の使い分けはちょっと慣れが必要なところですので、色々試されると良いかと思います。

Ryu Yamashita さま

いつもお世話になっております。
休日のさなか、早速ご回答いただき、誠にありがとうございます。

無事、理想としていた処理をすることができました。

今後とも、よろしくお願いいたします。

解決に至られたようで良かったです。