RestAPIにてレコード更新後、標準機能の編集処理でエラー発生

Kintone初心者ですが、レコード更新についてご教授いただきくた投稿させていただきました。

1.レコードにボタンAAAを配置し、そのボタンをクリックすることで、ログインユーザ名をテキストに更新(DBまで更新する)

2.更新したレコードを、Kintone標準機能でレコードを「編集する」

3.何も編集せずに保存を押すと、エラー発生

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

上記1で更新処理を行っておりますが、2の「編集する」際に見ているリビジョンが、それより古いために起きているようです。

2の処理で、新しいリビジョンを設定する方法や、エラー無く編集できる方法を教えていただければと思います。

以下、ソースコードとなります。


function btnAAAClick(currentRow) {
// body…
var appUrl = kintone.api.url(‘/k/v1/record’);
var update_body = {
“app”: kintone.app.getId(),
“id”: parseInt(currentRow.children().eq(1).find(‘span’).text()),
“record”: {
“AAAName”: {
“value”: loginUser
},
},
// CSRF TOKEN: Needs to be set when using API (POST, PUT, DELETE) from kintone
“__REQUEST_TOKEN__”: kintone.getRequestToken()
};

if (currentRow.children().eq(8).find(‘span’).length == 1) {
currentRow.children().eq(8).find(‘span’).text(loginUser);
} else if (currentRow.children().eq(8).find(‘input’).length == 1) {
currentRow.children().eq(8).find(‘input’).val(loginUser);
}

if (currentRow.find(‘div.recordlist-edit-gaia’).length == 1) {
// 同期リクエストを行う
var xmlHttp = new XMLHttpRequest();
xmlHttp.open(“PUT”, appUrl, false);
xmlHttp.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xmlHttp.setRequestHeader(“Content-Type”, “application/json;charset=UTF-8”);
xmlHttp.send(JSON.stringify(update_body));

//取得したレコードをArrayに格納
var respdata = JSON.parse(xmlHttp.responseText);
console.log(xmlHttp.responseText);
}
}

kintone.events.on(“app.record.index.edit.submit”, function(ev) {
var record = ev.record;
alert(“The updated date time is " + record[”$revision"][“value”] + “.”);
$(‘.value-5118393’).find(‘span:empty’).append(“<button type=‘button’ class=‘btn btn-info btn-AAA’ style=‘width: 100%; padding: 0;’>AAA</button>”);
$(‘.btn-AAA’).on(‘click’, function() {
// body…
var currentRow = $(this).closest(‘tr’);
btnAAAClick(currentRow);
});
$(‘.value-5118395’).find(‘span:empty’).append(“<button type=‘button’ class=‘btn btn-info btn-guide’ style=‘width: 100%; padding: 0;’>BBB</button>”);
$(‘.btn-guide’).on(‘click’, function() {
// body…
var currentRow = $(this).closest(‘tr’);
btnAAAClick(currentRow);
});
});

 

以上、宜しくお願い致します。

ibsvietnamさん

 

こんにちは。

おっしゃるように、画面上で表示されているものと、DB側のデータに差異があるため出ています。

DB更新後に、location.reload(); を行い画面をリフレッシュするのはどうでしょうか。

カキ氷さん

ご回答ありがとうございます。

リフレッシュは確実な手段ですね。参考にさせていただきます。

 

 

カキ氷さん、皆さん

リフレッシュを実装したのですが、画面が再表示されるまでの間が長く、実運用的には少し難しいと感じました。

リビジョンの差異を解消できる方法がありましたら、ご教授いただけますでしょうか。

ibsvietnamさん

 

プログラムでそのようなリビジョンの差異を吸収できる仕組みはないかと思われます。

もし、それが出来てしまうとリビジョンの差異があっても上書きできてしまう等のリスクがあります。

 

1版の手順の「ログインユーザ名をテキストに更新」を編集画面で行うのはいかがでしょうか。

編集画面上でボタンを押したタイミングで値を変更する場合、ボタンのクリックイベント時に以下のような処理で対応できます。

var r = kintone.app.record.get(); // 表示しているレコード情報を取得
r.record['テキスト'].value = 'あいうえお'; // 値の変更
kintone.app.record.set(r); // 変更したレコードを反映

カキ氷さん

ありがとうございます。

教えていただいた対応も含めて、検討していきたいと思います。