kintoneのカスタマイズ。関連レコードのデータを集計・計算する。
kintoneアプリの関連レコード内のデータを集計する。
今回は関連レコード内のデータを集計してみます。
関連レコード内のデータは自動計算では使用できないため、何気に需要があるのではないでしょうか。
それでは行ってみましょう。
アプリの準備。
今回は取引を登録するアプリがあり、その取引に必要な原材料のようなものを関連レコードで引っ張ってくる、という状況を考えてみます。
なのでアプリは2つ。
いうなれば、取引アプリと原材料アプリです。必要に応じ適宜読み替えて考えていただければと思います。
取引アプリは以下のようなものになります。
原材料アプリは以下のようになります。関連するキーは取引No.で、取引アプリのレコード番号になります。
関連レコードを集計するためのカスタマイズ。
取引アプリのレコード番号と紐づく原材料のデータが関連レコードとして表示されます。
この金額を集計してみます。
関連レコードの下あたりに集計した金額を表示するためのスペースフィールドと、その内容を示すラベルを貼り付けます。
スペースフィールドの要素IDは「spTotal」としました。
関連レコードで引っ張ってきたデータは、javascriptでは扱えないようです。
そのため関連レコードで設定した条件で、原材料アプリから再度レコードを取得する必要があります。そのため、kintone APIを使用します。
var query = '取引No=' + kintone.app.record.getId();
var params = {
'app': 2804,
'query': query
};
まずはレコード取得の条件を設定します。
「app」が検索対象のアプリで、アプリのURLの数字の部分になります。
「query」では検索条件を指定します。今回はレコード番号になります。kintone.app.record.getId()で今開いているレコードのレコード番号を取得します。
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params, function(resp) {
var total = 0;
for (var i = 0; i < resp.records.length; i++) {
total += parseFloat(resp.records[i].金額.value);
}
kintone.app.record.getSpaceElement('spTotal').innerHTML= total;
return event;
});
取得したレコードをfor文で集計します。
resp.records.lengthが取得したレコード数となりますので、その回数集計を繰り返します。
最後に集計した金額をspTotalのinnerHTMLに表示します。
スペースフィールドに合計金額を表示。
無事用意したスペースフィールドに合計が表示されました。
実は今回のコードには落とし穴があり、kintone APIの仕様で原材料アプリを検索する際、100件のレコードまでしか対象になりません。
原材料アプリの関連レコード数が増えてくるとうまくいかなくなってくると思います。
この解決方法は次回以降で解説しますのでお楽しみに。
ゴートップではkintoneを活用した業務の効率化のご相談を承っております。
現在の業務に課題を抱えている方は是非ゴートップにお問い合わせください。
詳しくは当社kintoneソリューションサービスのページをご覧ください。
さまざまな方や企業の多様なニーズにお応えする「エスコートン」サービスの提供を開始しました。
お悩みに合わせた3つのサービスメニューをご用意しました。