非同期処理

先日、違うスレッドで似たような質問をしたのですが、

どうしてもうまくいかないので再度ご教授ください。

【行いたいフロー】

①実行前イベントの時にコメント入力をSweetAlert2で表示。

②コメントがあった場合、コメントと日付に値を入れる

コメントがない場合、日付のみ値を入れる

【現象】

console.logをみると値は入っているように見えるが、実際は入っていない

 

kintone.Promiseを使わないと入らないとは思いますが、

kintone.Promiseを使っても入らないのはなぜでしょうか?

 

ここにアップするように少しプログラムを削除したので)が一致しないかもしれません・・・

jQuery.noConflict();

(function ($) {
"use strict";

//コメント入力画面表示関数
function input_comment(event) {
var record = event.record;
var comment;//コメント用変数

//日付取得
var dt = new Date();
var y = dt.getFullYear();
var m = ("00" + (dt.getMonth()+1)).slice(-2);
var d = ("00" + dt.getDate()).slice(-2);
var day = y + "-" + m + "-" + d;

//非同期処理
return new kintone.Promise(function(resolve, reject) {

//コメント入力処理
var options = {
title: "コメント",
text: "コメントを記入して『コメント書き込みボタン』を押してください",
input: "textarea",
showCancelButton: true,
confirmButtonText: 'コメント書き込み',
allowOutsideClick: false
}

Swal.fire(options).then(function(result){
//コメント入力チェック
if (result.value) {
//コメント表示処理
let timerInterval
Swal.fire({
type: 'warning',
title: '処理中です。しばらくお待ちください。',
html: 'I will close in <strong></strong> milliseconds.',
timer: 10000,
onBeforeOpen: () => {
Swal.showLoading()
timerInterval = setInterval(() => {
Swal.getContent().querySelector('strong')
.textContent = Swal.getTimerLeft()
}, 100)
},
onClose: () => {
clearInterval(timerInterval)
}
}).then((result) => {
if (result.dismiss === Swal.DismissReason.timer) {
console.log('I was closed by the timer')
}
})

comment = result.value;
event['record']['コメント']['value'] = comment;
event['record']['日付']['value'] = day;
kintone.app.record.set(event);

resolve();

}else if(result.dismiss === 'cancel'){
resolve(false);
//reject(event);
}else {
//コメント未入力
let timerInterval
Swal.fire({
type: 'warning',
title: '処理中です。しばらくお待ちください。',
html: 'I will close in <strong></strong> milliseconds.',
timer: 10000,
onBeforeOpen: () => {
Swal.showLoading()
timerInterval = setInterval(() => {
Swal.getContent().querySelector('strong')
.textContent = Swal.getTimerLeft()
}, 100)
},
onClose: () => {
clearInterval(timerInterval)
}
}).then((result) => {
if (result.dismiss === Swal.DismissReason.timer) {
console.log('I was closed by the timer')
}
})

event['record']['日付']['value'] = day;
kintone.app.record.set(event);
resolve();
}
});
});
}

//プロセスのアクション実行前イベント
var ProcessEvents = ["app.record.detail.process.proceed"];

kintone.events.on(ProcessEvents, input_comment);

})(jQuery);

 

shima さん

60行目の kintone.app.record.set() はプロセス進行イベントでは意味ないはずです。

イベントオブジェクト自体を書きなおしているので resolve(event) してあげる必要があります。

試しに resovle() となっている部分を resovle(event) と書きなおしてみてください。 

HSNSA様

 

お世話になります。

kintone.app.record.set(event);を削除し

resovle(event)に変更したところ、

おっしゃったとおり、値が入りました!

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

shima さん

良かったです!

細かいですが、 false を resolve で解決している部分は、本来エラー(catch)の処理に入るべき場所なので、
reject(false) として挙げたほうが丁寧かと思います。

HANSA様

キャンセルの箇所ですね。

よくわからずfalse を resolve使っていました。

ご教授頂き有難うございました。