[サブテーブル] 行追加時に前行の値を次行へ挿入

「開始時間」「終了時間」「内容」+

「開始時間」「終了時間」「内容」+

上記のようなサブテーブルセットしており、行追加時に、前行の終了時間を次行の開始時間へセットしたいと思い下記参考に試してみましたが、うまく動作しません。ご教授お願い致します。 https://developer.cybozu.io/hc/ja/community/posts/900001407166-%E3%82%B5%E3%83%96%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E8%A1%8C%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E5%80%A4%E3%82%92%E5%BC%95%E3%81%8D%E7%B6%99%E3%81%8E%E3%81%9F%E3%81%84

gsc-hnd-dad さん

こんにちは。ひよこです。

書かれたコードを貼り付けていただくことは可能ですか?
コードを見てみないと、打ち間違えなのか、指定する値の形式が違うのか、などの問題特定がしづらいからです。

(function() {
“use strict”;
kintone.events.on([“app.record.create.change.Table”,“app.record.edit.change.Table”], function(event) {
var record = event.record;
var Table = event.record.Table.value;

for (var n = 0; n < Table.length-1; n++) {
if (Table[n].value[‘終了時間’].value !== “”) {
Table[n+1].value[‘開始時間’].value = Table[n].value[‘終了時間’].value;
}
}
return event;
});
})();

としましたが、動作しない状態となります。

gsc-hnd-dad さん

コードありがとうございます。
コード自体は動くように見えます。

ブラウザの開発者コンソールをみたときに、なにかエラーメッセージは表示されていますか?
開発者コンソールの開き方は https://developer.cybozu.io/hc/ja/articles/360038920252 を参考にしてみてください。

あと、よくあるミスとしてはフィールドコードが間違っていることがあります。
以下についても確認してもらえないでしょうか。

  • 「テーブル」のフィールドコードが、「Table」になっているか
    最近作ったアプリの場合、初期値のフィールドコードは「テーブル」になっているはず
  • 「開始時間」のフィールドコードが、「開始時間」になっているか
  • 「終了時間」のフィールドコードが、「終了時間」になっているか

テーブルのフィールドコードは[table]となっており、その他[開始時間]、[終了時間]も問題ありません。

ちなみに、自身のjs知識もまだまだ乏しく、コードの中に"table"が多く混在しておりよく理解出来ていないのですが、
上記コードの中で、テーブルのフィールドコードを指定する箇所はどこですかね。

gsc-hnd-dad さん

細かいようですが、Tは大文字ですか?
フィールドコードは、大文字小文字も区別するので、ここも重要です。

 

> ちなみに、自身のjs知識もまだまだ乏しく、コードの中に"table"が多く混在しておりよく理解出来ていないのですが、
> 上記コードの中で、テーブルのフィールドコードを指定する箇所はどこですかね。

このコードの場合、2つあります。

kintone.events.on(["app.record.create.change.Table","app.record.edit.change.Table"], function(event) {
// ここにイベント発火時に行いたい処理
});

ここでは、レコード追加画面またはレコード編集画面のフィールド値変更時イベントを利用しています。
参考:レコード追加画面のフィールド値変更時イベント

フィールドの値変更時イベントを利用する場合、なんのフィールドが変更されたときか?を、そのフィールドコードで指定します。
このコードの場合、テーブルの行追加または削除ボタンが押された時に処理を実行したいので、テーブルのフィールドコードを指定します。
具体的には、app.record.create.change. Table  の Table の部分が、フィールドコードにあたります。

参考:第1回 kintone JavaScript APIのイジりかた の「kintoneのイベント処理に触れてみる」

 

var Table = event.record.Table.value;

イベントが発火すると(つまり、テーブルの行追加または削除ボタンを押したとき)、event.record には、画面上に表示されているレコードの中身が入ってきます。

上記のコードでは、画面上に表示されているレコードの中身のうち、テーブルフィールドの情報を変数に代入しています。
「テーブルフィールドの情報を取り出す」ためには、テーブルのフィールドコードを指定します。
具体的には、 event.record. Table.value の Table の部分が、フィールドコードにあたります。

参考:第4回 レコードの値を利用してみよう(詳細画面編)

 

なお、ややこしいんですが、
以下のコードにおける Table は、[var Table = event.record.Table.value;」で代入した変数名(太字の部分)なので、フィールドコードとは別物です。

for (var n = 0; n < Table.length-1; n++) {
if (Table[n].value['終了時間'].value !== "") {
Table[n+1].value['開始時間'].value = Table[n].value['終了時間'].value;
}
}

なので、こんな感じにすることもできます(変数名を tbl にしてみた)

var tbl = event.record.Table.value;
for (var n = 0; n < tbl.length-1; n++) {
if (tbl[n].value['終了時間'].value !== "") {
tbl[n+1].value['開始時間'].value = tbl[n].value['終了時間'].value;
}
}

丁寧かつわかりやすい解説と合わせて回答ありがとうございます。大変助かります。
これを元にまた勉強させていただきます。