LoginSignup
8
9

More than 5 years have passed since last update.

kintoneのsubmit系イベントではreturn falseするとキャンセルできる

Last updated at Posted at 2017-08-28

最初に結論から

kintone JavaScript APIによるカスタマイズで、レコードの保存時に
「confirmダイアログを出して、キャンセルされたら編集画面に戻る」
という処理を実装しました。

以下のようにハンドラ内で return false すればOKでした。
submit系の3種類のイベント共通で使えます。

(function() {
  var events = ['app.record.create.submit', 'app.record.edit.submit', 'app.record.index.edit.submit'];
  kintone.events.on(events, function(event) {
    if (!window.confirm('保存してもよろしいですか?')) {
      // falseを返すと単なるキャンセルができる
      return false;
    }
  });
})();

kintoneの公式ドキュメントには、↑のやり方載ってないんですよ。
これ試行錯誤してて偶然発見したんだけど、仕様だったらちゃんと載せてほしいなー。
なもんで突然挙動が変わっても許してくださいね :sweat_smile:

もう少し詳しく

公式ドキュメントにはこうあります。
レコード追加イベント#フィールドの値を書き換える

ハンドラーが record オブジェクトのフィールドの値を書き換えて event オブジェクトを return した場合、その値でフィールドの値を更新します。

レコード追加イベント#レコードにエラーを表示する

ハンドラーが event オブジェクトの error にエラーメッセージを代入して event オブジェクトを return した場合、フィールドの値の書き換えと編集可/不可の設定はキャンセルされ、画面の上部にエラーメッセージが表示されます。

なので、confirmでキャンセルしたい時も以下のように書けば動くんですが、

if (!window.confirm('保存してもよろしいですか?')) {
  event.error = 'キャンセルされました。';
  return error;
}

キャンセルしたのは自分なのだし、赤文字でエラーが出るのもビミョーなので、
冒頭のようにreturn falseがスマートではないかと。

ハンドラ内でreturnする場合の4種類の挙動

僕が確認できたSubmit時の挙動は、以下の4種類です。

  • eventオブジェクトをreturn
    • errorプロパティなし(eventオブジェクト変更を反映してSubmit)
    • errorプロパティあり(エラー表示付きキャンセル)
  • falseをreturn(静かにキャンセル)
  • その他をreturn1(eventオブジェクト変更を無視してSubmit)

そのうち3種類を試せるコード書いてみました。

(function() {
  var events = ['app.record.create.submit', 'app.record.edit.submit', 'app.record.index.edit.submit'];
  kintone.events.on(events, function(event) {
    if (window.confirm('エラーを出してもよろしいですか?')) {
      // 公式のエラー表示&キャンセル方法
      event.error = 'エラーを出しました!';
      return event;
    }
    if (!window.confirm('保存してもよろしいですか?')) {
      // falseを返すと単なるキャンセルができる
      return false;
    }
    // eventとfalse以外は何を返しても一緒
    return true;
  });
})();

「その他をreturn」の時に何をreturnすると読みやすい?

return
return undefined
return null
return ''
return 0
return 1
return true

などどう書いてもkintone上の挙動は一緒なんですが、
return falseがキャンセルなので、それと対にして
return trueが分かりやすいじゃないかなーと個人的には思います。
まぁこの変は趣味ですね。

ではまた〜。


  1. 「return文を書かない」「returnに何も渡さない」はどちらもreturn undefinedと同義なので、「その他をreturn」と一緒ね。 

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9