レコード編集後にlocation.hrefした時のダイアログを消したい

お世話になります。

下記のコードのとおり、submitイベントでAPIを使ってレコードの登録・更新を行って、保存をせずに指定したページへ移動するようにしたいです。

ところが、app.record.edit.submitの時のみ、ページ移動時に確認のConfirmが実行されてしまいます。*新規作成時はダイアログがでません。

window.beforeunloadを空にしてあげると、ダイアログがでないという情報を見つけて試してみましたが、依然出てしまいます。

なんとか解決方法はないでしょうか。よろしくお願いいたします。

var events = [‘app.record.create.submit’,‘app.record.edit.submit’];
kintone.events.on(events, function(e) {

(省略)

kintone.api(kintone.api.url(‘/k/v1/bulkRequest’, true), ‘POST’, bulk_requests_body, function(resp) {

if(e.type === “app.record.edit.submit”){
window.beforeunload = function(){}  //これを入れてみましたが効果なし
location.href = ‘/k/’ + kintone.app.getId() + ‘/show#record=’ + e.recordId;
}else{
location.href = ‘/k/’ + kintone.app.getId() + ‘/show#record=’ + resp.results[0].id;
}

return false;
},function(error) {

console.log(error);
reject(error);

});

 

「このサイトを離れてもよろしいですか?」の確認ダイアログでしょうか。

app.record.create.submit とapp.record.edit.submit の挙動が異なるというのが仕様として合っているのか気になります。

レコードの登録・更新している部分のコードも見せていただいてよろしいでしょうか。

 

 

西尾英道さん
cstapの瀧ヶ平です

windowへのbeforeunloadイベントのイベントハンドラの登録は addEventListener を用いて行われているので、直接beforeunloadイベントを登録している関数の参照が取れない以上 removeEventListener メソッドを使うこともできないのでイベントリスナの削除によるダイアログの抑止は不可能かと思います。

ダイアログの抑止だけなら、追加・編集画面表示時のレコードの状態のままでページ遷移すればよいので、 表示時イベントでのレコードオブジェクトを変数に保存して起き、kintone.app.record.set メソッドを利用してレコードの値を最初に戻してからページ遷移するような処理を書けばできるのではないでしょうか?

 

参考になりますでしょうか?

ダン吉さま 瀧ヶ平さま

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

「このサイトを離れてもよろしいですか?」の確認ダイアログのことです。質問が曖昧で申し訳ございません。

 

質問後、いろいろ試してみたところ、挙動の差ですが、イベントではなくウィンドウにあるように思えました。

window.open()にて編集画面を新規で開いて、遷移した場合は、確認ダイアログは表示されませんでした。

とりあえず編集ボタンを自作のものにしてwindow.open()で編集画面を表示するようにして、保存後は window.close と window.opener.location.reload にてとりあえず対応できました。

 

とはいえ、瀧ヶ平さまの方法の方がコンパクトに実現できそうです。大変わかりやすいご助言をいただき感謝しております。ありがとうございました。

 

 

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

西尾様と同様の問題に直面しております。

瀧ヶ平様よりコメントいただいている、kintone.app.record.set メソッドですが、

kintone.events.on のイベントハンドラ内でどのように活用できますでしょうか。

お手数ですが、ご助言頂けますと幸いです。

khosokaiさま

 

お世話になります。質問した水野です。

 

おそらくshowイベント時にeventの値もしくは、kintone.app.record.get() で取得した値を

変数にjQuery.extendなど使ってコピーしておいて、

submitイベント時にkintone.app.record.set()で初期値に戻すという方法かと思います。

 

私も一度試しましたが、kintone.app.record.set()の処理を待たずに保存されてしまうため、うまくいきませんでした。

 

いずれにしてもkintone.app.record.set()の処理はサブテーブルや項目数が多いと非常に遅い!ため、

Kintone標準の入力画面をangularやjQueryを使って、標準フィールドに入力しないように自作するしかない・・・、と現在考えております。うーむ。

補足:

下記Cybozuの注意事項を見る限り、submitイベントを含むkintone.events.on のインベントハンドラ内では「kintone.app.record.set」を実行できないようです。

https://developer.cybozu.io/hc/ja/articles/201942014#step2

注意事項

  • kintone.events.on のインベントハンドラ内で kintone.app.record.set および kintone.mobile.app.record.set を実行することはできません。上記のイベントハンドラ内ではレコードデータの取得は引数のeventオブジェクトを、レコードデータの更新はeventオブジェクトのreturnを使用してください。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。