いつもお世話になっております。
「レコード詳細画面でワンクリックで担当者に自分を追加するワザ」という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 さま
いつもお世話になっております。
休日のさなか、早速ご回答いただき、誠にありがとうございます。
無事、理想としていた処理をすることができました。
今後とも、よろしくお願いいたします。