複数の関連レコード一覧をスペースフィールドに集計

何を実現したいのかを書きましょう

アプリの中に
関連レコードが3つあり
①「関連作業一覧」という関連レコード一覧フィールドの「作業原価」の集計値を’totalZentaiAmount’というスペースフィールドに表示
②「関連材料費」という関連レコード一覧フィールドの「材料費合計」の集計値を’totalZairyoAmount’というスペースフィールドに表示
③「関連外注費」という関連レコード一覧フィールドの「外注費」の集計値を’totalGaityuAmount’というスペースフィールドに表示
というようにしたい
カスタマイズビューで amCharts 5 を使って日本地図を表示してみよう! – cybozu developer network (zendesk.com)
ここに記載のコードを参考にして作成してみました

発生した問題やエラーメッセージを具体的に書きましょう

①と②を表示させるコードではうまく表示できるのですが、①と②と③を表示させるコードではうまく表示されないで困っています

実行したコードをコピー&ペーストしましょう

①と②を表示させるコード

(() => {
  'use strict';

  const events = [
      'app.record.detail.show',
      'app.record.edit.show'
  ];

  kintone.events.on(events, (event) => {
      const clientRecordId = event.record['CTRLNO_製造原価'].value;
      const zairyoAppId = kintone.app.getRelatedRecordsTargetAppId('関連材料費');
      const sagyouAppId = kintone.app.getRelatedRecordsTargetAppId('関連作業一覧');
      const appUrl = kintone.api.url('/k/v1/records');

      const fieldMapping = {
          '関連材料費': 'totalZairyoAmount',
          '関連作業一覧': 'totalZentaiAmount'
      };

      const promises = [];

      for (const appName in fieldMapping) {
          const query = `CTRLNO="${clientRecordId}"`;
          const outputField = (appName === '関連作業一覧') ? '作業原価' : '材料費合計';

          const params = {
              'app': (appName === '関連材料費') ? zairyoAppId : sagyouAppId,
              'query': query,
              'fields': [outputField]
          };

          const elementId = fieldMapping[appName];

          const promise = new Promise((resolve) => {
              kintone.api(appUrl, 'GET', params, (resp) => {
                  let amount = 0;
                  if (resp.records && resp.records.length > 0) {
                      for (let i = 0; i < resp.records.length; i++) {
                          const fieldValue = resp.records[i][outputField].value;
                          amount += (fieldValue !== null && fieldValue !== undefined) ? parseFloat(fieldValue) : 0;
                      }
                  }

                  const divTotalAmount = document.createElement('div');
                  const formattedAmount = `¥${amount.toFixed(0).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,')}-`;
                  divTotalAmount.style.fontWeight = 'bold';
                  divTotalAmount.style.textAlign = 'left';
                  divTotalAmount.style.verticalAlign = 'middle';
                  divTotalAmount.style.fontSize = 12;
                  divTotalAmount.innerHTML = formattedAmount;
                  kintone.app.record.getSpaceElement(elementId).appendChild(divTotalAmount);

                  resolve();
              });
          });

          promises.push(promise);
      }

      Promise.all(promises);

      return event;
  });
})();

①と②と③を表示させるコード

(() => {
  'use strict';

  const events = [
      'app.record.detail.show',
      'app.record.edit.show'
  ];

  kintone.events.on(events, (event) => {
      const clientRecordId = event.record['CTRLNO_製造原価'].value;
      const zairyoAppId = kintone.app.getRelatedRecordsTargetAppId('関連材料費');
      const sagyouAppId = kintone.app.getRelatedRecordsTargetAppId('関連作業一覧');
      const gaityuAppId = kintone.app.getRelatedRecordsTargetAppId('関連外注費'); // 追加
      const appUrl = kintone.api.url('/k/v1/records');

      const fieldMapping = {
          '関連材料費': 'totalZairyoAmount',
          '関連作業一覧': 'totalZentaiAmount',
          '関連外注費': 'totalGaityuAmount' // 追加
      };

      const promises = [];

      for (const appName in fieldMapping) {
          const query = `CTRLNO="${clientRecordId}"`;
          const outputField = (appName === '関連作業一覧') ? '作業原価' : (appName === '関連外注費') ? '外注費' : '材料費合計'; // 追加

          const params = {
              'app': (appName === '関連材料費') ? zairyoAppId : (appName === '関連外注費') ? gaityuAppId : sagyouAppId, // 追加
              'query': query,
              'fields': [outputField]
          };

          const elementId = fieldMapping[appName];

          const promise = new Promise((resolve) => {
              kintone.api(appUrl, 'GET', params, (resp) => {
                  let amount = 0;
                  if (resp.records && resp.records.length > 0) {
                      for (let i = 0; i < resp.records.length; i++) {
                          const fieldValue = resp.records[i][outputField].value;
                          amount += (fieldValue !== null && fieldValue !== undefined) ? parseFloat(fieldValue) : 0;
                      }
                  }

                  const divTotalAmount = document.createElement('div');
                  const formattedAmount = `¥${amount.toFixed(0).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,')}-`;
                  divTotalAmount.style.fontWeight = 'bold';
                  divTotalAmount.style.textAlign = 'left';
                  divTotalAmount.style.verticalAlign = 'middle';
                  divTotalAmount.style.fontSize = 12;
                  divTotalAmount.innerHTML = formattedAmount;
                  kintone.app.record.getSpaceElement(elementId).appendChild(divTotalAmount);

                  resolve();
              });
          });

          promises.push(promise);
      }

      Promise.all(promises);

      return event;
  });
})();

どなたか詳しい方アドバイスいただきたいと思います

1 Like

こんにちは

上記について、エラーが発生して表示されない状態なのか、
エラーは発生していないが表示されない状態なのかなど、
もう少し詳細に現状を記載することで、有識者からの回答が
得られやすくなりますよー
(エラーが発生している場合は、エラーが発生している処理やエラー内容など)

ざっくりとした質問だと、動作検証など行ってこんな状態であっているかなど、
認識合わせから始めないといけないので、あまり回答が付きにくいかと思います。

以下のページにデバッグ方法が詳細に案内されているので、
一旦デバッグを行ってみてもらえればと思います。

1 Like

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