Ribbit.work

【Kintone】APIを使ったレコードの削除→登録による更新【デリートインサート】

JavaScriptKintone

last modified date2021-11-25

publish date2021-11-24

APIを使ってレコードを更新したい場合、基本的にはPUT APIを使用します。

ただ、仕様や安全性を考慮し、一定条件のレコードを全て削除したうえで、レコードを再生成しなければならない。といったこともあるのではないでしょうか。

今回はそういった場合のコードサンプルを紹介いたします。

サンプルコード

関数の定義

まず、クエリーを指定して複数のレコードを削除する関数を定義します

/**
 * @param { number | string } app 処理対象アプリID
 * @param { string} query 削除対象を絞り込むクエリー
 * @returns { Promise<{}> } DELETE APIの実行結果
 */
const deleteByQuery = async (app, query) => {
  const url = kintone.api.url("/k/v1/records.json", true);

  // DELETEには対象レコードのレコード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,
  });
};

上記コードでは、1度の実行で、DELETEのレコード上限である100件までしか処理できません。

上限を意識せず使用したい場合は、以下の記事をご参照ください。

上限を気にせずPOST, PUT, DELETEする【Kintone】

例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) => ({
    顧客名: { vaule: client[0] },
    日付: { value: client[1] },
    確度: { value: client[2] },
  }));

  /** 削除対象を絞り込むクエリー */
  const query = '日付 >= "2021-01-01" and 日付 <= "2021-01-31"';

  // クエリーに当てはまるレコードを一括削除
  await deleteByQuery(app, query);

  // 作成したレコードを一括登録
  await kintone.api(kintone.api.url("/k/v1/records.json", true), "POST", {
    app,
    records,
  });
};

コードの安全性について

レコードの削除→登録を行う場合、気を付けなければいけないのは、レコードの削除後に異常終了してしまうケースです。

削除の完了を待って、登録を行うようなコードを記述していた場合、削除処理だけ完了し、登録が実行されずデータに齟齬が発生します。

これを避けるには、bulkRequestを使用する方法が効果的です。

bulkRequestにも上限が存在しますが、削除、登録のいずれかでエラーが発生した場合、処理を巻き戻し(ロールバック)、実行前の状態に戻すことが可能です。

複数アプリへのレコード一括処理

bulkRequestを使ったサンプルは以下の記事でも紹介しています。

上限を気にせずPOST, PUT, DELETEする【Kintone】

この記事をシェア

この記事を読んだ方におすすめの記事

kuromoji.jsで形態素解析
2021-12-4

kuromoji.jsで形態素解析

TypeScriptJavaScript
レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】
2021-12-4

レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】

JavaScriptKintone
レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】
2021-11-29

レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】

JavaScriptKintone
スライダーを使って数値を設定できるKintoneプラグイン【無料公開】
2021-11-26

スライダーを使って数値を設定できるKintoneプラグイン【無料公開】

KintoneJavaScriptTypeScript

最新の記事

kuromoji.jsで形態素解析
2021-12-4

kuromoji.jsで形態素解析

TypeScriptJavaScript
レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】
2021-12-4

レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】

JavaScriptKintone
レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】
2021-11-29

レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】

JavaScriptKintone
スライダーを使って数値を設定できるKintoneプラグイン【無料公開】
2021-11-26

スライダーを使って数値を設定できるKintoneプラグイン【無料公開】

KintoneJavaScriptTypeScript