船井デジタル道場
関連レコード一覧の数字を計算させる方法~ JavaScriptカスタマイズ~
INDEX
kintoneの代表的な機能の一つに”関連レコード一覧”があります。
この機能を活用することで簡単に複数のアプリを紐づけることができるため、情報の一元管理がしやすくなっているのではないでしょうか。
しかし、”関連レコード一覧”は表示しかできません。そのため、
- ”関連レコード一覧”で表示されている値の合計値を数値フィールド入れたい
- ”関連レコード一覧”で表示されている値を一覧画面で見れるようにしたい
などは標準機能で実装することはできません。
そこで、自動で”関連レコード一覧”の値を集計し、数値フィールドに入れ込むJavaScriptを作成いたしました。
こちらをご活用いただくことで、関連レコード一覧上の数値を活用して計算をすることができ、またそれを一覧画面に表示させることができます。
“とりあえずご自身の環境に実装したい!”という方は手順①~手順②を、JavaScriptのコード理解までされたい方はその後のコード解説までお読みください。
手順①:JavaScriptを使用するためのツールインストール
次に、kintoneでJavaScriptによるカスタマイズを行うにあたり、コードを簡単に編集できるツールをアプリにインストールする必要があります。
下記にて詳しく説明しておりますのでご参照ください。
手順②:サンプルコードのカスタマイズ
プラグインのインストールができたら、JSEdit for kintoneプラグインの設定画面を開き、新規作成を行い、下記のコードを貼り付けて保存しましょう。
//AAAには関連レコードの条件を設定。なお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;
});
})();
その後、以下を設定してください。
- 7行目・9行目(AAA2):表示させたいアプリ(関連レコード一覧で引っ張ってきているアプリ)側の一致条件として設定しているフィールドコードを設定
- 8行目(BBB):関連レコード一覧のフィールドコードを設定
- 9行目(AAA1):関連レコード一覧を設置しているアプリ側の一致条件として設定しているフィールドコードを設定
- 17行目(CCC):表示させたいアプリ(関連レコード一覧で引っ張ってきているアプリ)側の計算したいフォームのフィールドコードを設定
- 19行目(DDD):関連レコード一覧を設置しているアプリ側の計算結果を表示させたいフォームのフィールドコードを設定
JavaScript解説
今回のコードで重要な以下2点について解説をしていきます。
- 関連レコード一覧の集計を行う条件設定
- 関連レコード一覧に紐づいているデータ集計&集計する方法
関連レコード一覧の集計を行う条件設定
const query = 'AAA1="' + event.record['AAA2'].value + '"';
サンプルコードのこの部分では”表示させたいアプリ(関連レコード一覧で引っ張ってきているアプリ)内で検索するレコードの条件(query)”を指定しています。
例えば、AAA1・AAA2それぞれを”顧客名”とした場合、顧客名が一致しているレコードだけを検索することができるようになります。
それ以外にも以下のようにあらゆる条件を設定することができます。
//顧客名が船井総研のレコードだけを検索
const query = '顧客名="船井総研"';
//進捗(ドロップダウン)が検討中・完了のレコードだけを検索
const query = '進捗 in ("検討中","完了")';
//レコード作成日時が先週のレコードだけを検索
const query = '作成日時 = LAST_WEEK()';
//売上が100万以上かつ200万以下のレコードだけを検索
const query = '売上 >= 1000000 and 売上 <= 2000000';
その他にも細かな条件を設定できます。詳しくは以下リンクの”「query」パラメータで利用可能な演算子と関数”を参照くださいませ。
レコードの取得(GET)-cybozu developer network
関連レコード一覧に紐づいているデータ取得&集計する方法
では次に、上記条件を元にデータ取得・計算を行っているJavaScriptの部分を説明します。
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);
});
この部分では、上記のレコード検索条件(query)を元にREST APIを活用することで該当のアプリの情報を取得しています。詳細は以下を参照ください。
REST API一覧-cybozu developer network
その後、取得した全レコードのデータをrespという引数に入れ、“forEach”というJavaScriptで使用できる機能を使用することでデータを一つずつ取り出し計算を行っています。
resp.records.forEach((record)=>{
sum += record['CCC'].value ? parseInt(record['CCC'].value) : 0;
});
“forEach”での計算終了後の値を関連レコード一覧を設置しているアプリ側の計算結果を表示させたいフォームに入れ込むことで、関連レコード一覧の値集計を実現しています。
kintone.app.record.set(event);
まとめ
前回に引き続きご紹介したREST APIはkintoneが多くの会社様に活用される大きな理由の一つです。
今回のJavaScriptを活用していただくことで、アプリ間のデータ連携がスムーズにできるようになります。そして、主要な数値データを一つのアプリに集計することでより自由度をもってデータ分析ができるようになります。
リアルタイム経営・データドリブン経営を実現するためにも是非ともご活用くださいませ。
なお、”関連レコード一覧”の件数を数値フィールドに入れたい方はぜひ以下も参照ください。
ファストシステムユーザの皆様へ
ファストシステムユーザーの皆様は、この関連レコード一覧自動集計JavaScriptをこちらよりダウンロードいただけます。
※研究会データベースにログインできるアカウントが必要になります。
ダウンロード後、上記手順に沿ってご自身のkintone環境にJavaScriptをアップロードいただき、各フィールドコードを変更していただくと、上記機能をご利用いただくことができます。
kintone環境へのJavaScriptアップロード方法は以下もご参考くださいませ。