お世話になっております。
特定のフラグがたっている状態でレコードの保存が成功した時、コメントに定型文を投稿するプログラムを用意しました。
困っているのが、画面リロードのタイミングです。
レコード保存ボタンを押す→保存成功→画面リロード(自動で投稿したコメントを表示させる)としたいのですが、
レコード保存ボタンを押す→画面リロード となってしまい、キャンセルボタンを押さないとレコード編集画面から抜けることが出来ません。
//フラグ1がたった状態でレコードが保存されたら、コメントを自動で投稿する
(function() {
'use strict';
kintone.events.on('app.record.edit.submit.success', function(event) {
var record = event.record;
if (record['フラグ'].value == 1){
var body1 = {
app: event.appId,
record: event.record.$id.value,
comment: {
"text": "自動メッセージ",
}
};
kintone.api(kintone.api.url('/k/v1/record/comment', true), 'POST', body1, function(resp) {
//success
console.log(resp);
location.reload();
}, function(error) {
//error
console.log(error);
});
}
});
})();
どういった点が問題なのか、アドバイス頂けますと幸いです。
宜しくお願い致します。
yyy さん
kintone.api() の呼び出し方がコールバック関数を利用する記述になっているためだと思います。
コールバック関数を利用する形だと、kintone.api() の処理が完了したことを待たずに次の処理(// success の内容)に進んでしまいます。
kintone.api() の処理が完了したことを待ってから次の処理に進むには、Promise を利用します。
https://developer.cybozu.io/hc/ja/articles/202166310 にある「kintone.Promiseオブジェクトを使った記述方法」に書き換えればうまくいくと思います。
Promise については https://developer.cybozu.io/hc/ja/articles/215029846 などを読むといいかもしれません。
kintone.api(kintone.api.url('/k/v1/record/comment', true), 'POST', body1).then(function(resp) {
// success
console.log(resp);
location.reload();
}, function(error) {
// error
console.log(error);
});
ひよこさん
ご回答頂きありがとうございます!
ご提示頂いたコードがまさに「kintone.Promiseオブジェクトを使った記述方法」に書き換えて頂いたものだと思うのですが、それでもやはりレコード保存ボタンを押した時点で次の処理に進んでしまい…。参考に頂いたページをしっかり読み込んで、何が問題か調べていこうと思います!
単純に、kintone.apiの前にreturnをつければ、reloadしなくてもコメントが表示されますでしょうか?
(編集画面 → 詳細画面 に移動するときに、自動でデータの読み込み処理が入ると思うので。)
kintone.api() の処理が完了するまで待つために、returnが必要かと思われます。
**return** kintone.api(kintone.api.url('/k/v1/record/comment', true), 'POST', body1, function(resp) {
//success
console.log(resp);
// location.reload();
}, function(error) {
//error
console.log(error);
});
PVさん
アドバイス頂きありがとうございます!
なるほど、そういう考え方も出来るのですね。別の観点からの考え方、大変参考になります。
ただ、return kintone.apiとした場合、レコード保存後にコメント部分のリロードは行われませんでした…。
試しにreturnを書き加えた上でreloadも追加したところ、これまでと同様にレコード保存ボタンを押した段階でリロードが走る状態となりました。
提示したコードが中途半端ですいません。
kintone.Promiseを使用した方法で記述する必要がある、かつ、returnする必要があるかと思われます。
return kintone.api(kintone.api.url('/k/v1/record/comment', true), 'POST', body1).then(function (resp) {
//success
console.log(resp);
// location.reload();
}).catch(function (error) {
//error
console.log(error);
});
PVさん
重ね重ねありがとうございます!
やはり保存後、コメント部分のリロードは行われませんでした。コメントの自動投稿自体は動いているので、一旦このまま運用を進めても問題ないといえば問題ないのですが…せっかくお知恵を拝借したのにすみません。
改めて自分でも再度勉強しなおします!
もし、また何かお気付きの点があれば助力頂けると幸いです。
system
(system)
Closed
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。