共有してもらったものを元に書き足させてもらうと、こんな感じでしょうか。
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit'
], function(event) {
return new kintone.Promise(function(resolve, reject) {
swal({
title: "複数登録確認",
text: "翌週も合わせて予定表に登録しますか?",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "はい、登録します",
cancelButtonText: "いいえ、当日のみです",
closeOnConfirm: false,
closeOnCancel: false
},
function(isConfirm) {
if (isConfirm) {
//post用項目作成
if (event.record['複数予定時刻_1']['value'] !== "") {
datetime = moment().format('YYYY-MM-DD') + ' ' + event.record['複数予定時刻_1']['value'];
var datetimed = moment(datetime).add(7, 'days');
var postweeks1 = moment(datetimed).toISOString();
var datetimen = moment(datetimed).add(1, 'hour');
var postweeke1 = moment(datetimen).toISOString();
var service = event.record['複数予定']['value'];
var detail = event.record['複数予定詳細']['value'];
var title = event.record['氏名']['value'] + ':' + event.record['複数予定']['value'];
}
//登録実施
var body = {
"app": 4,
"records": [{
"日時": {
"value": postweeks1
},
"日時_0": {
"value": postweeke1
},
"予定": {
"value": service
},
"予定詳細": {
"value": detail
},
"スケジュール上の表示": {
"value": title
},
}]
};
kintone.api(kintone.api.url('/k/v1/records', true),
'POST', body,
function(resp) {
// success
console.log(resp);
resolve(resp);
},
function(error) {
// error
//swal("エラー", "複数登録予定についてエラーです", "error");
//console.log(error);
swal({
title: 'エラー',
text: '複数登録予定についてエラーです',
type: 'error'
}, function() {
reject(error);
});
}
);
//swal("登録完了", "複数登録を実施しました", "success");
} else {
//swal("当予定のみ登録完了", "「登録内容」の予定のみ登録しました", "success");
swal({
title: '当予定のみ登録完了',
text: '「登録内容」の予定のみ登録しました',
type: 'success'
}, function() {
resolve();
});
}
}
);
}).then(function(r) {
return event;
}).catch(function(e) {
//event.error = 'エラーが発生しました';
return event;
});
});
ポイントは次のとおりだと思います。
- やはりSweetAlertが非同期であること
- そのSweetAlertのコールバックを受け取る書き方を知っていること(これを知らないとPromiseも使いようがありませんので)
- submitイベントに適切にkintone.Promiseオブジェクトのチェーンをreturn eventしてあげること
-
- はまとめられますが、2がよりポイントだと思います。詳しくはこちらにまとめていますが、コールバックを受け取る書き方への書き換えはこのようになります。
// コールバックを受け取らない書き方
swal(“当予定のみ登録完了”, “「登録内容」の予定のみ登録しました”, “success”);
// コールバックを受け取る書き方
swal({
title: ‘当予定のみ登録完了’,
text: ‘「登録内容」の予定のみ登録しました’,
type: ‘success’
}, function() {
// ここがコールバック
});
3.については、この辺を確認頂いて、今回のケースと見比べてもうらうのが良いかと思います。
エラー処理をどこでどのようにするかが少し悩ましいのと、全体の動きは確認していませんが、このような書き方をすれば、SweetAlertを含めた非同期処理を拾いながら処理を進めることが出来ますので、実現されたい形になると思います。