新規投稿
フォローする

【再】ルックアップ自動更新時のレコード保存エラー

お世話になります。再投稿になります。

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

やりたいこと

コピー元:顧客マスタアプリ(レコード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('ルックアップの更新でエラーが発生しました。\n' + error.message);
                            return event;
                         });
                       }
               });
      });
}());

 

***

0

1件のコメント

Avatar
しぶい

NAO さん

質問とソースコードを見る限り、顧客マスタアプリから、顧客管理アプリを取得、更新するのですよね?
でしたら、各 REST API に設定している アプリID は updateAppId ではありませんか?

ぱっと見アプリID の指定はどちらも、kintone.app.getId() の値を設定してますし、
試していないので確定はできませんが、画面上の更新と REST API からの更新が
被って該当のエラーが発生している感じがします。

しぶいにより編集されました
0
サインインしてコメントを残してください。