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

});

});
})();

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

 

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;

});

});

})();