kintoneを使っているとよく発生する事象です。
アプリ内のレコード数が数千件あるが、この新しくフィールドを追加することになった。
全件条件分岐で内容を入れたいが、ひとつずつやっているといつまでかかるかわからない…。
そんな時は、一括で処理してくれるボタンを実装しちゃいましょう!
(function () {
"use strict";
kintone.events.on('app.record.index.show', function (event) {
if (document.getElementById ('my_index_button') != null) {
return;
}
var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerHTML = 'ボタン上の文言';
// ボタンクリック時の処理
myIndexButton.onclick = function() {
var appId = kintone.app.getId();
kintone.api('/k/v1/records', 'GET', {app: appId}, function(resp) {
//////// 更新オブジェクトの生成
var param = {
"app": appId,
"records": []
};
for (var i = 0; i < resp['records'].length; i++) {
var record = {};
// 分岐処理があればここで記載する(今回はすべて同じ内容が入ります)
record["フィールドコード"] = { value: "内容"};
param['records'][i] = {
"id": resp['records'][i]['レコード番号'].value,
record
}
}
kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', param, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(param);
console.log(error);
});
});
}
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
})();
こんな使い方をしてみよう
年齢を最新にする
kintoneではレコードを開いたときに処理が走るため、計算フィールドを使って年齢計算している場合やedit.showイベントで年齢計算している場合は、レコードを開かない限り何年も同じ年齢になってしまいます。
上記のコードを少し弄ると、年齢を一括更新するコードを書くことができます。
(function () {
"use strict";
kintone.events.on('app.record.index.show', function (event) {
if (document.getElementById ('my_index_button') != null) {
return;
}
var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerHTML = '年齢一括更新';
// ボタンクリック時の処理
myIndexButton.onclick = function() {
var appId = kintone.app.getId();
kintone.api('/k/v1/records', 'GET', {app: appId}, function(resp) {
//////// 更新オブジェクトの生成
var param = {
"app": appId,
"records": []
};
for (var i = 0; i < resp['records'].length; i++) {
var record = {};
// 日付データを取得
var today = new Date();
var birthday = new Date(resp['records'][i]['生年月日'].value);
record["年齢"] = { value: calcAge(birthday,today)};
param['records'][i] = {
"id": resp['records'][i]['レコード番号'].value,
record
}
}
kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', param, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(param);
console.log(error);
});
});
}
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
function calcAge(birthdate, targetdate) {
var age = targetdate.getFullYear() - birthdate.getFullYear();
var birthday = new Date(targetdate.getFullYear(), birthdate.getMonth(), birthdate.getDate());
if (targetdate < birthday) {
age--;
}
return age;
}
})();