hamux1192
@hamux1192

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

一覧画面でボタンを配置→サブテーブル追加

解決したいこと

配送依頼アプリの一覧画面の取得用ボタン押下で
他アプリ(受注アプリ)のサブテーブルのデータを取得して既存レコードのサブテーブルに追加したいです。
削除ボタンの処理内で集配コースマスタアプリのデータから新規作成したレコードの集配コースと受注アプリの集配コースが一致したサブテーブルデータを配送依頼アプリに追加するという処理を実現させたいです。

既存レコードのサブテーブルには一行もない状態です。

リクエストエラーも出ていないのですがテーブルにデータが追加されないです。

コード

(function () {
  "use strict";
  kintone.events.on("app.record.index.show", function (event) {
    if (document.getElementById("my_index_button_01") !== null) {
      return;
    }
    //レコード一覧画面に削除ボタンを設置
    var myIndexButton = document.createElement("button");
    myIndexButton.id = "my_index_button_01";
    myIndexButton.innerText = "配送情報削除";

    if (document.getElementById("my_index_button_02") !== null) {
      return;
    }
    //レコード一覧画面に取得ボタンを設置
    var myIndexButton2 = document.createElement("button");
    myIndexButton2.id = "my_index_button_02";
    myIndexButton2.innerText = "配送情報取得";

    // 配送依頼削除ボタンクリック時の処理
    myIndexButton.addEventListener("click", async (event) => {
      alert("配送情報を削除します。");

      //1.getAllRecordsをつかって対象のものを全件取得
      const client = new KintoneRestAPIClient();
      const appId = kintone.app.getId();
      const res = await client.record.getAllRecords({ app: appId });

      //2.1で取得したレコードからレコード番号だけとりだし配列化する
      const targetRecords = res.map((r) => {
        //idだけ抽出(mapは、ある配列から新しい配列を作る機能)
        return {
          id: r.$id.value,
        };
      });

      //3.deleteAllRecordsを使って(2で抽出したIDをパラメータに渡し)、全件削除
      const res_dell = await client.record.deleteAllRecords({
        app: appId,
        records: targetRecords,
      });

      //4.集配コースマスタからレコードを取得
      const otherAppId = 38;
      const otherAppRes = await client.record.getAllRecords({
        app: otherAppId,
      });

      console.log(otherAppRes);

      //5.4で取得したレコードを基に新しいレコードを作成
      const newRecords = otherAppRes.map((record) => {
        const 集配コースFieldValue = record.集配コース名.value;
        return {
          // 転記先のフィールド:他アプリから取得したフィールド
          集配コース: { value: 集配コースFieldValue },
        };
      });

      //6. addRecordsを使って新しいレコードを追加
      const addRecordsRes = await client.record.addRecords({
        app: appId,
        records: newRecords,
      });

      //ページをリロード
      location.reload();
      alert("配送データを削除しました。");
    });

    // 配送依頼削除ボタンクリック時の処理
    myIndexButton2.addEventListener("click", async (event) => {
      alert("配送情報を取得します。");

      //配送依頼アプリのレコード情報取得
      const appId = kintone.app.getId(); //現在のアプリ(配送依頼)のID

      const client = new KintoneRestAPIClient();
      const 配送依頼アプリres = await client.record.getAllRecords({
        app: appId,
      });

      //納品完了日が空のレコードかつ納品予定日が今日のレコードのみ受注管理アプリから取得
      const targetAppId = 53;
      const dateFieldCode = "納品完了日";
      const date2FieldCode = "納品予定日";
      const formattedToday = new Date().toISOString();
      const query = `${dateFieldCode} = "" and ${date2FieldCode} = "${formattedToday}"`;
      const 受注アプリres = await client.record.getRecords({
        app: targetAppId,
        query: query,
      });
      console.log(受注アプリres);

      // フィールドコードの定義
      const 配送コースフィールドコード = "集配コース"; // 配送コースのフィールドコードに置き換えてください
      const 受注アプリサブテーブルフィールドコード = "テーブル"; // 受注アプリのサブテーブルフィールドコードに置き換えてください
      const 配送依頼アプリサブテーブルフィールドコード = "配送情報"; // 配送依頼アプリのサブテーブルフィールドコードに置き換えてください

      // ステップ1: 配送コースに基づいてレコードをマッチングし、複数のマッチングレコードの処理
      配送依頼アプリres.forEach(async (配送依頼レコード) => {
        const 配送コース = 配送依頼レコード[配送コースフィールドコード].value;
        console.log(配送コース);
        // マッチングする受注アプリのレコードをすべて見つける
        const マッチング受注レコード群 = 受注アプリres.records.filter(
          (受注レコード) =>
            受注レコード[配送コースフィールドコード].value === 配送コース
        );

        console.log(マッチング受注レコード群);

        // 複数のマッチングレコードのサブテーブルデータを集約
        const 転記データ = [];
        マッチング受注レコード群.forEach((マッチング受注レコード) => {
          const サブテーブルデータ = マッチング受注レコード[
            受注アプリサブテーブルフィールドコード
          ].value.map((サブテーブルレコード) => {
            return {
              value: {
                // 受注アプリのサブテーブルから配送依頼アプリのサブテーブルへのフィールドマッピング
                物品名: サブテーブルレコード.value["物品コード"].value,
                物品コード: サブテーブルレコード.value["物品名"].value,
                // ... 必要に応じて他のフィールドも追加
              },
            };
          });
          転記データ.push(...サブテーブルデータ); // 配列に追加
        });

        console.log(転記データ);
        console.log(配送依頼レコード["$id"].value);

        // ステップ2: 配送依頼アプリのサブテーブルにデータを追加
        if (転記データ.length > 0) {
          const addtable = await client.record.updateRecord({
            app: appId,
            id: 配送依頼レコード["$id"].value,
            record: {
              [配送依頼アプリサブテーブルフィールドコード]: 転記データ,
            },
          });
        }
        console.log(addtable);
      });
      alert("配送情報を取得しました。");
    });

    kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
    kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton2);
  });
})();
0

2Answer

// ステップ2: 配送依頼アプリのサブテーブルにデータを追加
if (転記データ.length > 0) {
const addtable = await client.record.updateRecord({
app: appId,
id: 配送依頼レコード[“$id”].value,
record: {
[配送依頼アプリサブテーブルフィールドコード]: {
type: “SUBTABLE”,
value: 転記データ,
},
},
});
}

上記のように修正すると思うように動作しました。

0Like

Comments

  1. @hamux1192

    Questioner

    下記に全体のコードをメモします

(function () {
"use strict";
kintone.events.on("app.record.index.show", function (event) {
if (document.getElementById("my_index_button_01") !== null) {
return;
}
//レコード一覧画面に削除ボタンを設置
var myIndexButton = document.createElement("button");
myIndexButton.id = "my_index_button_01";
myIndexButton.innerText = "配送情報削除";

if (document.getElementById("my_index_button_02") !== null) {
  return;
}
//レコード一覧画面に取得ボタンを設置
var myIndexButton2 = document.createElement("button");
myIndexButton2.id = "my_index_button_02";
myIndexButton2.innerText = "配送情報取得";

// 配送依頼削除ボタンクリック時の処理
myIndexButton.addEventListener("click", async (event) => {
  alert("配送情報を削除します。");

  //1.getAllRecordsをつかって対象のものを全件取得
  const client = new KintoneRestAPIClient();
  const appId = kintone.app.getId();
  const res = await client.record.getAllRecords({ app: appId });

  //2.1で取得したレコードからレコード番号だけとりだし配列化する
  const targetRecords = res.map((r) => {
    //idだけ抽出(mapは、ある配列から新しい配列を作る機能)
    return {
      id: r.$id.value,
    };
  });

  //3.deleteAllRecordsを使って(2で抽出したIDをパラメータに渡し)、全件削除
  const res_dell = await client.record.deleteAllRecords({
    app: appId,
    records: targetRecords,
  });

  //4.集配コースマスタからレコードを取得
  const otherAppId = 38;
  const otherAppRes = await client.record.getAllRecords({
    app: otherAppId,
  });

  console.log(otherAppRes);

  //5.4で取得したレコードを基に新しいレコードを作成
  const newRecords = otherAppRes.map((record) => {
    const 集配コースFieldValue = record.集配コース名.value;
    return {
      // 転記先のフィールド:他アプリから取得したフィールド
      集配コース: { value: 集配コースFieldValue },
    };
  });

  //6. addRecordsを使って新しいレコードを追加
  const addRecordsRes = await client.record.addRecords({
    app: appId,
    records: newRecords,
  });

  //ページをリロード
  location.reload();
  alert("配送データを削除しました。");
});

// 配送依頼削除ボタンクリック時の処理
myIndexButton2.addEventListener("click", async (event) => {
  alert("配送情報を取得します。");

  //配送依頼アプリのレコード情報取得
  const appId = kintone.app.getId(); //現在のアプリ(配送依頼)のID

  const client = new KintoneRestAPIClient();
  const 配送依頼アプリres = await client.record.getAllRecords({
    app: appId,
  });

  //納品完了日が空のレコードかつ納品予定日が今日のレコードのみ受注管理アプリから取得
  const targetAppId = 53;
  const dateFieldCode = "納品完了日";
  const date2FieldCode = "納品予定日";
  const formattedToday = new Date().toISOString();
  const query = `${dateFieldCode} = "" and ${date2FieldCode} = "${formattedToday}"`;
  const 受注アプリres = await client.record.getRecords({
    app: targetAppId,
    query: query,
  });
  console.log(受注アプリres);

  // フィールドコードの定義
  const 配送コースフィールドコード = "集配コース"; // 配送コースのフィールドコードに置き換えてください
  const 受注アプリサブテーブルフィールドコード = "テーブル"; // 受注アプリのサブテーブルフィールドコードに置き換えてください
  const 配送依頼アプリサブテーブルフィールドコード = "配送情報"; // 配送依頼アプリのサブテーブルフィールドコードに置き換えてください

  // ステップ1: 配送コースに基づいてレコードをマッチングし、複数のマッチングレコードの処理
  配送依頼アプリres.forEach(async (配送依頼レコード) => {
    const 配送コース = 配送依頼レコード[配送コースフィールドコード].value;
    console.log(配送コース);
    // マッチングする受注アプリのレコードをすべて見つける
    const マッチング受注レコード群 = 受注アプリres.records.filter(
      (受注レコード) =>
        受注レコード[配送コースフィールドコード].value === 配送コース
    );

    console.log(マッチング受注レコード群);

    // 複数のマッチングレコードのサブテーブルデータを集約
    const 転記データ = [];
    マッチング受注レコード群.forEach((マッチング受注レコード) => {
      const サブテーブルデータ = マッチング受注レコード[
        受注アプリサブテーブルフィールドコード
      ].value.map((サブテーブルレコード) => {
        return {
          value: {
            // 受注アプリのサブテーブルから配送依頼アプリのサブテーブルへのフィールドマッピング
            物品名: サブテーブルレコード.value["物品名"].value,
            物品コード: サブテーブルレコード.value["物品コード"].value,
            // ... 必要に応じて他のフィールドも追加
          },
        };
      });
      転記データ.push(...サブテーブルデータ); // 配列に追加
    });

    console.log(転記データ);
    console.log(配送依頼レコード["$id"].value);

    // ステップ2: 配送依頼アプリのサブテーブルにデータを追加
    if (転記データ.length > 0) {
      const addtable = await client.record.updateRecord({
        app: appId,
        id: 配送依頼レコード["$id"].value,
        record: {
          [配送依頼アプリサブテーブルフィールドコード]: {
            type: "SUBTABLE",
            value: 転記データ,
          },
        },
      });
    }
  });
  alert("配送情報を取得しました。");
});

kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton2);

});
})();

0Like

Your answer might help someone💌