お世話になっております。
レコードの新規保存時にSweetAlert2を使用してメッセージを表示させたいと考えております。
保存ボタンを押した際、メッセージ画面は表示されますがメッセージの処理を待たずにレコードの保存処理が実行されてしまいます。
コードは以下のようになっておりますが、どこを修正すればよろしいのでしょうか。
アドバイスなどいただけましたら幸いです。
==========================================
(function() {
“use strict”;
// レコード追加画面の保存前処理
kintone.events.on(‘app.record.create.submit’, function(event) {
//確認ダイアログの表示
swal({
title: ‘テストタイトル’,
text: ‘テストテキスト’,
type: ‘warning’,
showCancelButton: true,
confirmButtonColor: ‘#3085d6’,
cancelButtonColor: ‘#d33’,
confirmButtonText: ‘はい’,
cancelButtonText: ‘いいえ’,
}).then(function(isConfirm) {
//「はい」を押した場合
if (isConfirm) {
swal(
‘完了’,
‘完了しました。’,
‘success’
);
//「いいえ」を押した場合
} else if (isConfirm.dismiss === ‘cancel’) {
swal(
‘キャンセル’,
‘キャンセルしました。’,
‘error’
);
}
});
});
})();
==========================================
y-kishi さん
レコード追加画面の保存実行前イベント の説明に下記があります。
・kintone.Promiseオブジェクトをreturnすると、非同期処理の実行を待つことができます。
ということで、Promise 処理すれば OK です。
(function() {
"use strict";
// レコード追加画面の保存前処理
kintone.events.on('app.record.create.submit', function(event) {
return new kintone.Promise(function(resolve, reject) {
//確認ダイアログの表示
swal({
title: 'テストタイトル',
text: 'テストテキスト',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'はい',
cancelButtonText: 'いいえ',
}).then(function(isConfirm) {
//「はい」を押した場合
if (isConfirm.value) {
swal({
title: '完了',
text: '完了しました。',
type: 'success',
}).then(function(result) {
resolve(event);
});
//「いいえ」を押した場合
} else if (isConfirm.dismiss === 'cancel') {
swal(
'キャンセル',
'キャンセルしました。',
'error'
);
resolve(false);
}
});
});
});
})();
rex0220 様
ご回答いただきありがとうございます。
返信が遅くなり申し訳ございません。
kintone.Promiseを使用したところ、無事メッセージの処理を待ってレコード保存の実行されました。
ただ、「いいえ」を押した際は「Uncaught (in promise) cancel 」といったエラーが表示され処理が中断されました。
今回は以下のように、successのメッセージに変更しました。
=============================================
return new kintone.Promise(function(resolve, reject) {
//確認ダイアログの表示
swal({
title: ‘テストタイトル’,
text: ‘テスト本文’,
type:‘success’,
}).then(function(result) {
resolve(event);
});
});
=============================================
エラーの原因はまた別の機会に対応したいと思います。
ありがとうございました。
> Uncaught (in promise) cancel
の原因は、元々のお話と同じ現象でPromiseのチェーンが保たれずにスルーされていることが原因かと思います。SweetAlert2のswal() は kintone.Promise() と同じくPromiseオブジェクトを返却する非同期処理の関数です。ですので、success時の書き方に揃えてあげれば良いと思います。
swal({
title: ‘キャンセル’,
text: ‘キャンセルしました。’,
type: ‘error’,
}).then(function (result) {
resolve(false);
});
ちなみに、swal()がPromiseオブジェクトを返却するという特性を生かすと、次のような書き方もありかと思います。
(function () {
“use strict”;
// レコード追加画面の保存前処理
kintone.events.on(‘app.record.create.submit’, function (event) {
//確認ダイアログの表示
returnswal({
title:‘テストタイトル’,
text:‘テストテキスト’,
type:‘warning’,
showCancelButton:true,
confirmButtonColor:‘#3085d6’,
cancelButtonColor:‘#d33’,
confirmButtonText:‘はい’,
cancelButtonText:‘いいえ’
}).then(function (isConfirm) {
//「はい」を押した場合
if (isConfirm.value) {
returnswal(
‘完了’,
‘完了しました。’,
‘success’
);
//「いいえ」を押した場合
} else if (isConfirm.dismiss === ‘cancel’) {
event=false;
returnswal(
‘キャンセル’,
‘キャンセルしました。’,
‘error’
);
}
}).then(function(){
returnevent;
}).catch(function(){
event.error=‘保存時にエラーが発生しました。’;
returnevent;
});
});
})();
system
(system)
クローズされました:
5
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。