モバイルのレコード追加/編集後のイベント処理について

モバイルの詳細画面表示イベントで「mobile.app.record.detail.show」がありますが、マニュアルを確認すると「レコードの追加画面、編集画面で保存した時」にも発生するとあります。

https://cybozudev.zendesk.com/hc/ja/articles/201941974#step1

submitイベントがモバイル用にない理由の一つなのかなと思ったのですが、レコード追加後のshowイベント、編集後のshowイベント、一覧から詳細を表示した際のshowイベントを区別する方法はありませんでしょうか?

現状だと、レコード追加/編集後はshowイベントが2回発生してしまいます。。

Shinomiyaさん

私もsubmitないの何でだろう?と思っていましたが、そういうことだったのですね。自作するにも引っ掛けるフラグがないと厳しそうですねぇ。URIかCookieあたりを駆使すれば良いかと一瞬思いましたが、難しそうな・・・。

Yamashita さん

そうなんですよ。なんでsubmitないのかってずっと不思議でしたよね?(笑)

リファラーとかも考えましたがなかなか「これ!」ってのが無いんですよね。
Web Storage使うとかですかねぇ。

Web Storage使うとかですかねぇ。
なるほど、ちょっと高級ですね。

イベントの複数のパターンを持つのは使いようによっては便利が良さそうですが、プロパティ等で使い分けが出来るといいですねぇ。

イベントの複数のパターンを持つのは使いようによっては便利が良さそうですが、プロパティ等で使い分けが出来るといいですねぇ。

ですね。
詳細画面と言っても一覧、登録、更新後のどこから来たのかがわかるようになるとより便利に使えますよね。

Shinomiyaさん

for (var i in document){
console.log(i +“=”+document[i])
}
documentのプロパティを全部見て違うことろを見つけるっていう感じですかね・・・

スッキリしないですが、リファラーが現実解のような気もします。

リファラーでやろうとしたところ、どうもレコード詳細画面のURLが必ず返ってくるようで断念。。

ということでstorageを使って以下のようにして前画面の状態を取るようにしました。

var storage = sessionStorage; //セッションストレージの準備

 //レコード編集画面表示時の処理
kintone.events.on('mobile.app.record.edit.show',function (event) {
  if (typeof sessionStorage !== 'undefined') {
          storage.setItem('mode','edit');
  } else {
    alert("本ブラウザではWeb Storageが使えません");
  }
});

 //レコード追加画面表示時の処理
kintone.events.on('mobile.app.record.create.show',function (event) {
  if (typeof sessionStorage !== 'undefined') {
      storage.setItem('mode','create');
  } else {
    alert("本ブラウザではWeb Storageが使えません");
  }
});

そして、レコード詳細イベントでこんな感じで処理を分けました。

kintone.events.on(‘mobile.app.record.detail.show’,function (event) {
var mode = storage.getItem(‘mode’);

if(mode === 'create'){ //追加画面から
     〜追加画面から遷移してきた時の処理〜
      storage.clear();
  }

  if(mode === 'edit'){ //変更画面から
     〜変更画面から遷移してきた時の処理
  }

  storage.clear();

});

これでとりあえずは動いてくれました。

Shinomiyaさん、強引にやられましたね。
お疲れ様です。

スマホで軟化するとき、参考にさせていただきます!!

Shinomiyaさん、情報共有頂き、ありがとうございます。storageは今回以外のケースでも使い道がありそうですねぇ。参考にさせて頂きます。