cybozu developer network

カテゴリー内の他の記事

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

はじめに

指定した条件にあてはまるレコードをフォームに表示する「関連レコード一覧」ですが
関連するレコードの数を取得することができません。

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

利用イメージ

例えば、顧客リストアプリと案件情報アプリで
顧客名で紐づけた関連レコードを利用している場合に
顧客リストアプリ内で関連した案件の数を把握したい場合に利用できます。

 

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

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

アプリの準備

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

顧客管理(Aアプリ)

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

フィールドタイプ フィールド名 フィールドコード 備考
文字列(1行) 顧客名 顧客名

関連レコードに表示するレコードの絞り込み用

関連レコード一覧

案件一覧

案件一覧

件数対象の関連レコード一覧


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

フィールドタイプ フィールド名 フィールドコード 備考

スペース

設定なし

num

 関連レコードの件数を表示するためのスペース

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

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

案件管理(Bアプリ)

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

フィールドタイプ フィールド名 フィールドコード 備考
ルックアップ

顧客名

顧客名

関連レコードに表示するレコードの絞り込み用

サンプルコード

ソースコードの説明

kintone-rest-api-clientで関連レコードで関連付けられたレコードを取得する

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

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

関連レコード数の値をスペースフィールドに反映

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

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

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

2023-05-02_13h47_42.png
※上記サンプルの場合は一度に表示する最大レコード数を5件に設定していますが
実際の案件情報アプリでの関連レコードは全部で6件登録されていることがわかりました。

関連レコードの絞り込み条件を増やした場合

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

この設定を行った場合は、サンプルコード上で件数カウントをするためのクエリにも条件を追加してください。

デモ環境

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

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

おわりに

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

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

このTipsは、2022年11月版で確認したものになります。

 

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
Nagata

上記サンプルを試してみたところ、関連案件数ではなく、Bアプリの全レコード件数が表示されてしまいました。

どのような要因が考えられますでしょうか?ご教示いただけますと幸いです。

Avatar
cybozu Development team

長田 英里 様

返答が遅くなり申し訳ございません。

サンプルコードでは、ご指摘の通り関連案件数ではなく全レコード件数を取得するものになっていました。
大変失礼いたしました。

サンプルコードと記事の内容を修正しました。
デモ環境もご用意しましたのでご活用ください。

Avatar
Nagata

お忙しいところ、ご対応くださりありがとうございます!

是非試してみたいと思います。

取り急ぎお礼まで。

Avatar
たけまつ

担当者様

 

下記のようなエラーが表示されたのですが原因がわかりますでしょうか。

Avatar
cybozu Development team

たけまつ 様

お世話になっております。cybozu developer network 運営事務局でございます。

こちらのコメント欄は記事内容のフィードバック目的となっており、
直接的に記事と関連がない、または技術的なご質問はcybozu developer コミュニティをご活用ください。
有志により回答が得られる場所となります。

よろしくお願い致します。

Avatar
Okabe

こちらのサンプルをスペースフィールドではなく文字列フィールドへ件数を反映させるにはどのようにしたら宜しいでしょうか。

ご教示頂けると幸いです。

Avatar
cybozu Development team

Okabe 様

お世話になっております。cybozu developer network 運営事務局でございます。

サンプルコードの39-44行目でスペースフィールドに表示する要素を作成し、
スペースフィールドの要素に追加するという処理をしているので、この部分の書き換えが必要となります。

また、この記事のサンプルコードで使用しているイベント(app.record.detail.show)では、
eventオブジェクトの書き換え(文字列フィールドへ件数を反映させること)が出来ないため、
レコード追加画面の保存実行前イベント(app.record.create.submit)などの他のイベントで書き換える必要があります。

お手数ですが、質問が記事のシナリオと異なる場合、コミュニティをご活用ください。
https://developer.cybozu.io/hc/ja/community/topics

よろしくお願い申し上げます。

Avatar
Okabe

運営事務局様

ご回答いただきありがとうございます。

こちらのイベントでは無理なのですね、頂いた参考も含め勉強いたします。

ありがとうございます。

Avatar
cybozu Development team

山本理一様

 

お世話になっております。cybozu developer network 運営事務局でございます。

こちらのコメント欄は記事内容のフィードバック目的となっており、
直接的に記事と関連がない、または技術的なご質問はcybozu developer コミュニティをご活用ください。
有志により回答が得られる場所となります。

よろしくお願い致します。

Avatar
Cora

”さらに絞り込み条件”に下記のように指定日付を設定したいですが、
件数カウントをするためのクエリをサンプルコードのどこに追加すればいいでしょうか?

ご教示いただけますと幸いです。

Avatar
cybozu Development team

Cora 様

お世話になっております。cybozu developer network 運営でございます。

こちらのコメント欄は記事内容のフィードバック目的となっているため、
記事から派生した技術的なご質問はcybozu developer コミュニティをご活用ください。

よろしくお願い致します。

Avatar
上村 祐介

cybozu Development team

お世話になっております。

関連レコードについての質問です。

案件管理に活動管理レコードは参照出来ています。

日報アプリにも、当日の活動管理レコードを表示したいと思っています。

案件管理に表示されている設定と同様にしておりますが、なぜか反映しません。

こちらの設定方法をご教示頂けますでしょうか?

案件管理レコード(紐づけよう)と顧客管理レコード(紐づけ用)は設定しております。

 

Avatar
cybozu Development team

上村 祐介 様

お世話になっております。cybozu developer network 運営でございます。

恐れ入りますが、こちらのコメント欄は記事内容のフィードバック目的となっているため、
記事から派生した技術的なご質問などはcybozu developer コミュニティをご活用ください。

よろしくお願い致します。

Avatar
Koji Miya

こちら紐づく顧客数が上限値は500か100という前提で間違いないですか?

Avatar
cybozu Development team

Koji Miya様

お世話になっております。cybozu developer network 運営でございます。

ご質問ありがとうございます。

この記事では、「ソースコードの説明」に記載している通り、素のREST APIにリクエストを行っているのではなく、公式ライブラリのkintone-rest-api-clientを使ってリクエストを行っています。そのため、上限値を気にせずに実行できます。

kintone-rest-api-clientについて詳しくは、下記ページを参照ください。

よろしくお願いいたします。

Avatar
KY

こんにちは。

スペースフィールドの箇所の「フィールドコード」は「要素ID」のことでしょうか?

Avatar
cybozu Development team
KY 様
お世話になっております。cybozu developer network 事務局です。

ご認識の通りで問題ございません。
こちらでは、関連レコード数の値を、スペースフィールドに反映させるためのキーを設定しています。
また、実際に試してみたけど動かない、ということがありましたら cybozu developer コミュニティをご活用ください。
よろしくお願いいたします。
cybozu Development teamにより編集されました
サインインしてコメントを残してください。