ステータス更新時にAPIを利用して自レコードを更新したい

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

 

質問させて下さい。

やりたい事は下記の通りの事がしたいです。

 

  1. 画面UIからステータスを更新する(対応中→エスカレ)

  2. エスカレボタンが押されたタイミングで別アプリにレコードを作成したのち、自レコード(ステータス更新されるレコード)の1項目、チェックボックスにチェックを入れて更新したい。

 

現在は下記のように実装しているが、うまくいきません。

kintone.events.on("app.record.detail.process.proceed", function(event) {
var record = event.record;
var nStatus = event.nextStatus.value;
console.log(nStatus);
if ("エスカレ" == nStatus) {
var param = cteate_param(appId, record, null);
return kintone.api("/k/v1/record", "POST", param).then(function(resp) {
console.log("create success");
}).catch(function() {
console.log("create fail");
}).then(function() {
var update_param = update_param(record["$id"].value);
update_param.app = kintone.app.getId();
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', update_param).then(function(update_resp) {
console.log("update success");
}).catch(function(error) {
console.log(update fail);
});
});
}
return event;
});

こうした場合に、レコードの作成→更新が成功してもその後に画面上部にエラーが出てしまいます。

エラー

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

 

ご教授頂けますと幸いです。

よろしくお願いします。

察するにステータス更新ボタン押下時に標準で更新しようとしたrevisionと実際に乖離があり(既にAPIにて更新しているので)、そのため、ほかのユーザーがレコードを更新しました。

の文言が出てると思ってます。

こういった場合は回避方法ない感じでしょうか?(というかこういう処理を組んではダメ?)

鈴木さん

Promise 処理では、Promise オブジェクト(event) を返す必要があります。
あとプロセス管理のアクションイベントで、eventオブジェクトをreturnすることでレコード情報を更新できます。
切り貼りしただけですが、下記のようなコードで対応可能だと思います。
チェックボックスのvalue は、変更してください。

kintone.events.on("app.record.detail.process.proceed", function(event) {
var record = event.record;
var nStatus = event.nextStatus.value;
console.log(nStatus);
if ("エスカレ" == nStatus) {
var param = cteate_param(appId, record, null);
return kintone.api("/k/v1/record", "POST", param).then(function(resp) {
console.log("create success");
record["チェックボックス"].value = ['sample1'];
return event;
}).catch(function() {
console.log("create fail");
return event;
});
}
return event;
});

rex0220さん

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

試してみましたが、同様のエラーが出てしまいますね。。T_T

こちらレコード更新しないという方法で調整しようかと思います。

お時間取って頂きありがとうございました!

自分のレコード更新処理を外したのに、revisionエラーになるのは変ですね?

レコード更新処理が残っているか、ブラウザのキャッシュで古いソースが動いていませんか?

 

どうなんでしょうね。

実際ステータス更新(ボタン押して作業者選択した後)って、詳細画面に近いので自レコード更新するのアカンのですかね?

古いソースが動いている事はなさそうです。更新して、ソースの変更箇所が反映されているのは確認しながら動作確認してましたので。

やりようとしては、他にもあるかなーっとは思っているもののそこまでコスト掛けてやる内容じゃないので、とりあえず今回は別の方法(更新しない方法)でやることにしました。

絶対やらないといけない場合には、ステータス更新すらもAPIで行うようにして、レコード保存時などにやれば出来るのではないかっと思ってたりします、検証してませんが。。

ご参考に。一番簡単な処理だと、下記で問題なく更新されています。

kintone.events.on("app.record.detail.process.proceed", function(event) {
var record = event.record;
record["チェックボックス"].value = ['sample1'];
return event;
});

なるほど、そうすると自レコード更新は別に出来ない事ではないのですね。。。

ちょっと私の方でも時間見つけて検証してみようと思います。

 

ありがとうございます!