下記のテーブルを用意して
テーブル名:Tコメント
フィールド名(左から):コメント、日付、ユーザー
次のプロセスボタンを押したタイミングで
別フィールド(コピー元コメント、コピー元日付、コピー元ユーザー)に
入力された内容を最終行に追加していきたいのですが、
どのようにコーディングすればよろしいでしょうか?
ご教授お願い致します。
下記のテーブルを用意して
テーブル名:Tコメント
フィールド名(左から):コメント、日付、ユーザー
次のプロセスボタンを押したタイミングで
別フィールド(コピー元コメント、コピー元日付、コピー元ユーザー)に
入力された内容を最終行に追加していきたいのですが、
どのようにコーディングすればよろしいでしょうか?
ご教授お願い致します。
console.logでみると値はとれているとは思うのですが、
追記されないようです。
var record = event.record;
var existing_subtable = record["Tコメント"].value; // 既存のサブテーブル
var subtable = []; // 最終的にPUTするサブテーブル
var appended_subtable = []; // 追加したいサブテーブル
//サブテーブルの内容を配列に格納
for (var i = 0; i < existing_subtable.length; i++) {
subtable.push({
"コメント": { value: existing_subtable[i].value['コメント'].value },
"日付": { value: existing_subtable[i].value['日付'].value },
"ユーザー": { value: existing_subtable[i].value['ユーザー'].value }
});
}
var recordId = kintone.app.record.getId();
var upsertParam = {
"app": targetAppId,
"id": recordId
}
~IF文~
appended_subtable.push({
"コメント": { value: comment },
"日付": { value: result },
"ユーザー": { value: kintone.getLoginUser().code }
});
subtable = subtable.concat(appended_subtable); // 既存と追加分のサブテーブルを結合
console.log(subtable);
var put_record = {}; // レコード更新用オブジェクト
put_record["Tコメント"] = {
value: subtable
};
upsertParam["record"] = put_record;
//更新処理
kintone.api("/k/v1/record", "PUT", upsertParam,function(resp){
// 成功時は画面をリロード
});
こんにちは。
https://developer.cybozu.io/hc/ja/articles/201941974#step3
プロセス管理のイベントでフィールド値の変更ができるみたいなのでこういうのはどうでしょう?
(function() {
"use strict";
let addTableFunc = function(event) {
let record = event.record;
let copyComment = record.コメントコピー.value;
let copyDate = record.日付コピー.value;
let copyUser = record.ユーザーコピー.value;
let addTable = {
"id": null,
"value": {
"コメント": {
"type": "MULTI_LINE_TEXT",
"value": copyComment
},
"ユーザー": {
"type": "USER_SELECT",
"value": copyUser
},
"日付": {
"type": "DATE",
"value": copyDate
}
}
}
record.Tコメント.value.push(addTable)
return event;
}
kintone.events.on("app.record.detail.process.proceed", addTableFunc);
})();
TK様
ご教授有難うございます。
別フィールドでコピー元からコピーしようと思ったのですが、
プロセスのタイミングでコメントアラートで入力させ、それをコピーすることにしました。
その結果、ご教授頂いた方法ですと
Uncaught (in promise) ReferenceErrorが発生したのですが、
恐らくreturn new kintone.Promiseを行っているからですか?
app.record.detail.showのタイミングで行いたいのですが、難しいでしょうか?
現状のソースは以下の通りです。
jQuery.noConflict();
(function ($) {
"use strict";
// *******************
// コメント追記処理
// *******************
// アプリID
var targetAppId = 1000;
//コメント用グローバル変数
var comment;
//画面制御用グローバル変数
var flag = 0;
//コメント入力画面表示関数
function input_comment(event) {
//非同期処理
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) {
//コメント表示処理
Swal.fire({
type: 'success',
title: '書き込みは成功しました',
html: ' コメント内容:' + result.value
});
comment = result.value;
flag = 1
resolve();
}else if(result.dismiss === 'cancel'){
reject(event);
}else {
//コメント未入力
Swal.fire({
type: 'success',
title: '完了しました',
});
flag = 1;
resolve();
}
});
});
return event;
};
function update_comment(event) {
var record = event.record;
var existing_subtable = record["Tコメント"].value; // 既存のサブテーブル
var subtable = []; // 最終的にPUTするサブテーブル
var appended_subtable = []; // 追加したいサブテーブル
//サブテーブルの内容を配列に格納
for (var i = 0; i < existing_subtable.length; i++) {
subtable.push(existing_subtable[i]);
}
//コメント退避
var Finalist = record['決裁者コメント']['value'];
//日付取得
var dt = new Date();
var y = dt.getFullYear();
var m = ("00" + (dt.getMonth()+1)).slice(-2);
var d = ("00" + dt.getDate()).slice(-2);
var result = y + "-" + m + "-" + d;
//レコードID取得
var recordId = kintone.app.record.getId();
var upsertParam = {
"app": targetAppId,
"id": recordId
}
if(comment){
appended_subtable = {
"id": NULL,
"value": {
"コメント": {
"type": "MULTI_LINE_TEXT",
"value": comment
},
"ユーザー": {
"type": "USER_SELECT",
"value": kintone.getLoginUser().code
},
"日付": {
"type": "DATE",
"value": result
}
}
}
subtable = subtable.concat(appended_subtable); // 既存と追加分のサブテーブルを結合
var put_record = {}; // レコード更新用オブジェクト
put_record["Tコメント"] = {
value: subtable
};
upsertParam["record"] = put_record;
//更新処理
kintone.api("/k/v1/record", "PUT", upsertParam,function(resp){
// 成功時は画面をリロード
// location.reload(true);
});
}
return event;
};
//プロセスのアクション実行前イベント
var ProcessEvents = ["app.record.detail.process.proceed"];
//レコード詳細表示イベント
var ProcessEvents2 = ["app.record.detail.show"];
kintone.events.on(ProcessEvents, input_comment);
kintone.events.on(ProcessEvents2, update_comment);
})(jQuery);
ちょっとよく動きが理解できてないのですが、
https://developer.cybozu.io/hc/ja/articles/204564604
公式を見る限りapp.record.detail.showではPromiseは対応してませんね。
このあたり参考になるかと!
TK様
うまく説明できず申し訳ありません。
app.record.detail.process.proceedのタイミングではなく、
app.record.detail.process.proceed後のapp.record.detail.showのタイミングで追記処理をしたかったのです。
(app.record.detail.process.proceedはコメントを入力するだけの処理で追記処理はapp.record.detail.show)
サブテーブルでなければ問題なくできているのですが、サブテーブルには最終行に追記できいないのです。
concole.logでupsertParamをみたところ問題なく入っているようなのですが・・・
今回実装したい流れは下記の通りです。
①プロセスボタン押したタイミングでテキストエリア付のアラートが表示されコメントを入力。
②コメントを入力された場合、Tコメントのサブテーブルの最終行に入力したコメントを表示したい。
※過去のコメントは残したい
もう少し考えて見てダメそうであれば全体的に見直します。