レコードのデリートインサート
にメンテナンス済み
API を使ってレコードを更新したい場合、基本的にはPUT APIを使用します。
ただ、仕様や安全性を考慮し、一定条件のレコードを全て削除したうえで、レコードを再生成しなければならない場合もあります。
今回はそういった場合のコードサンプルを紹介いたします。
サンプルコード
関数の定義
まず、クエリーを指定して複数のレコードを削除する関数を定義します。
/**
* @param { number | string } app 処理対象アプリID
* @param { string } query 削除対象を絞り込むクエリー
* @returns { Promise<{}> } DELETE APIの実行結果
*/
const deleteByQuery = async (app, query) => {
/** APIエンドポイント */
const url = kintone.api.url('/k/v1/records.json', true);
/** 削除対象のレコード(IDのみ) */
const { records } = await kintone.api(url, 'GET', {
app,
query,
fields: ['$id'],
});
// レコードIDの配列を定義します
const ids = records.map((r) => r.$id.value);
return kintone.api(url, 'DELETE', { app, ids });
};
上記コードでは、レコードの取得(GET)・削除(DELETE)ともに 1 回のリクエストで 100 件までしか処理できません。
上限を意識せず使用したい場合は、以下の記事をご参照ください。
POST, PUT, DELETEの上限
kintone REST APIには、GET, POST, PUT, DELETEそれぞれに、1度に操作できるレコードの上限が設けられています。今回は上記のレコード上限を気にすることなく、一括でレコードの作成ができる関数をご紹介します。RE
例 1: 日付を指定した更新
/** サンプルデータ */
const CLIENTS = [
['株式会社サンプル', '2022-01-01', 'A'],
['株式会社テスト', '2022-01-05', 'B'],
['ダミー株式会社', '2022-01-10', 'C'],
];
const deleteInsert = async () => {
/** 処理対象アプリID */
const app = 15;
/** 登録するレコード一覧 */
const records = CLIENTS.map((client) => ({
顧客名: { value: client[0] },
日付: { value: client[1] },
確度: { value: client[2] },
}));
/** 削除対象を絞り込むクエリー */
const query = '日付 >= "2022-01-01" and 日付 <= "2022-01-31"';
// クエリーに当てはまるレコードを一括削除
await deleteByQuery(app, query);
// 作成したレコードを一括登録(1 回の POST で登録できるのは 100 件まで)
await kintone.api(kintone.api.url('/k/v1/records.json', true), 'POST', {
app,
records,
});
};
コードの安全性について
レコードの削除 → 登録を行う場合、気を付けなければいけないのは、レコードの削除後に異常終了してしまうケースです。
削除の完了を待って、登録を行うようなコードを記述していた場合、削除処理だけ完了し、登録が実行されずデータに齟齬が発生します。
これを避けるには、bulkRequest を使用する方法が効果的です。
bulkRequest は 1 回あたり最大 20 リクエストまで実行できる制限がありますが、削除、登録のいずれかでエラーが発生した場合、処理を巻き戻し(ロールバック)、実行前の状態に戻すことができます。
削除と登録を 1 つの bulkRequest にまとめる例は以下のとおりです(削除・登録ともに 100 件以内の場合)。
await kintone.api(kintone.api.url('/k/v1/bulkRequest.json', true), 'POST', {
requests: [
{ method: 'DELETE', api: '/k/v1/records.json', payload: { app, ids } },
{ method: 'POST', api: '/k/v1/records.json', payload: { app, records } },
],
});
ids は削除対象のレコード ID の配列で、事前に GET で取得しておきます。
bulkRequest を使ったサンプルは以下の記事でも紹介しています。
POST, PUT, DELETEの上限
kintone REST APIには、GET, POST, PUT, DELETEそれぞれに、1度に操作できるレコードの上限が設けられています。今回は上記のレコード上限を気にすることなく、一括でレコードの作成ができる関数をご紹介します。RE
#JavaScript
#kintone