サブテーブル内にあるフィールドの値を、サブテーブル外の文字列フィールドへコピーしたい

お世話になります。Java Script初心者です。

1 . サブテーブル(classTable)の、全ての行の生徒名(student_name)の値をサブテーブルの外にある文字列フィールド(all_student_name)へ保存時にコピーされるようにしたいと考えておりいます

2. さらにコピーをする際に、重複している生徒名は除外されるようにしたいと考えております

  1. を実装するために、下記のコードを書いたのですが、テーブルの一番下の生徒名だけがコピーされている状態でうまくできません。

ご教授いただけますと幸いです。よろしくお願いいたします。

※( )内がそのフィールドのフィールドコードになります

  kintone.events.on(
    [“app.record.create.submit”, “app.record.edit.submit”],
    function (event) {
      const record = event.record;
      const table = record.classTable.value;

      for (let i = 0; i < table.length; i++) {
        record.all_student_name.value = table[i].value.student_name.value;
      }

      return event;
    }
  );

Akio様

このような感じでしょうかね

kintone.events.on(["app.record.create.submit", "app.record.edit.submit"],
              function (event) {
                      const record = event.record;
                      const table = record.classTable.value;
                        // 名前だけの配列生成
                      let list = table.map(row => { return row.value.student_name.value ? row.value.student_name.value : "" })
                      // 重複削除フィルター
                      list = list.filter((x, i, self) => { return self.indexOf(x) === i }
                      );
                      // 配列をコンマ区切りで結合してall_student_nameへ
                      record.all_student_name.value = list.join(",")
                      return event;
              }
      );

思った通りに動きました!とても助かります、ありがとうございます。

重ね重ねですみませんが、同じテーブル内のステータス(status)が"受講中"の生徒のみの名前をコピーする場合も可能でしょうか?

 

私の方でトライした方法としましては、

別で、「生徒名コピー」(student_name_copy)というフィールド作って、ステータスが受講中じゃない生徒は、空欄にするようにして、「生徒名コピー」フィールドの値を対象に、先ほどご教授いただいたコードを試したのですが、空欄の生徒名が#N/A!になってしまいます…。

よろしくお願いいたします。

良かったです!

名前だけの配列に作る時に受講中かどうか条件に入れるのはいかがでしょうかね。mapで処理してることとしてテーブルで言うと1行ずつ読んでいってるような処理なので、1行ごとに配列に入れていくものを精査していく感じですね。

生徒が空白(undefined)でない、かつステータスが受講中であれば配列に入れていく形で。

let list = table.map(row => {return row.value.student_name.value && row.value.status.value === "受講中" ? row.value.student_name.value : ""})

 

こちらも問題なく作動しました!色々とご親切にありがとうございましたm(_ _)m

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。