コメントをPOSTした後の画面リロードについて

お世話になっております。

 

特定のフラグがたっている状態でレコードの保存が成功した時、コメントに定型文を投稿するプログラムを用意しました。

困っているのが、画面リロードのタイミングです。

 

レコード保存ボタンを押す→保存成功→画面リロード(自動で投稿したコメントを表示させる)としたいのですが、

レコード保存ボタンを押す→画面リロード となってしまい、キャンセルボタンを押さないとレコード編集画面から抜けることが出来ません。

 

//フラグ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さん

 

重ね重ねありがとうございます!

やはり保存後、コメント部分のリロードは行われませんでした。コメントの自動投稿自体は動いているので、一旦このまま運用を進めても問題ないといえば問題ないのですが…せっかくお知恵を拝借したのにすみません。

改めて自分でも再度勉強しなおします!

もし、また何かお気付きの点があれば助力頂けると幸いです。