船井デジタル道場
関連レコード一覧の件数を自動カウントする方法~ JavaScriptカスタマイズ~
INDEX
kintoneの代表的な機能の一つに”関連レコード一覧”があります。
この機能を活用することで簡単に複数のアプリを紐づけることができるため、情報の一元管理がしやすくなっているのではないでしょうか。
しかし、その”関連レコード一覧”にも課題があります。
それは関連レコードの件数をカウントできないという課題です。
例えば、”関連レコード一覧”を使用することで、顧客管理アプリの1レコードにどの案件管理アプリの案件(レコード)が紐づいているかを確認することはできますが、その数を顧客管理アプリ内のフォームに入れ込むことはできず、顧客管理アプリ内で案件数を元に計算したい場合不具合が生じます。
そこで、レコードを編集画面を開いたときに自動で関連レコード一覧の数をカウントするJSを作成しました!
こちらをご活用いただくことで、わざわざ関連レコード一覧の数を手動でカウントすることなくフィールド内に自動計算することができます。
“とりあえずご自身の環境に実装したい!”という方は手順①~手順②を、JavaScriptのコード理解までされたい方はその後のコード解説までお読みください。
手順①:JavaScriptを使用するためのツールインストール
まず、kintoneでJavaScriptによるカスタマイズを行うにあたり、コードを簡単に編集できるツールをアプリにインストールする必要があります。
下記にて詳しく説明しておりますのでご参照ください。
手順②:サンプルコードのカスタマイズ
プラグインのインストールができたら、JSEdit for kintoneプラグインの設定画面を開き、新規作成を行い、下記のコードを貼り付けて保存しましょう。
//AAAにはカウントしたい関連レコードのフィールドコードを設定
//BBBには関連レコードの条件を設定。なおBBB1には関連レコードに対応しているアプリのフィールドコードを、BBB2には関連レコードを設置しているアプリのフィールドコードを設定してください
//CCCには関連レコードの件数を表示させたいフィールドコードを設定してください
(function() {
'use strict';
const events = [
'app.record.edit.show',
'app.record.create.show',
];
kintone.events.on(events, function(event) {
const appId = kintone.app.getRelatedRecordsTargetAppId('AAA');
const query = 'BBB1="' + event.record['BBB2'].value + '"';
const paramGET = {
'app' : appId,
'query' : query,
'totalCount' : true
};
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGET, (resp)=> {
event.record['CCC'].value = resp.totalCount;
kintone.app.record.set(event);
});
return event;
});
})();
その後、以下を設定してください。
- 12行目(AAA):関連レコード一覧のフィールドコードを設定
- 13行目(BBB1):表示させたいアプリ(関連レコード一覧で引っ張ってきているアプリ)側の一致条件として設定しているフィールドコードを設定
- 13行目(BBB2):関連レコード一覧を設置しているアプリ側のフィールドコードを設定しているフィールドコードを設定
- 20行目(CCC):関連レコード一覧のレコード件数を表示させたいフィールドコードを設定
参考例)顧客番号で条件一致させている関連レコード一覧上で表示している「売上」を、「売上合計」という数値フィールドに入れたい場合
(function() {
kintone.events.on('app.record.create.change.顧客番号', function(event) {
const appId = kintone.app.getRelatedRecordsTargetAppId("関連レコード一覧");
const query = 'レコード番号="' + event.record['顧客番号'].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['売上'].value ? parseInt(record['売上'].value) : 0;
});
event.record['売上合計'].value = sum;
kintone.app.record.set(event);
});
return event;
});
})();
JavaScript解説
今回のコードで重要な以下2点について解説をしていきます。
- 関連レコード一覧の件数をカウントする条件設定
- 関連レコード一覧に紐づいている件数を取得する方法
関連レコード一覧の件数をカウントする条件設定
const query = 'BBB1="' + event.record['BBB2'].value + '"';
サンプルコードのこの部分では”表示させたいアプリ(関連レコード一覧で引っ張ってきているアプリ)内で検索するレコードの条件(query)”を指定しています。
例えば、BBB1・BBB2それぞれを”顧客名”とした場合、顧客名が一致しているレコードだけを検索することができるようになります。
それ以外にも以下のようにあらゆる条件を設定することができます。
//顧客名が船井総研のレコードだけを検索
const query = '顧客名="船井総研"';
//進捗(ドロップダウン)が検討中・完了のレコードだけを検索
const query = '進捗 in ("検討中","完了")';
//レコード作成日時が先週のレコードだけを検索
const query = '作成日時 = LAST_WEEK()';
//売上が100万以上かつ200万以下のレコードだけを検索
const query = '売上 >= 1000000 and 売上 <= 2000000';
その他にも細かな条件を設定できます。詳しくは以下リンクの”「query」パラメータで利用可能な演算子と関数”を参照くださいませ。
レコードの取得(GET)-cybozu developer network
関連レコード一覧に紐づいている件数を取得する方法
では次に、上記条件を元に件数取得を行っているJavaScriptの部分を説明します。
const paramGET = {
'app' : appId,
'query' : query,
'totalCount' : true
};
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGET, (resp)=>
この部分では、上記のレコード検索条件(query)を元にREST APIを活用することで該当のアプリの情報を取得しています。
REST APIとはコンピューターに自動でヒトが行っているような操作を行わさせるもので、今回のレコード取得(GET)だけでなく、レコード作成(POST)・レコード更新(PUT)・コメント投稿(POST)など様々なことを自動実行できるようになります。
kintoneではこのREST APIの仕様書を複数公開しており、この機能を活用することでkintoneの活用の幅を大いに広げることが可能になります。
REST API一覧-cybozu developer network
まとめ
今回ご紹介したREST APIはkintoneが多くの会社様に活用される大きな理由の一つです。
これらを活用することでkintoneを自社にとってより最適なものに変えていくことができ、さらなる業務効率化を図ることができます。
しかし、このREST APIは少し高度なプログラミングの知識が必要になるため中々取っ付きにくいのも事実です。
そのため、本サイトではこのREST APIをプログラミングの経験がない方にも簡単に扱えるように説明・カスタマイズした記事をこれからも掲載していきます。現在使用している、アプリをどんどん便利にしていきたい方は是非ともご覧くださいませ!
ファストシステムユーザの皆様へ
ファストシステムユーザーの皆様は、チャットにて関連レコード一覧の件数を自動カウントするjsが欲しい。とお問い合わせください!お送りいたします。
ダウンロード後、上記手順に沿ってご自身のkintone環境にJavaScriptをアップロードいただき、各フィールドコードを変更していただくと、上記機能をご利用いただくことができます。
kintone環境へのJavaScriptアップロード方法は以下もご参考くださいませ。