はじめに
今回は、javascriptとkintone REST APIを使用した具体的なデータ取得処理、データ更新処理の実装について説明いたします。kintone REST APIには1回のAPI呼び出しで処理できるレコード件数に制限があり、そのことを考慮して実装を行う必要があります。
レコード一括取得処理
kintone REST APIのレコード取得処理には1回当たりの取得レコード数の制限があります。kintoneアプリには、この取得レコード件数の制限より多くのレコードが格納される場合があり、1回のレコード取得処理では全件取得できない場合があります。この状況への対応方法として、取得するレコードの範囲をスライドさせながらレコード取得処理繰り返すことで、全レコードを取得することができます。レコード抽出条件に加えて「offset」として抽出条件にマッチしたレコードの何件目から取得開始するか、「limit」としてレコード取得件数を指定することで、取得レコードの範囲をスライドさせることができます。
下記サンプルのレコード一括取得処理では、limitで1回の取得件数を指定しつつ、レコード取得件数ずつoffsetするクエリを使用し、レコード取得結果がlimit件数以下になるまで再帰処理でレコード取得を行い、各取得レコードを結合して戻すことでレコード一括取得処理としています。
// レコード一括取得処理
const getRecords = function(app, fields, strQuery, strOption, tmpRecords){
var limit = 500; // 1回のクエリで抽出する上限件数を指定
var tmpRecords = tmpRecords || [];
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: app,
fields: fields,
query: strQuery + strOption + ' limit ' + limit + ' offset ' + tmpRecords.length
}).then(function(response){
tmpRecords = tmpRecords.concat(response.records);
// 取得したレコード件数が1回のクエリで抽出する上限件数となっていた場合、再起呼出しする。
// そうでない場合は取得レコードを返す。
return response.records.length === limit ? getRecords(app, fields, strQuery, strOption,
tmpRecords) : tmpRecords;
});
};
レコード一括更新処理
REST APIでのレコード更新処理には、更新対象のレコード番号と項目値をセットにした更新用レコード配列を使用しますが、こちらも1回当たりの更新レコード数の上限があります。
下記サンプルのレコード一括取得処理では、レコード一括取得処理のようなクエリでのoffsetやlimitの指定ができないため、更新用レコード配列から、範囲をずらしつつ一定件数のレコードを切り出して処理するように実装しています。
//レコード一括更新処理
const putAllRecords = function(offset, app, put_records){
//offsetは、取得したデータの先頭からいくつスキップするかを表す
offset = offset || 0;
//kintone.apiでレコード取得するためのパラメータ
var params = {
"app" : app ,
"records" : []
};
var t=0
//100件ずつのパラメータを作る
if (put_records.length - offset > 100) {
for (var s = offset; s < offset+100; s++) {
t++;
params["records"][t-1] = put_records[s];
}
}else if (put_records.length - offset < 100) {
for (var s = offset; s < put_records.length; s++) {
t++;
params["records"][t-1] = put_records[s];
}
}
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', params
).then(function(put_resp){
console.log(put_resp);
//取得したレコード数が上限に達していれば再帰呼び出し
if(put_records.length - (offset + 100) > 0){
return putAll
}
});
}
おわりに
今回は、kintone REST APIを利用した具体的なデータ取得処理、データ更新処理の実装について説明しました。実は、kintone REST APIのレコード処理は非同期処理となっており、レコード一括取得処理、レコード一括更新処理を連続的に呼び出すと、レコード一括取得処理の終了前にレコード一括更新処理が開始され、正常に動作しません。この対策としてkintone.Promiseが用意されています。次回は、レコード更新要否の判定とあわせて、kintone.Promiseを利用したレコード処理の同期について、ご説明いたします。