最初に結論から
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の公式ドキュメントには、↑のやり方載ってないんですよ。
これ試行錯誤してて偶然発見したんだけど、仕様だったらちゃんと載せてほしいなー。
なもんで突然挙動が変わっても許してくださいね
もう少し詳しく
公式ドキュメントにはこうあります。
レコード追加イベント#フィールドの値を書き換える
ハンドラーが 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
が分かりやすいじゃないかなーと個人的には思います。
まぁこの変は趣味ですね。
ではまた〜。
-
「return文を書かない」「returnに何も渡さない」はどちらも
return undefined
と同義なので、「その他をreturn」と一緒ね。 ↩