お世話になります。
ルックアップの自動更新をしたく、こちらで質問をしつつコーディングしました。
やりたいこと
コピー元:顧客マスタアプリ(レコード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;
});
}
});
});
}());
***