一覧画面で表示された特定の列の特定の値の数を合計して一覧画面に表示する事は可能でしょうか?
また、その合計値を別アプリで利用する事は可能でしょうか?
(例)
顧客名フィールドにはA、B、Cのいずれかの値のみ入力されます。
顧客名フィールドを含む一覧画面を作成し、顧客名フィールドの値がAのもの、BのものCのものがそれぞれいくつあるか、一覧画面に表示する、といったイメージです。
わかりずらいかもしれませんが、ご回答お待ちしております。
よろしくお願い致します。
田中様
cstapの落合です。
一覧画面で表示された特定の列の特定の値の数を合計して一覧画面に表示する事は可能でしょうか?
可能です。
また、その合計値を別アプリで利用する事は可能でしょうか?
可能です。
サンプルとしてはこんな感じです。
顧客名フィールドは、文字列(1行)ではなくラジオボタンなどでも構わないです。
/**
* 別アプリ
* 顧客名フィールド
* フィールド名:顧客名
* フィールドタイプ:文字列(1行)
* フィールドコード:customerName
*
* @author Yuichi Ochiai <ochiai@cstap.com>
*/
(function() {
"use strict";
// 別アプリのアプリID
var appId = 452;
// 計算を行ったかどうか
var isCalculated = false;
// レコード一覧画面
kintone.events.on('app.record.index.show', function(event) {
// 既にボタンがある場合はスルー
if (isCalculated) {
return event;
}
var manager = new KintoneRecordManager;
manager.appId = appId;
manager.getRecords(function(records) {
var result = {
"A": 0,
"B": 0,
"C": 0,
};
var recordNum = records.length;
for (var i = 0, l = recordNum; i < l; i++) {
var record = records[i];
var customerName = record.customerName.value;
if (["A", "B", "C"].indexOf(customerName) >= 0) {
result[customerName]++;
}
}
var $div = document.createElement('div');
$div.innerHTML = "A:" + result.A + ", B:" + result.B + ", C:" + result.C;
kintone.app.getHeaderMenuSpaceElement().appendChild($div);
isCalculated = true;
});
return event;
});
})();
/**
* Kintoneと通信を行うクラス
*/
KintoneRecordManager = (function() {
KintoneRecordManager.prototype.query = '';
KintoneRecordManager.prototype.records = [];
KintoneRecordManager.prototype.appId = null;
KintoneRecordManager.prototype.query = '';
KintoneRecordManager.prototype.limit = 100;
KintoneRecordManager.prototype.offset = 0;
function KintoneRecordManager() {
this.appId = kintone.app.getId();
}
// すべてのレコード取得する
KintoneRecordManager.prototype.getRecords = function(callback) {
kintone.api('/k/v1/records', 'GET', {
app: this.appId,
query: this.query + (' limit ' + this.limit + ' offset ' + this.offset)
}, (function(_this) {
return function(res) {
var len;
Array.prototype.push.apply(_this.records, res.records);
len = res.records.length;
_this.offset += len;
if (len < _this.limit) {
_this.ready = true;
if (callback !== null) {
callback(_this.records);
}
} else {
_this.getRecords(callback);
}
};
})(this));
};
return KintoneRecordManager;
})();
以上、参考になりますでしょうか?
落合様
ありがとうございます!
参考にさせて頂きます。
落合様
頂いたサンプルで実装することが出来ました。
誠にありがとうございました。
続けて質問なのですが、
顧客名フィールドの他に数値フィールドをもつ下記の様な一覧で
顧客名 数値
A 100
A 200
B 150
C 100
C 150
A 200
: :
といった具合です。
この時、条件でAを選択するとAの値の合計だけが一覧画面に表示される、といった事は可能でしょうか?
プログラミングの知識が乏しいもので・・・
重ね重ね申し訳ございませんが、よろしくお願い致します。
田中様
条件でAを選択するとAの値の合計だけが一覧画面に表示される、といった事は可能でしょうか?
可能です。
選択フォームを作成し、その変更イベントで表示を書き換えるようにすればいいかと思います。
また、全体に対する情報をまとめて表示したいのであれば、カスタマイズビューを使うのもいいかと思います。
落合様
ご回答ありがとございます。
参考に致します。
再度質問をさせて頂くかもしれません。
よろしくお願いいたします。