app.record.detail.showでアプリの値を処理した後に、画面保存ボタンがエラーが出ました(エラー レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました)

app.record.detail.showでアプリの値を処理した後に、画面保存ボタンを押すと

下記エラーが出ました、どこの問題ですか?教えて頂ければ助かります。:


エラー (具体的には図1)
レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。
(GAIA_UN03 jEdPhiyoH7yENY0v3Zyn)


ソース:


(function() {
“use strict”;
//一行目の時にはdataobjをnullする
var dataobj=null;
var subtableval=null;
//‘app.record.edit.show’,
kintone.events.on([‘app.record.detail.show’], function(event) {
var subtablevals=event.record.小口現金.value;
//var zankin=subtablevals[0].value.残金TBL.value;
var cdate=subtablevals[0].value.date.value;
var rcdid=event.recordId;
var lastbalanceval=event.record.前月末残金.value;//前月末残金
var advpaymentval=subtablevals[0].value.経費前渡金.value;//前月末残金
var costval=subtablevals[0].value.cost.value;//前月末残金
var zankinval=lastbalanceval+advpaymentval-costval;

/////////insert処理
subtableval=
{
“value”:{
‘残金TBL’:{
value:zankinval
},
“date”:{
value:“8118”
}

}
};

 

actionfun(rcdid);
return event;
});

/*
kintone.events.on([‘app.record.create.change.小口現金’,‘app.record.edit.change.小口現金’], function(event) {
var subtablevals=event.record.小口現金.value;
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
*/

function actionfun(rtnid){
var appid = kintone.app.getId();
var recordid=rtnid;//
/////////
var subtablevals=null;
kintone.api(‘/k/v1/record’, ‘GET’, {app: appid, id: recordid}, function(resp) {
// レコード番号を表示する
subtablevals =resp[‘record’][‘小口現金’][‘value’];
//alert(1);
save1data(recordid,dataobj,subtableval);
//alert(2);
}, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});

}
//保存する
function save1data(recordid,dataobjtmp,subtableval){
var appid = kintone.app.getId();
var dataobj=[];
if(dataobjtmp!=null){
dataobj=dataobjtmp;
dataobj.push(subtableval);
}else{
dataobj.push(subtableval);
}
var put_record = {}; // レコード更新用オブジェクト
put_record[“小口現金”] = {
value:dataobj//tablevals
};

var body = {
app: appid,
id: recordid,
record: put_record
};

// 更新処理

kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
}

})();

 

 


図1

pankouさん

ぱっとみ、レコード詳細画面表示時にAPIで値の更新が行われているので、

以下のような状況かと思います。

 

1.詳細画面表示

2.APIでレコード更新

3.編集画面表示し、保存

→この時点で、開いているレコードの情報と、内部的にはレコード値が違うため、

レコードの保存時に、エラーが発生

 

レコード更新後、画面のリロード処理を行うことで解消すると思いますが

再度表示イベントが走ってしまうので、無限ループに足する対策が必要かと思います。