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

保存する時に、図1のエラーが出ました、ソースはコード1です。

原因は何ですか?

図1

 

コード1:

(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,resp) {
var subtablevals=event.record.小口現金.value;
// success
console.log(resp);
alert(“aaa”);
}, 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);
});
}

})();

 

pankou様

kintoneのchangeイベントの中でAPIでPUTをしているから、「他のユーザー」が更新をしたというメッセージが出るのではないでしょうか.

前提として,kintoneの各イベントでは,基本的には
return event;
とすることで,event.record への変更( event.record[‘フィールド名’].value = “abc” など )が反映されます.

少なくとも,app.record.detail.show や app.record.create.change.小口現金 などのイベントでは,現在表示されているレコードについては

var record=event.record;
record[‘フィールド名’]=“aaa”;
return event;

とすれば,APIを使わずに更新ができるはずです. 

APIを使って更新するのは,他のレコードや,他のアプリのデータを扱うときだけだと考えて頂いた方がいいでしょう.

milkyway0307さん

ご返事、ありがとうございます。

申し訳ございませんが

ソースコードが好くないです、「 app.record.create.change.小口現金」のソースコードがコメントしていますので、使っていません。

「app.record.detail.show」のreturn event;が有ります。

ですので、return eventが有るのに、このエラーが出ます、不思議です。

勘違いしない様に、要らないソースを消しました、下記のソースもエラーが出ます、 return eventもあります


(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;
});

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);
});
}

})();

分かりやすいように、図も修正しました。

pankou様

同じレコードを更新するのに、APIを使う必要はないと思うのですが、なぜAPIを使っていらっしゃるのでしょうか。

それがエラーの原因だと思いますが。

milkyway0307さん

ご返事、ありがとうございます。

サブテーブルのフィールド値を更新したいです、調べますと、サブテーブルのフィールドの更新はputしか出来無さそうですので、APIを使いました。

もしかして、直接に修正して保存出来ますか?試してみます。

再度、ありがとうございます。

やっぱり駄目ですね、直接に修正する時には下記のエラーが出ます、原因はkitone.events.onには kintone.app.record.set()関数が使えないです。

ですので、APIでサブテーブルの更新をしました。

参照URL:

https://developer.cybozu.io/hc/ja/community/posts/205549333-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%B3%E3%81%A7%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E5%80%A4%E3%82%92%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B

 

pankou様

サブテーブルでも return event で更新できます。

event.record[‘サブテーブル名’].value[**行番号**].value[‘フィールド名’].value

を書き換えて return event をすれば既存の行は更新されるはずです。APIを自レコードにかけている限り、このレコードは「保存」ボタンでは保存できないのではないでしょうか。(**行番号** のところには数値が入ります)。

ただし、サブテーブルの行を追加するには、push して配列の要素数を増やす必要があります。もしかして、そのあたりでつまずいていらっしゃいます?

↓ が少し参考になるかも知れません。

https://developer.cybozu.io/hc/ja/articles/202166270#step4

pankou様

サブテーブルでも return event で更新できます。

event.record[‘サブテーブル名’].value[**行番号**].value[‘フィールド名’].value

を書き換えて return event をすれば既存の行は更新されるはずです。APIを自レコードにかけている限り、このレコードは「保存」ボタンでは保存できないのではないでしょうか。(**行番号** のところには数値が入ります)。

ただし、サブテーブルの行を追加するには、push して配列の要素数を増やす必要があります。もしかして、そのあたりでつまずいていらっしゃいます?

↓ が少し参考になるかも知れません。

https://developer.cybozu.io/hc/ja/articles/202166270#step4

 

milkyway0307さん

ご回答、ありがとうございました、milkyway0307さんのやり方で出来ました、ありがとうござい~(^^)