一覧画面での項目追加について

一覧画面で、データを加工して項目(列)を新規追加したいです。

①別アプリから取得した「【決裁時】見込+見積合計」の値を、

②「着工週」の値により決められた割合で割り、

③「0ヵ月目」「1か月目」「2ヵ月目」「3か月目」「4か月目」に追加します。

ここまでは下記コードにてできております。

(function () {

  "use strict";

  const events1 = ['app.record.index.show'];

  const events2 = ['app.record.create.show',

    'app.record.edit.show'];

  kintone.events.on(events1, function (event) {

    const records = event.records;

    for (var i = 0; i < records.length; i++) {

      const week = records[i]['着工週']['value'];   //着工週

      const money = records[i]['承認時見込金額計']['value'];

      let recordId = records[i]['レコード番号']['value'];

      var params = null;

      //着工週に値が入っているか確認

      if (week === undefined || money === undefined) {

      } else if (week === "1週") {

        console.log('1週');

        params = {

          'app': kintone.app.getId(),

          'id': recordId,

          'record': {

            '1か月目': {

              'value': money * 0.15

            },

            '2か月目': {

              'value': money * 0.45

            },

            '3か月目': {

              'value': money * 0.35

            },

            '4か月目': {

              'value': money * 0.05

            },

          }

        }

      } else if (week === "2週") {

        console.log('2週');

        params = {

          'app': kintone.app.getId(),

          'id': recordId,

          'record': {

            '1か月目': {

              'value': money * 0.1

            },

            '2か月目': {

              'value': money * 0.4

            },

            '3か月目': {

              'value': money * 0.35

            },

            '4か月目': {

              'value': money * 0.15

            },

          }

        }

      } else if (week === "3週") {

        console.log('3週');

        params = {

          'app': kintone.app.getId(),

          'id': recordId,

          'record': {

            '1か月目': {

              'value': money * 0.07

            },

            '2か月目': {

              'value': money * 0.4

            },

            '3か月目': {

              'value': money * 0.3

            },

            '4か月目': {

              'value': money * 0.23

            },

          }

        }

      } else if (week === "4週") {

        console.log('4週');

        params = {

          'app': kintone.app.getId(),

          'id': recordId,

          'record': {

            '0か月目': {

              'value': money * 0.05

            },

            '1か月目': {

              'value': money * 0.3

            },

            '2か月目': {

              'value': money * 0.35

            },

            '3か月目': {

              'value': money * 0.3

            },

          }

        }

      }

      console.log(params);

if (params != null)

{

    kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', params, function (resp) {

      if (window.name !== 'null') { //リロード判定

        // location.reload();

        window.name = 'null';

      } else {

        window.name = '';

      }

      return event;

    }, function (resp) {

      // エラーの場合はメッセージを表示する

      let errmsg = 'レコード更新時にエラーが発生しました。';

      // レスポンスにエラーメッセージが含まれる場合はメッセージを表示する

      if (resp.message !== undefined) {

        errmsg += resp.message;

      }

      alert(errmsg);

    })

  }

    }

    ret///urn event;

  })

})();

ここから、

④「着工日」を元に支払日を追加したいです。

例:「着工日」が1/10の場合、「0ヵ月目」の値が「1/20」、「1が月目」の値が「2/20」、「3か月目」の値が「3/20」、「4か月目」の値が「4/20」と表示されていくイメージ

※Excelであらわすとこんなイメージです。なお、「0ヵ月目」~「4か月目」の項目は一覧にて表示しなくてもかまいません

 

このように、自動で「支払日」項目を追加していくことは可能でしょうか?

また、どのように作成すればよいか、コードをご指導いただけると幸いです。

やりたいことは、

・図のようなデータがほしいのでしょうか?

支払日ごとにピボットテーブルのように並べたい?

・それとも、着工日からNヶ月目の計算方法がわからないということなのでしょうか?

着工日が1/30だったら0ヶ月目の支払いはどうするのでしょうか?

貼り付けたコードの最後の方

 ret///urn event;

になっていました。

haradaさん

 

コメントありがとうございます。

やりたいことは、

1)図のようなデータを作成したい、支払日ごとにピポットテーブルのように並べたい

一覧画面で、支払日ごとに列が追加されていくイメージで考えたい

です。一覧画面での項目自動追加が可能かどうか、ならびにそのやり方(ロジックの組み立て方)が全くわからず、ご指導いただきたいです。

 

2)着工日が1/30の場合、0ヵ月目は2/20になります。20日以降が次月20日の支払が「0ヵ月目」と換算されるイメージです。

3)ご指摘ありがとうございます。修正いたします。

1-a)

一つの手段として、

kintoneアプリのデータの持ち方を回数ごとで1レコードに分けます。

のようにしてからクロス集計をします。

で表示して、Excel出力機能を使う方法も考えられます。この時点で一覧画面ではないですがスペースに貼り付けるなどすればよいかもしれません。

1-b)

JavaScript上でピボットテーブルが使えるモジュールをカスタマイズでいれるか

1-c)

kintone用のプラグインか

krewSheetが提供する2つのモード | Excel感覚で操作できるグレープシティのkintoneプラグイン「krew」
https://krew.grapecity.com/lp/krewsheet-twomodes.htm#xross-mode

harada様

ご回答ありがとうございます。レコードを分けるという発想はなかったので、新しい発想をいただけて幸いです。

決済時金額をもとにレコードを分ける場合ですが、

1)レコードを分けるソースは、(レコードを新規追加するソース)はどのように調べればよろしいでしょうか?自分で調べてみたのですが、上手くヒットするものを見つけられなかったため、ご指導いただけますと幸いです。

1-b)

JavaScript上でピボットテーブルが使えるモジュールをカスタマイズでいれるか

こちらは存在しているのでしょうか?

3)ロジックは、

①決済時金額をもとに0ヵ月目~4か月目の金額を計算する(元々書いているソース)

②ループ開始

新規レコード追加(本レコード含む4つ)

支払日計算(19日以前は同月20日支払、20日以降は次月20日支払)*4、支払日項目(新規作成項目)に追加

①で計算した金額を支払金額項目(新規作成項目)に追加

子番号(新規作成項目)を追加

ループ終了

③データが存在する場合表示イベント実行(元々書いてあるソース)

という内容だと考えましたが、考慮は足りているでしょうか?

別アプリに案件ごとの全体の額を保存しておいて、そこから分割してレコードを保存するなどが考えられます?(質問の意味を取り違えていたら教えてください。)

または、エクセルで分割しておいてCSV形式などでインポートしてしまう手もあります。ピボットテーブルもエクセルやGoogleスプレッドシートで対応できそうです。

1-b)多分検索するといくつか出てくると思います。ただ、今回のケースに当てはまるかどうかは質問者側で試してみてください。ピポットテーブルにする前のデータと持ち方や表示の仕方、ライセンスなど様々あると思います。

3)仕様をどのようにするかわからない部分もあり、コードにされて実験してみるのがよいと思います。

間違ったものを作りたくないという気持ちはわかります。

harada 様

質問の仕方があいまいで申し訳ございません。

1)説明を省いておりましたが、「決済時金額」は別アプリ①で保存された全体の額となります。保存時に、新規レコードまたは同一レコードがある場合修正される仕様にしております。

質問としては、その別アプリから取り込んだ「決済時金額」をもとに0ヵ月目~4か月目の金額を計算し、「支払日」毎に分割したレコードを追加するイベントを実行したいのですが、kintoneでどのように新規レコードを追加するのか方法が分からないため、方法を(ソースを)教えていただきたいです。

Excelやスプレッドシートを使用したインポートの件ですが、アプリの利用者の想定では実現が難しく(Excelやスプレッドシートを使える方がほぼいない状態です)、今回は見送りたいと考えております。

    1. ありがとうございます。色々と調べて試してみます。コードが書けたら、エラーが出ていてもいなくてもこちらのコメントに貼り付けるので、もしよろしければアドバイスをいただきたいです。

別アプリ上のカスタマイズでデータの登録を実行します。

kintone REST API リクエスト – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/202166310

レコードの登録(POST) – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/202166160

修正がある場合は、すでに同じ案件IDの登録データがあるか確認(データ取得)して更新することになります。直接、手でレコードを直してもよいです。

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