kintone.Promise処理について

プロセスのアクション実行前イベント前にコメント入力欄を表示して

コメントが入力された場合、更新処理を行い、次のプロセスに進むようにする。

また、空欄またはキャンセルされた場合はプロセスを中断するようなプログラムを作りたいのですが、更新時に「レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました」とエラーが出るのですが、kintone.Promiseを使って処理できないのでしょうか?

ご教授お願い致します

ソースは以下の通りです。

 

jQuery.noConflict();

(function ($) {
"use strict";

// アプリID
var targetAppId = 100;

var ProcessEvents = ["app.record.detail.process.proceed", "mobile.app.record.detail.process.proceed"];

kintone.events.on(ProcessEvents, function(event) {

// レコードID取得
var recordId = kintone.app.record.getId();

return new kintone.Promise(function(resolve, reject) {

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

Swal.fire(options).then(function(result){
// コメント入力チェック
if (result.value) {
// 更新時アラート表示処理
Swal.fire({
type: 'success',
title: '書き込みは成功しました',
html: ' コメント内容:' + result.value
});

var upsertParam = {
"app": targetAppId,
"id": recordId,
"record": {
"決裁者コメント": { value:result.value },
}
}

// 更新処理
kintone.api("/k/v1/record", "PUT", upsertParam,function(resp){
});
resolve();
}else {
Swal.fire({
type: 'error',
title: 'コメントは必須入力です!',
});
reject();
}
});
});
return event;
});
})(jQuery);

 

更新処理は詳細表示イベントに変更したらうまく実装できました。

もっとうまく処理かけそうですが、ソース共有します。

jQuery.noConflict();

(function ($) {
"use strict";

// 分掌別申請アプリID
var targetAppId = 100;
//コメント用グローバル変数
var comment;

//コメント入力画面表示関数
function input_comment(event) {
//非同期処理
return new kintone.Promise(function(resolve, reject) {

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

Swal.fire(options).then(function(result){
//コメント入力チェック
if (result.value) {
//コメント表示処理
Swal.fire({
type: 'success',
title: '書き込みは成功しました',
html: ' コメント内容:' + result.value
});
comment = result.value;
resolve();
}else {
//コメント未入力orキャンセル処理
Swal.fire({
type: 'error',
title: 'コメントは必須入力です!',
});
reject(event);
}
});
});

return event;
};

function update_comment(event) {
if(comment){
var recordId = kintone.app.record.getId();
var upsertParam = {
"app": targetAppId,
"id": recordId,
"record": {
"決裁者コメント": { value:comment },
}
}

//更新処理
kintone.api("/k/v1/record", "PUT", upsertParam,function(resp){
// 成功時は画面をリロード
location.reload(true);
});
}
return event;
};

//プロセスのアクション実行前イベント
var ProcessEvents = ["app.record.detail.process.proceed", "mobile.app.record.detail.process.proceed"];
//レコード詳細表示イベント
var ProcessEvents2 = ["app.record.detail.show","mobile.app.record.detail.show"];

kintone.events.on(ProcessEvents, input_comment);
kintone.events.on(ProcessEvents2, update_comment);
})(jQuery);