はじめに
関連レコード一覧フィールドは関連性が1:Nの場合は標準機能で設定できますが、テーブルの内容を条件とするような、関連性がN:Nの場合は標準機能で設定できません。
こちらの
cybozu developer communityでの回答
のように詳細データ設定用のアプリを別途作成して、標準機能で対応する方法もあります。
しかし今回は、JavaScript APIを利用して関連レコード一覧のテーブルを作成・表示するカスタマイズ方法を説明したいと思います。
デモ環境
デモ環境で実際に動作を確認できます。
https://dev-demo.cybozu.com/k/295/
ログイン情報は cybozu developer networkデモ環境 で確認してください。
kintoneアプリの作成
サンプルのアプリとして、学習塾クラスの管理アプリを作成します。
生徒管理アプリとクラス管理アプリを作成して、生徒管理アプリから複数のクラスをルックアップ選択し、クラス管理アプリでは、そのクラスに登録した生徒を一覧表示するように設定します。
1人の生徒が複数のクラスを選択でき、ひとつのクラスには複数の生徒が登録されるので、N:Nの関連性となります。
クラス管理アプリの作成
次の画像とテーブルを参考にクラス管理アプリを作成します。
| フィールドの種類 | フィールド名 | フィールドコード | 備考 |
|---|---|---|---|
| レコード番号 | クラス番号 | class_no | |
| 文字列(1行) | クラスコード | class_code | |
| 文字列(1行) | クラス名 | class_name | |
| スペース | student_list | テーブル表示スペース |
生徒管理アプリの作成
次の画像とテーブルを参考に生徒管理アプリを作成します。
| フィールドの種類 | フィールド名 | フィールドコード | 備考 |
|---|---|---|---|
| レコード番号 | 生徒番号 | student_no | |
| 文字列(1行) | 生徒コード | student_code | |
| 文字列(1行) | 氏名 | student_name | |
| ルックアップ | クラスコード | class_code | テーブル |
| 文字列(1行) | クラス名 | class_name | テーブル |
サンプルコード
作成した「クラス管理アプリ」に次のソースコードを参考にしたJavaScriptファイルを作成し、適用します。
テーブルのHTMLのクラス名は、kintoneのスタイルに調和するよう、
51-modern-default
を参考にしています。
こちらの
GitHub上のスタイルシート
をダウンロードし、アプリに反映してください。
|
|
解説
生徒の情報を表示するテーブルを生成しています。
|
|
|
|
|
|
レコード詳細表示およびレコード編集イベントで、生徒一覧テーブル生成処理を実行します。
|
|
REST APIを使って、生徒管理アプリからクラス登録した生徒の情報を取得しています。
なお、queryのパラメーターには、クラスコードが一致するレコードのみを取得するように指定します。
取得するフィールドは、「レコード番号」、「生徒コード」、「生徒氏名」となります。
|
|
なお、クロスサイトスクリプティングの対策として、特殊文字をエスケープ処理しています。
動作確認
生徒管理アプリ、クラス管理アプリそれぞれにいくつかデータを入力します。
生徒管理アプリから、いくつかクラスをルックアップで登録し、「クラスアプリ管理」上に生徒一覧のテーブルが表示されていることを確認します。
まとめ
詳細データ設定用のアプリを別途作成することにより、標準機能で対応も可能です。
しかし、JavaScript APIでカスタマイズすれば、わざわざ詳細データ設定用のアプリを作成しなくて済みます。
コード自体も意外とシンプルですので、ぜひ試してみてください。
このTipsは、2025年6月版kintoneで動作を確認しています。
