カスタマイズビューの作成について

お世話になっております。

現在研修への参加回数をカウントし、必要な回数と足りない回数が一度に見れるカスタマイズビューを作っております。

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);

長いのでコードは追えてませんが、できる範囲で質問に関してお答えしますので参考になると幸いです。

質問1. レコードのテーブルに氏名がある人のカウントを行いたいのですが、方法がわかりません。
これはサブテーブルでしょうか?条件があるようですのでカウントするとなると、for文などを駆使してカウントすることになりそうです。

質問2. 日付を切り出す場合はどういった処理をすればよろしいでしょうか。
日付を操作するにはmoment.jsを使うことをおすすめします。下記が参考になるかと思います。
https://developer.cybozu.io/hc/ja/articles/204982474-Moment-js-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6-%E6%97%A5%E6%99%82%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B

 

お世話になっております。

質問2についてはswitchで判定式を作成して解決をしました。

 

質問1についてはサブテーブルになります。

一点修正がありますが、氏名⇒社員番号に変更となりました。

下記がレコード詳細画面のサブテーブルになります。

ここの社員番号が記載があり、出欠が参加になっているレコードのカウントを行いたいです。

下記の画像は添付画像は集計する⇒その他⇒

グラフの種類:表

大項目:社員番号

集計方法:レコード数

条件:出欠>参加

で適用した際の表になります。

下記の画像はカスタマイズビューの作成中の画面となります。

ここの参加回数(key3)に2番目の画像のレコード数と表示されている数字を足したいです。

ソースで言えば下記の箇所になります。

var params = {
‘app’: appId,
‘query’: ‘staff_no like "’ + key1 + ‘"’
};

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].table.value.数値.value, 10); //ここがわからない。
}

わかりにくい質問かと思いますが、ご教授いただけると助かります。

宜しくお願いします。