テーブル内の日付を、テーブル外の別フィールドにセットしたい。

以下のようなテーブルを作成しています。

「営業状況」フィールドが「提案」となっている行の「活動日」を、テーブル外の別フィールド(「提案日」とします)にセットすることは可能でしょうか?

https://developer.cybozu.io/hc/ja/community/posts/115000371146

こちらを参考にしてみましたが、うまくいかず。。
console.logを見る限り、日付の取得まではなんとかできているようなのですが、別フィールドにセットがうまくいきません。
ご教示のほどよろしくお願いいたします。

jQuery.noConflict();
(function($) {
“use strict”;

// レコードの編集画面が表示された時
kintone.events.on([‘app.record.detail.show’], function(event) {

function setDate(arg) {

var target = arg[0];

for (var i = 0; target.length > i; i++) {
var row = target[i]; // 行数を取得
console.log(row);
var tableRecords = event.record[‘テーブル’].value;
var teianDate = tableRecords[row].value[‘活動日’].value; //row行目の日付データを格納
console.log(teianDate);
event.record[‘提案日’][‘value’] = teianDate; //提案日フィールドにteianDateをセット
}
}

var targetRow = []; // 対象の行番号
var tableRecords = event.record[‘テーブル’].value;
for (var j = 0; j < tableRecords.length; j++) {
var secondItemName = tableRecords[j].value[‘営業状況’].value;
if (secondItemName == ‘提案’) {
targetRow.push(j);
}
}

// サブテーブルのhtmlが表示されるまで0.5秒待つ
setTimeout(setDate, 500, [targetRow]);
return event;
});
})(jQuery);

そもそもなんですが、「提案日」フィールドに値をセットするのは編集画面で、「活動日」か「営業状況」が変更されたタイミングではないでしょうか?
app.record.detail.showですと、レコード詳細画面を開いたタイミングになってしまいます。

(function() {
"use strict";
var events = [
'app.record.create.change.活動日', 'app.record.create.change.営業状況',
'app.record.edit.change.活動日', 'app.record.edit.change.営業状況'
];
kintone.events.on(events, function(event) {

// 変更されたサブテーブルの行の活動日と営業状況の値を取得
var changeRowDate = event.changes.row.value['活動日'].value;
var changeRowStatus = event.changes.row.value['営業状況'].value;

var record = event.record;

// 活動日と営業状況が空欄でない時
if(changeRowDate && changeRowStatus){
// 営業状況が"提案"である時
switch (changeRowStatus) {
case '提案':
record['提案日'].value = changeRowDate;
break;
}
}

return event;

});
})();

FMさん
ありがとうございます!記載いただいた内容で、行編集と連動した日付のセットができました。

ただ、間違って「提案」を選択 → 「検討」に修正した場合にも、日付がセットされたままになってしまうので、
可能であれば、すべて入力が終わって保存するタイミング、もしくは保存しおわってレコードが表示されるタイミング(?)で
テーブルの中から「提案」の行を探す → その行の日付を取得してセット としたいのです。。

レコード編集画面の保存実行前イベント がありますので、こちらを使用します。

以下のコードだとサブテーブルを上から探して一番最後に見つかった「提案」の行の活動日を登録するので、
もし「提案」の行が複数存在して特定の行を指定したいのであれば、forの前後を書き換える必要があります。

(function() {
"use strict";
var events = [
'app.record.create.submit', 'app.record.edit.submit'
];
kintone.events.on(events, function(event) {

var record = event.record;
var rows = record["テーブル"].value;

for(var i in rows){
var date = rows[i].value["活動日"].value;
var status = rows[i].value["営業状況"].value;
switch (status) {
case "提案":
record["提案日"].value = date;
break;
}
}

return event;

});
})();

 

FMさん

ありがとうございます!実際に適用してみたところ、思い通りの挙動となりました。
for文の中身もシンプルで、勉強になります。
ステータスごとの日付取得ができるようになりました。本当にありがとうございます!