レコード保存エラー:編集中に、ほかのユーザーがレコードを更新しました

お世話になります。

ルックアップの自動更新をしたく、こちらで質問をしつつコーディングしました。

やりたいこと

コピー元:顧客マスタアプリ(レコード2000件程度)

コピー先:顧客管理アプリ(レコード600件程度)

顧客マスタアプリのレコード保存時イベントで、顧客管理アプリの紐づくレコードを更新する。

レコード編集後保存ボタンを押した際に下記のエラーが起きます。

「エラー レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。(GAIA_UN03 Uo1t2pKB3Hu0uw08NKbD)」

解決方法はあるのでしょうか?

 

下記が使用したコードになります。

よろしくお願いいたします。

***

(function () {
‘use strict’;
// ルックアップ先アプリのアプリID
var updateAppId = 68;
/**
* kintone REST APIで一括更新するrecordsデータを作成する関数
        * @param records kintone REST APIで一括取得したrecordsデータ
        * @returns {Array} kintone REST APIで一括更新するrecordsデータ
        */
 function createPutRecords(records) {
            var putRecords = [];
            for (var i = 0, l = records.length; i < l; i++) {
                 var record = records[I];
                 putRecords[i] = {
                        id: record.$id.value,
                        record: {
                               lookup: {
                                      value: record.lookup.value
                               }
                         }
                 };
             }
             return putRecords; 
       }

       // レコードの一括取得
       function fetch(opt_query, opt_offset, opt_records) {
       var query = opt_query || ‘’;
       var offset = opt_offset || 0;
       var records = opt_records || [];
       var paramGet = {
             app: kintone.app.getId(),
             query: query + ’ order by $id asc limit 500 offset ’ + offset
       }
      return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, paramGet).then(function (resp) {
             records = records.concat(resp.records);
             if (resp.records.length === 500) {
      //残りのレコードをoffsetをlimit分だけずらして再取得
             return fetch(query, offset + 500, records);
              }
       return records;
            });
            }

       // 保存成功後イベント(ルックアップフィールドのフィールドコードはname)
       kintone.events.on([‘app.record.edit.submit.success’, ‘app.record.index.edit.submit.success’], function (event) {
                   var query = ‘lookup = "’ + ‘"’ + event.record[‘name’].value + ‘"’;
                   return fetch(query).then(function (resp) {
                           // ルックアップの更新
                              function fetch(opt_query, opt_offset, opt_records) {
                                  var query = opt_query || ‘’;
                                  var offset = opt_offset || 0;
                                  var records = opt_records || [];
                                  var paramPut = {
                                        app: kintone.app.getId(),
                                        ‘records’: createPutRecords(records)
                                         query: query + ’ order by $id asc limit 500 offset ’ + offset
                               };
                     return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, paramPut).then(function (resp2) {
                            // 処理成功
                           alert(‘ルックアップの更新が完了しました!’);
                           return event;
                     }).catch(function (error) {
                            // エラー表示をする
                            alert(‘ルックアップの更新でエラーが発生しました。’ + error.message);
                            return event;
                         });
                       }
               });
      });
}());

 

***

手元で試した結果、保存成功後イベントで処理しているとき実行時エラーでスクリプトが停止すると、
保存ボタンを押したときの保存が動き、エラーで何も表示されずに処理が停止する=編集画面のままになる
という現象が発生しました。
1度目は何も表示されませんが、2度目以降はレコードが保存された後のため、ご提示されたエラーが発生します。

また、ご提示されているコードについて。

・ createPutRecords関数が使われていない
・ PUT処理に対するパラメータがGETのパラメータの形式になっている
・ name変数が空になっている

のような問題があります。
業務に使用されているコードから不要な部分を削除したときにこのような形になったのかもしれませんが、
当方で動かしたところうまく動きませんでした。
もしこのコードをそのままkintoneに登録している場合、冒頭の問題が起こっている可能性が高いと思います。

実行時エラーが発生していないか一度確認してみてはいかがでしょうか。