kintoneで2つのテーブルを合体させる方法


今回は2つのテーブルを合体させる方法です。

テーブル1、2に値を入力すると、テーブル3にまとめられます。

アプリの準備

フィールド種類 フィールドコード 備考
テーブル テーブル1
テーブル テーブル2
テーブル テーブル3
文字列(1行) 名前1 テーブル1用
数値 年齢1 テーブル1用
文字列(1行) 名前2 テーブル2用
数値 年齢2 テーブル2用
文字列(1行) 名前3 テーブル3用
数値 年齢3 テーブル3用

JavaScript

レコード追加&編集画面の値変更時のイベントで動かします。
このコード内ではやっていませんが、テーブル3を編集不可にしておくと良いかもしれません。

kintone.events.on(
  [
    "app.record.create.change.名前1",
    "app.record.create.change.名前2",
    "app.record.create.change.年齢1",
    "app.record.create.change.年齢2",
    "app.record.create.change.テーブル1",
    "app.record.create.change.テーブル2",
    // 編集のときも同様にフィールド指定してね。
  ],
  (event) => {
    // テーブル3 消しとく
    event.record.テーブル3.value = [];

    // テーブル3の行になるもの
    const tb3Rows = [];

    // テーブル1 の行を tb3Rowsに追加する
    event.record.テーブル1.value.forEach((element) => {
      if (
        element.id ||
        element.value.名前1.value ||
        element.value.年齢1.value
      ) {
        const r = {
          id: element.id,
          value: { 名前3: element.value.名前1, 年齢3: element.value.年齢1 },
        };
        tb3Rows.push(r);
      }
    });

    // テーブル2 の行を tb3Rowsに追加する
    event.record.テーブル2.value.forEach((element) => {
      if (
        element.id ||
        element.value.名前2.value ||
        element.value.年齢2.value
      ) {
        const r = {
          id: element.id,
          value: { 名前3: element.value.名前2, 年齢3: element.value.年齢2 },
        };
        tb3Rows.push(r);
      }
    });

    // tb3Rowsをテーブル3の行にする
    event.record.テーブル3.value = tb3Rows;

    return event;
  }
);