# kintone js と　REST APIの記述がわかりずらいので整理して教えて戴きたい

**URL:** <https://community.cybozu.dev/t/topic/2600>\
**Category:** kintone 開発相談\
**Created:** [2016 年 9 月 2 日午前 7:28 UTC](https://community.cybozu.dev/t/topic/2600 "2016-09-02T07:28:11Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account496](https://avatars.discourse-cdn.com/v4/letter/l/d2c977/32.png) [@Legacy\_Account496](https://community.cybozu.dev/u/Legacy_Account496)\
**Post date:** [2016 年 9 月 2 日午前 7:28 UTC](https://community.cybozu.dev/t/topic/2600/1 "2016-09-02T07:28:11Z")

</div>

hSy横山です。

&nbsp;

元アプリのレコードをクエリーで抽出し、別アプリに値をセットしたいのですが、

js と REST APIの関連がわかりずらい為、コード記入できず困っています。

&nbsp;

REST APIのサンプル が固定値を入れる様になっており、的確でない事が原因です

的確なサンプルの提供をお願いします。

別アプリへの追加は、レコード100件以上です。（この制限も不要です）

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2016 年 9 月 2 日午前 10:40 UTC](https://community.cybozu.dev/t/topic/2600/2 "2016-09-02T10:40:47Z")

</div>

hsy横山さん  
cstapの瀧ヶ平です。

申し訳ありませんが、REST APIのどのあたりの部分が分かり辛いのか読み取れないので、よろしければREST APIドキュメントなどの分からない箇所を具体的に教えていただければ幸いです。

ひとまずhsy横山さんの求める動作に沿って、サンプルを書いてみたので参考にしていただければ幸いです。  
また、コードの上で何をやっているのか分からないなどの個所がありましたら、このトピックでまた質問していただければと思います。

[こちら](https://community.cybozu.dev/hc/ja/articles/204730600-Promise%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E3%83%A2%E3%83%80%E3%83%B3%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E5%85%A8%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E5%8F%96%E5%BE%97%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9)のTipsのPromiseによるレコードの全取得を、クエリに対応させ、  
また、100件以上のレコードを100件ごとのレコードの配列の二次元配列に変換する関数、  
そのレコードの二次元配列を利用してREST APIで登録する関数を作成することで対応したコードが以下になります。

&nbsp;

```
// レコードの全取得関数(クエリに対応)
var function fetchRecords(appId, query, opt_offset, opt_limit, opt_records) {
var offset = opt_offset || 0;
var limit = opt_limit || 500;
var allRecords = opt_records || [];
var params = {app: appId, query: query + ' order by レコード番号 asc limit ' + limit + ' offset ' + offset};
return kintone.api('/k/v1/records', 'GET', params).then(function(resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(appId, offset + limit, limit, allRecords);
}
return allRecords;
});
}

// 100件以上のレコード配列を100件以下のの配列の二次元配列にする関数
var splitRecords = function(records, offset, initRecords) {
offset = offset || 0;
initRecords = initRecords || [];
return records.length <= offset ?
initRecords :
splitRecords(
records,
offset + 100,
(
initRecords.push(
records.slice(offset, offset + 100)
),
initRecords
)
);
};

// レコードの二次元配列をもとにREST APIでレコードを登録し、そのPromiseの配列を返す関数
var createRequests = function(appId, splitedRecords) {
return splitedRecords.map(function(records) {
return kintone.api(
kintone.api.url("/k/v1/records"),
"POST",
{
app: appId,
records: records
}
);
});
};

// アプリAのレコードをクエリで抽出し、アプリBに登録する場合の処理
// appAにアプリAのアプリID, appBにアプリBのアプリID, queryにクエリを入れておく
fetchRecords(appA, query)
.catch(function(err) {
alert("レコードの取得に失敗しました");
console.log(err);
}).then(function(records) {
// ここでrecordsを基にallRecordsとしてアプリBに登録するレコードの情報の配列を作る
return kintone.Promise.All(createRequest(appB, splitRecords(allRecords)))
}).then(function(results) {
alert("すべてのレコードの登録に成功");
}).catch(function(err) {
alert("レコードの登録に失敗しました");
console.log(err);
});

```
