お世話になっております。
現在研修への参加回数をカウントし、必要な回数と足りない回数が一度に見れるカスタマイズビューを作っております。
cdnのカスタマイズビューの作成を参考に作成中なのですが、2点ほどわからないところがあり、困っております。
まず一点目ですが、key3にレコードのテーブルに氏名がある人のカウントを行いたいのですが、方法がわかりません。
デフォルトの集計>表>
大項目「テーブル内の氏名」
集計方法「レコード数」
条件「すべて」
ソート「集計地」で出てくるレコード数を取得し、
カスタマイズビューのkey3に当てはめたいです。
2つ目の質問ですが、key4に他のアプリからとってきた登用日の月のみを参考に、(例えば10月なら5など)を入力したいのですが
substring(5,7)などを使用して必要な部分を切り出すと、コンソールを見る限りエラーはでませんが表自体の表示ができなくなってしまいます。
こういった日付を切り出す場合はどういった処理をすればよろしいでしょうか。
お忙しいところ恐れ入りますが、ご教授頂けると助かります。
下記にコードを記載いたします。
jQuery.noConflict();
(function($) {
“use strict”;
function fetchRecords(appId, opt_offset, opt_limit, opt_records) {
var shain = kintone.app.getLookupTargetAppId(“XXX”);
var offset = opt_offset || 0;
var limit = opt_limit || 400;
var allRecords = opt_records || [];
var params = {
app: XXX,
query: ‘order by レコード番号 asc limit ’ + limit + ’ offset ’ + offset
};
return kintone.api(’/k/v1/records’, ‘GET’, params).then(function(resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(appId, offset + limit, limit, allRecords);
}
return allRecords;
});
}
function count_data(records, opt_data, opt_i) {
var i = opt_i || 0;
var allData = opt_data || [];
var appId = kintone.app.getId();
var key1, key2, key3, key4, key5;
key1 = records[i][‘社員番号’][‘value’];
key1 = key1.replace(/</g, “<”).replace(/>/g, “>”);
key2 = records[i][‘氏名’][‘value’];
var params = {
‘app’: appId,
‘query’: ‘staff_no like "’ + key1 + ‘"’
};
var touyou_day = records[i][‘登用日’][‘value’];
return kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {
if (resp.records) {
key3 = 0;
var obj = resp.records;
for (var j = 0; j < obj.length; j++) {
key3 += parseInt(obj[j][‘count’][‘value’], 10);
}
key4 = 4;
if (records[i][‘その他区分’][‘value’][0] == [“新卒”]) {
key4 = 6;
} else if (records[i][‘その他区分’][‘value’][0] != [“新卒”]) {
} else {}
key5 = parseInt(key3) - parseInt(key4);
allData.push({
s_number: key1,
s_name: key2,
results: key3,
necessary: key4,
decision: key5
});
} else {
event.error = ‘情報が取得できません。’;
}
i = i + 1;
if (records.length !== i) {
return count_data(records, allData, i);
}
return allData;
});
}
function cellDesign() {
$(‘#view tr td’).each(function(index, elm) {
if ($(this).hasClass(‘decision_class’)) {
if ($(this).text().indexOf(“-”) > -1) {
$(this).css(‘color’, ‘#ff0000’);
}
}
});
}
function CustomizeView(records) {
count_data(records).then(function(data) {
var colModelSettings = [{
name: “s_number”,
index: “s_number”,
width: 100,
align: “center”,
classes: “s_number_class”
}, {
name: “s_name”,
index: “s_name”,
width: 200,
align: “right”,
classes: “s_name_class”,
sorttype: “float”
}, {
name: “results”,
index: “results”,
width: 100,
align: “right”,
classes: “results_class”,
formatter: ‘currency’,
sorttype: “float”
}, {
name: “necessary”,
index: “necessary”,
width: 100,
align: “right”,
classes: “necessary_class”,
formatter: ‘currency’,
sorttype: “float”
}, {
name: “decision”,
index: “decision”,
width: 100,
align: “center”,
classes: “decision_class”,
sorttype: “float”
}];
var colNames = [“社員番号”, “氏名”, “参加回数”, “必須参加回数”, “判定”];
$(“#view”).jqGrid({
data: data,
datatype: “local”,
colNames: colNames,
colModel: colModelSettings,
rowNum: 10,
rowList: [1, 10, 20],
caption: “参加状況一覧”,
height: “auto”,
width: 600,
pager: ‘pager’,
shrinkToFit: true,
viewrecords: true,
gridComplete: function() {
cellDesign();
}
});
});
return;
}
kintone.events.on([‘app.record.index.show’], function(event) {
var appId = kintone.app.getId();
fetchRecords(appId).then(function(records) {
CustomizeView(records);
});
});
})(jQuery);