関連レコードの件数を取得するワザ

目次

はじめに

指定した条件に当てはまるレコードを表示する「 関連レコード一覧 (External link) 」ですが、関連するレコードの数を取得できません。

そこで今回は、アプリ同士の連携で、関連レコードとして紐づけられているレコードの数を表示させるための Tips を紹介します。

利用イメージ

たとえば、顧客リストアプリの関連レコード一覧に、顧客名で紐付けた案件情報アプリのレコードを表示しているとします。
この記事で紹介するカスタマイズを適用すると、顧客リストアプリレコードから関連する案件の数を把握できます。

あるいは、レンタル品目一覧アプリとレンタル申請アプリを紐づけている際にはレンタル品目一覧アプリを確認することで、利用回数の多い備品を確認することなどが可能になります。

毎回、関連するアプリに移動し絞り込みやグラフの確認などをすることなく関連レコードを設置したアプリからレコード数が確認できるようになる Tips です。

アプリの準備

まず、 アプリストア (External link) にある 営業支援パック (External link) を追加します。
今回の Tips では、営業支援パック内の顧客管理(A アプリ)と案件管理(B アプリ)を使用します。

顧客管理(Aアプリ)

顧客管理(A アプリ)の、次のフィールドを使用します。

フィールドタイプ フィールド名 フィールドコード 備考
文字列(1行) 顧客名 顧客名 関連レコードに表示するレコードの絞り込み用
関連レコード一覧 案件一覧 案件一覧 件数対象の関連レコード一覧

また、関連レコードの件数を表示するための、スペースフィールドを追加します。

フィールドタイプ フィールド名 フィールドコード 備考
スペース 設定なし num 関連レコードの件数を表示するためのスペース

ついでに、スペースフィールドの近くにラベルを設置し、何を示している値なのかわかりやすくしておきましょう。

この場合のラベル名は関連案件数としています。

案件管理(Bアプリ)

案件管理(B アプリ)の、次のフィールドを使用します。

フィールドタイプ フィールド名 フィールドコード 備考
ルックアップ 顧客名 顧客名 関連レコードに表示するレコードの絞り込み用

サンプルコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 * value of RelatedRecords program
 * Copyright (c) 2016 Cybozu
 *
 * Licensed under the MIT License
*/
(() => {
  'use strict';

  // 関連レコードの絞り込みに利用するフィールドコード
  const FIELDNAME_A = '顧客名'; // Aアプリ
  const FIELDNAME_B = '顧客名'; // Bアプリ

  kintone.events.on('app.record.detail.show', async (event) => {
    // kintone-rest-api-client を使う準備
    const client = new KintoneRestAPIClient();

    // 関連レコードの「表示するレコードの条件」に合わせてクエリを作成
    const clientName = event.record[FIELDNAME_A].value;
    const query = `${FIELDNAME_B}="${clientName}"`;
    const appId = kintone.app.getRelatedRecordsTargetAppId('案件一覧');

    // 関連レコードを取得
    const records = await client.record.getAllRecords({app: appId, condition: query});

    // スペースフィールドにBアプリのレコード数を反映
    const num = records.length;
    const divTotalAmount = document.createElement('div');
    divTotalAmount.style.fontWeight = 'bold';
    divTotalAmount.style.textAlign = 'center';
    divTotalAmount.style.fontSize = 12;
    divTotalAmount.textContent = num;
    kintone.app.record.getSpaceElement('num').appendChild(divTotalAmount);
    return event;
  });
})();

ソースコードの説明

kintone-rest-api-client は、kintone REST API を JavaScript で扱う際に必要な処理をまとめたライブラリです。
getAllRecords メソッドで全レコードを一括取得できます。
このサンプルでは、関連レコードで紐づけている B アプリのレコードを全件取得しています。

詳しくは下記ページを参照ください。

上記 kintone.api() で取得したオブジェクトの数をスペースフィールドに反映させます。

スペースフィールドの利用については、kintone API 解説シリーズ レコード詳細にもボタンを設置しよう kintone.app.record.getSpaceElement について詳しく解説しています。

今回は「num」という要素 ID で設置したスペースフィールドに値を反映させますので、関連レコードの項目を条件付きで集計と同じように関連レコードに合致するレコードの数を、フィールドの近くに設置しました。

レコードの関連フィールド一覧では一目でわからなかった、顧客に関連のある案件数が「関連案件数」に表示されます。

関連レコードのフィールド設定で「さらに絞り込む条件」を設定できます。

「さらに絞り込む条件」を設定した場合には、サンプルコードのレコードを取得するクエリにも同様の条件を追加してください。

デモ環境

デモ環境で実際に動作を確認できます。
https://dev-demo.cybozu.com/k/285/ (External link)

ログイン情報は cybozu developer network デモ環境 で確認してください。

おわりに

アプリ同士の連携を図る関連レコード一覧は標準機能で利用できるため kintone を活用するには欠かせない機能となっています。

さらに、今回の Tips で紹介したカスタマイズを加えることでより便利になると思いますので、お使いの kintone アプリ用にアレンジを加えてチーム内での情報活用にお役立てください。

information

この Tips は、2022 年 11 月版 kintone で動作を確認しています。