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

**URL:** <https://community.cybozu.dev/t/topic/3963>\
**Category:** kintone 開発相談\
**Created:** [2019 年 4 月 24 日午前 11:01 UTC](https://community.cybozu.dev/t/topic/3963 "2019-04-24T11:01:18Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account951](https://avatars.discourse-cdn.com/v4/letter/l/7ea924/32.png) [@Legacy\_Account951](https://community.cybozu.dev/u/Legacy_Account951)\
**Post date:** [2019 年 4 月 24 日午前 11:01 UTC](https://community.cybozu.dev/t/topic/3963/1 "2019-04-24T11:01:18Z")

</div>

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

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

[https://developer.cybozu.io/hc/ja/community/posts/115000371146](https://community.cybozu.dev/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);

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1804](https://avatars.discourse-cdn.com/v4/letter/l/ecd19e/32.png) [@Legacy\_Account1804](https://community.cybozu.dev/u/Legacy_Account1804)\
**Post date:** [2019 年 4 月 25 日午前 5:03 UTC](https://community.cybozu.dev/t/topic/3963/2 "2019-04-25T05:03:49Z")

</div>

そもそもなんですが、「提案日」フィールドに値をセットするのは編集画面で、「活動日」か「営業状況」が変更されたタイミングではないでしょうか？  
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;

});
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account951](https://avatars.discourse-cdn.com/v4/letter/l/7ea924/32.png) [@Legacy\_Account951](https://community.cybozu.dev/u/Legacy_Account951)\
**Post date:** [2019 年 4 月 25 日午前 5:19 UTC](https://community.cybozu.dev/t/topic/3963/3 "2019-04-25T05:19:09Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1804](https://avatars.discourse-cdn.com/v4/letter/l/ecd19e/32.png) [@Legacy\_Account1804](https://community.cybozu.dev/u/Legacy_Account1804)\
**Post date:** [2019 年 4 月 25 日午前 5:48 UTC](https://community.cybozu.dev/t/topic/3963/4 "2019-04-25T05:48:15Z")

</div>

[レコード編集画面の保存実行前イベント](https://community.cybozu.dev/hc/ja/articles/202166270#step2)&nbsp;がありますので、こちらを使用します。

以下のコードだとサブテーブルを上から探して一番最後に見つかった「提案」の行の活動日を登録するので、  
もし「提案」の行が複数存在して特定の行を指定したいのであれば、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;

});
})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account951](https://avatars.discourse-cdn.com/v4/letter/l/7ea924/32.png) [@Legacy\_Account951](https://community.cybozu.dev/u/Legacy_Account951)\
**Post date:** [2019 年 4 月 25 日午前 6:25 UTC](https://community.cybozu.dev/t/topic/3963/5 "2019-04-25T06:25:43Z")

</div>

FMさん

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