新規投稿
フォローする

SweetAlert2処理がスルーされる

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

 

レコードの新規保存時に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'
);
}

});

});
})();

==========================================

 

0

3件のコメント

Avatar
rex0220

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);
}

});

});
});
})();
2
Avatar
y-kishi

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);

});

});

=============================================

 

エラーの原因はまた別の機会に対応したいと思います。

ありがとうございました。 

0
Avatar
Ryu Yamashita

> 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;
});
});
})();
1
サインインしてコメントを残してください。