kintone

【kintone】レコードが新規登録・追加か更新かどうかの判定|JavaScriptサンプル

【kintone】レコードが新規登録・追加か更新かどうかの判定
kintoneの標準機能でできないところをJavaScriptやCSSを使って実現しています。

評価:5

今回はレコードが新規登録・追加なのか、更新なのかを判定する方法です。JavaScriptサンプルコードをご紹介します。

kintoneで登録か更新か判断できるのか

こんなことありませんか?
  • レコードを登録した時に、他のアプリも同時に登録したい
  • ある項目を変更した時に、他のアプリも同時に更新したい
  • とにかくkintoneでも登録か更新かを判断したい
モンキー
モンキー
kintoneでも登録か更新かの判断ができるよ!
ピンキー
ピンキー
リビジョン番号で判断できそうだね!
レコードが新規登録か更新かを判断

完成形

レコードが新規登録・追加か更新かどうかの判定

保存ボタンを押した後の保存成功後の処理で、レコードの新規登録・追加か更新かを判断して、アラートを表示しています。

  • 登録か更新かは、レコードのリビジョン番号(revision)で判定
  • 判定のタイミングは保存成功後の処理
    「app.record.create.submit.success」
    「app.record.edit.submit.success」
    「app.record.index.edit.submit.success」

JavaScript サンプルコード

(function() {
"use strict";

/*
* 登録画面・編集画面・一覧画面/保存成功後
*/
function editSubmitSuccess(event) {

  // レコード取得
  var record = event.record;

  if (record['$revision']['value'] > 1) {
    // 更新の時($revision>1)
    alert('更新の時:$revision = ' + record['$revision']['value']);
  } else {
    // 登録の時($revision=1)
    alert('登録の時:$revision = ' + record['$revision']['value']);
  }

  return event;
}

/* ------------------------------------------------------------------ */

// 登録画面・編集画面・一覧画面/保存成功後
kintone.events.on(['app.record.create.submit.success',
                   'app.record.edit.submit.success',
                   'app.record.index.edit.submit.success'], editSubmitSuccess);

})();

kintoneでは、レコードの変更履歴をリビジョン番号(revision)で管理しています。保存成功後の処理で「$revision」の値を取得することにより、新規か更新かの判断ができます。新規の場合はリビジョン番号が「1」、更新の場合はリビジョン番号が「2以上」となります。

他のアプリではなく保存するレコード自体のある項目に何かをセットしたい時、以下の保存実行前イベント
「app.record.create.submit」
「app.record.edit.submit」
「app.record.index.edit.submit」
では、レコード追加の際にレコード番号リビジョン番号を判定するとエラーになります。(更新時は取得可)

参考:保存成功後のレコード更新

「kintone.Promise」を使って、保存成功後の処理でレコード更新(自分自身)するサンプルが「cybozu developer network」に掲載されています。

レコード保存後イベントを使って自動採番をシンプルに実装する方法

こちらの方法で保存成功後の処理「app.record.xxxx.submit.success」で保存するレコード自体の更新を試してみました。同期更新するには「return」を書くことによって処理が終わるのを待って次の処理を行います。関数を呼び出す際にも「return」の記述が必要です。こちらも参考になります。


CodeCampGATE

CodeCampGATE

この記事は、2020.8.23時点の情報です。