はじめに
こんにちは。サイボウズの楊です。
今回は「関連レコードもCSV出力したい!」というニーズにお応えしたいと思います。
kintoneアプリには、他アプリのレコードを参照できる「関連レコード一覧」機能があります。
ひとつのフィールドをキーとして、関連するレコードを現在のレコード詳細画面に表示できます。
しかし、この場合、関連レコードのデータは表示されているだけで、閲覧しているレコード自体がデータとして保持しているわけではありません。
また、kintoneにはレコードをCSV形式でダウンロードする機能があります。
CSVで書き出す場合、関連レコードは対象のレコード自体にデータとして存在しないため、通常は関連レコードをCSVに出力できません。
今回は、関連レコードを含めてCSVを出力するTipsを紹介します。
デモ環境
デモ環境で実際に動作を確認できます。
ログイン情報は cybozu developer networkデモ環境 で確認してください。
完成イメージ
完成したアプリには、以下のようにCSVファイル出力ボタンが表示されます。
ダウンロードしたCSVファイルのイメージは以下のとおりです。
アプリの準備
今回使用するのはアプリストアにある「案件管理」と「顧客リスト」アプリを応用したものです。
のちほど「顧客リスト」アプリの関連レコードのフィールド設定で「案件管理」アプリが必要となりますので、先に「案件管理」のアプリの追加をしてください。
案件管理アプリ
フィールドコードが異なると、正常に動作しないため注意して変更しましょう。
案件管理アプリのフィールドの設定は以下のとおりです。
なお、記載していないフィールドはデフォルトのままです。
| フィールドタイプ | フィールド名 | フィールドコード |
|---|---|---|
| 文字列(1行) | 会社名 | company |
| ドロップダウン | 製品名 | product |
| 計算 | 小計 | subtotal |
顧客リストアプリ
顧客リストアプリに「関連レコード」フィールドを追加します。
関連レコード一覧の設定の詳細は以下のとおりです。
フィールドコードが異なると、正常に動作しないため注意して変更しましょう。
顧客リストアプリのフィールドの設定は以下のとおりです。
なお、記載していないフィールドはデフォルトのままです。
| フィールドタイプ | フィールド名 | フィールドコード |
|---|---|---|
| 文字列(1行) | 会社名 | company |
| 文字列(1行) | 部署名 | division |
| 文字列(1行) | 担当者名 | assignee |
| 文字列(1行) | TEL | TEL |
| 文字列(1行) | メールアドレス | |
| 関連レコード一覧 | 関連レコード一覧 | reference |
サンプルコード
サンプルコードはJavaScriptファイルとして保存し、顧客リストアプリへ適用してください。
適用方法は次のヘルプページを参考にしてください。
JavaScriptファイルやCSSファイルを適用する
|
|
コードの説明
今回はレコードの詳細情報を取得し、CSVファイルを手動で作成して、そのCSVファイルの中にデータを格納しています。
それでは簡単に説明します。
レコード情報と要素の取得
kintone.app.getRelatedRecordsTargetAppId('フィールドコード')で関連レコードのアプリIDを取得します。
関連レコード一覧の参照先のアプリIDを取得する
|
|
そして、kintone.app.getHeaderMenuSpaceElement()でボタン作成のためにレコード一覧のメニューの右側の要素を取得します。
レコード一覧のメニューの右側の要素を取得する
|
|
customerRecordsは、顧客管理アプリを一覧表示したときのevent.recordsです。
indexでひとつずつレコードを取り出し、各変数の中にフィールドの値を格納します。
|
|
queryでは、検索条件でキーとなる会社名を変数に格納します。
複数のレコードを取得する
|
|
ボタンの生成と処理
document.getElementById('btn-export-csv')をif文の条件とすることで、ボタンがない場合のみボタン要素を生成し、増殖バグを防ぎます。
増殖バグを防ぐ処理については、
レコード一覧画面にボタンを配置してみよう
を参照してください。
|
|
以下でボタンを押した際に処理を行います。
|
|
CSVファイルの作成
CSVファイルの各項目名(ヘッダー)は手動で作成する必要があります。
CSVはカンマ区切りなので、join(',')で配列の要素を結合した文字列を生成します。
|
|
関連レコードはkintone.apiで取得します。
kintone.apiは非同期実行なので、顧客ごとの関連レコードを取得するためfetchRelatedRecordsを再帰的に呼び出します。
取得した関連レコードの内容をCSVの各行に追加します。
|
|
現在の日付をファイル名に
Dateオブジェクトで現在の日時を取得します。
|
|
getMonth()は0から始まる月を取得するため、注意して+1します。
|
|
月や日付の桁数が一桁場合、前に0を足して二桁にします。
|
|
最後にYYYY + MM + DD + hh + mmの形式で返します。
|
|
データのダウンロードについては、JavaScriptカスタマイズでCSVファイルを生成する一般的な方法を参照してください。
最後に
いかがでしたでしょうか。
これで関連レコードもCSV出力できるようになりました。
また上記のテクニックを活用することで関連レコードに限らず、自由に他アプリからのデータをCSV出力できます。
ぜひお試しください。
このTipsは、2025年8月版kintoneで動作を確認しています。
