レコード詳細画面でPUT、リロード時のエラー

いつもお世話になっております。

レコード詳細画面で他のアプリからREST APIでレコードをGET、その内容を集計しPUT、最後に画面をリロードしたい考えています。

一覧画面からレコード詳細画面を開いた時はいいのですが、レコード作成やレコード編集画面から保存後のレコード詳細画面でどうしても「ほかのユーザーがレコード内容を更新したため情報を更新してください」のようなエラーが出てしまいます。

同様の投稿も見て試してみようと試みてはいるのですが、自力で解決できないのでご教授いただければ幸いです。

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

下記、現在のコードです。

(function(){

"use strict";

kintone.events.on("app.record.detail.show", async(event) => {

var record = event.record;
var name = record.業者名.value;


var body = {
"app": 155,
"query" : 'ステータス in ("A", "B") and 業者名 = "'+ name+'"',
"feilds": ['ステータス','レコード番号'],
"totalCount": true
};

const resp = await kintone.api('/k/v1/records','GET', body);

var jisya = 0;
var tasya = 0;

for(var i = 0; i < resp.totalCount; i++){
if(resp.records[i].ステータス.value === "A"){
jisya += 1;
}else if(resp.records[i].ステータス.value === "B"){
tasya += 1;
}
};

var params = {
"app": 75,
"id": event.record.レコード番号.value,
"record": {
"A件数":{
"value": jisya
},
"B件数":{
"value": tasya
},
"シェア率": {
"value": parseFloat((jisya/resp.totalCount)*100)
}
}
};
const res = await kintone.api('/k/v1/record', 'PUT', params);
if (window.name !== "abc"){
location.reload();
window.name = "abc"
}else{
window.name = '';
}
});
})();

こんにちは!

現在のコードだと

詳細画面をひらく

PUT レコードのバージョン +1

windows.nameをabcにしてリロード (表示上のレコードのバージョンも更新されて+1)

詳細画面をひらく

PUT レコードのバージョン +1

windows.nameがabcじゃない(elseの方)のでリロードしない(表示上のレコードのバージョンも更新されない)

 

という流れになっているので、

レコードのバージョンは +2

表示上のバージョンは +1 (最新のバージョンではない)

のままなので、この状態で編集しようとすると

kintoneは「表示上のバージョンとレコードのバージョンが違う!編集中に誰かが更新したな?」と判断してエラーを出しているのだと思います。

 

画面名="abc"かどうかを確認するのを最初の方にも追加して、

画面名がabcだったら何もせずに終わる・・・というコードを入れてあげればよさそうです。

 

juridon様

 

コメントいただきありがとうございます。

修正して無事に解決いたしました。

しばらく悩んでいたので問題点がわかり大変助かりました。

心より感謝申し上げます!!

今後ともどうぞよろしくお願いいたします。