スポンサーリンク

【Kintone】関連レコード一覧内の金額や数値を集計してフィールドに登録するJavascript

関連レコードに合計を表示したい

Kintone(キントーン)で請求書や勤怠管理などで、明細を関連レコード一覧で表示するアプリを作成したのですが、金額や時間の合計を登録できたらな~と検索してみたら方法がありましたのでメモ。アプリにJavascriptを登録したら正常に動きました。

関連レコード一覧を表示するアプリに「数値」パーツで作った「合計」というフィールドに、レコード保存時に計算された値が表示され、保存できました。しかし、最初のレコード保存では表示されず、2回目の保存のタイミングで表示されるので、改善の余地ありです。

ソース1

AAA1、AAA2、BBB、CCC、DDDをそれぞれアプリで使用している項目のフィールドコードに置換て使用します。フィールドコードは英数に限らず日本語でも大丈夫です。

(function() {
  kintone.events.on(['app.record.edit.show','app.record.create.change.AAA2'], function(event) {
    const appId = kintone.app.getRelatedRecordsTargetAppId("BBB");
    const query = 'AAA1="' + event.record['AAA2'].value + '"'; 
    const body = {
      'app' : appId,
      'query' : query
    };
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
      var sum = 0;
      resp.records.forEach((record)=>{
        sum += record['CCC'].value ? parseInt(record['CCC'].value) : 0;
      });
       event.record['DDD'].value = sum;
       kintone.app.record.set(event);
    });

    return event;
  });  
  
})();

設定するフィールドコードの説明

例えば、リレーションの関係が請求書アプリと請求書明細アプリだったとしたら、以下のようになります。

AAA1
「関連レコード一覧」の設定で「表示するレコードの条件」に設定している主キーとなるフィールドコード(関連レコード一覧を呼び出すアプリ側のフィールドコード)。
(例)請求書アプリ側の請求書ID(レコードID)
AAA2
「関連レコード一覧」の設定で「表示するレコードの条件」に設定している外部キーとなるフィールドコード(関連レコード一覧に呼び出されるアプリ側のフィールドコード)。
(例)請求書明細アプリ側の請求書ID
BBB
「関連レコード一覧」パーツに設定したフィールドコード(関連レコード一覧を呼び出すアプリ側のフィールドコード)。

(例)請求書アプリ側の明細を表示する「関連レコード一覧」パーツのフィールドコード

CCC
関連レコード一覧に呼び出されるアプリ側にある集計対象のフィールドコード。

(例)請求書明細アプリ側の「金額」フィールド

DDD
集計結果を表示したいパーツのフィールドコード(関連レコード一覧を呼び出すアプリ側のフィールドコード)。

(例)請求書アプリ側の「合計」フィールドコード

ソース2

以下のソースでも動作しました。こちらの方がわかりやすいかもしれません。

(() => {
    'use strict';
  
    const events = [
      'app.record.detail.show',
      'app.record.edit.show'
    ];
    kintone.events.on(events, (event) => {
      const clientRecordId = event.recordId;
      const relatedAppId = kintone.app.getRelatedRecordsTargetAppId('請求明細一覧');
      const query = '請求書ID="' + event.record['請求書ID'].value + '"';
      // const query = `"${clientRecordId}"=請求書ID`; //レコードIDを使用する場合
      const outputFields = ['金額'];
      const appUrl = kintone.api.url('/k/v1/records');
  
      const params = {
        'app': relatedAppId,
        'query': query,
        'fields': outputFields
      };
    
      kintone.api(appUrl, 'GET', params, (resp) => {
        let amount = 0;
        for (let i = 0; i < resp.records.length; i++) {
          //amount += parseFloat(resp.records[i].金額.value);
          amount += parseFloat(resp.records[i].金額.value) ? parseFloat(resp.records[i].金額.value) : 0;
        }

        event.record['合計'].value = amount;
        kintone.app.record.set(event);
        return event;
      });
    });
  })();

参考サイト

関連レコードの項目を条件付きで集計
関連レコードの項目を条件付きで集計するカスタマイズを紹介します。
関連レコード一覧の数字を計算させる方法~ JavaScriptカスタマイズ~ | 船井総研 kintone導入・運用コンサルティング
kintoneの代表的な機能の一つに”関連レコード一覧”があります。 この機能を活用することで簡単に複数のアプ
kintoneのカスタマイズ。関連レコードのデータを集計・計算する。 | 株式会社ゴートップ
株式会社ゴートップは、一世紀超にわたり印刷技術をベースに、宣伝・販売活動を支える各種イベント・空間デザインのための「企画・開発・制作」から「販売促進システム・データベース構築」などビジネスサポートに至るまでトータルにプロデュース致します。
タイトルとURLをコピーしました