一覧画面にボタンを配置>>別アプリから取得したサブテーブル情報を転記

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

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

リクエストエラーも出ていないのですがテーブルにデータが追加されないです。
⇒出ていましたが見落としていました


(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);
  });
})();



実際どこの工程までは正しく動いてますか?console.logのresponse内容は意図したものはでてる状況ですかね。
そのうえで気になるのは物品名に物品コード入って、物品コードに・・・と入力値が逆転して記述している部分です。

].value.map((サブテーブルレコード) => {
            return {
              value: {
                // 受注アプリのサブテーブルから配送依頼アプリのサブテーブルへのフィールドマッピング
                物品名: サブテーブルレコード.value["物品コード"].value,
                物品コード: サブテーブルレコード.value["物品名"].value,
                // ... 必要に応じて他のフィールドも追加
              },

逆にすれば、不正なJSON文字列というエラーが、発生しました


お手数ですがよろしくおねがいします

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

上記のように修正すると思うように動作しました。
こちらについては自己解決できましたが、まだ追加するフィールドがあるので次また自己解決できそうになければ質問させていただくかもしれないので
その際はお願いします(-“”-)

「いいね!」 1

(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);
  });
})();

上記、全体のコードです。

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