フィールド内のテーブル値を集計して表示させたい

 

https://cybozudev.zendesk.com/hc/ja/articles/202422244-第6回-サブテーブルの値を利用する

 

↑ここを参考に作っています。

 

レコード内のフィールドでテーブルを作っています。

このフィールドの「対応状況」をSUMしてhtmlに表示させたたいのですが、

うまくSUMまたは表示できない様なのです・・・。

根本的に間違っているのでしょうか?

数値フォームに代入できるとなお良いのですが。

 

jQuery.noConflict();
(function($) {
"use strict";

kintone.events.on('app.record.detail.show', function(event) {
if (!event.record) {
return;
}

var subTotals = new Array();
var tableRecords = event.record.order_items.value;
count1=0;
count2=0;
count3=0;
count4=0;
count5=0;

// テーブル内の各レコードをカテゴリごとに集計する
for (var i = 0; i < tableRecords.length; i++) {
var category = tableRecords[i].value['対応状況'].value;
if (!subTotals[category]) {
subTotals[category] = 0;
}

if (tableRecords[i].value['対応状況'].value == '未対応') {
count1++;
}
if (tableRecords[i].value['対応状況'].value == '対応中') {
count2++;
}
if (tableRecords[i].value['対応状況'].value == '提案済み') {
count3++;
}
if (tableRecords[i].value['対応状況'].value == '受注') {
count4++;
}
if (tableRecords[i].value['対応状況'].value == '失注') {
count5++;
}
}

// 集計結果をスペースフィールドに表示する
var myTotalSpace = document.createElement('ul');
var categorySpace = document.createElement('li');
categorySpace.innerHTML = '未対応 : ' + count1 + '件';
myTotalSpace.appendChild(categorySpace);

kintone.app.record.getSpaceElement('sub_total_area').appendChild(myTotalSpace);
});


})(jQuery);

大西 範知さん

 

ひとまずご提示のコードが動かないのは、

各count変数を下記のように宣言していないためです。

 

var count1=0;
var count2=0;
var count3=0;
var count4=0;
var count5=0;

 

数値フォームに代入したいとのことですが、

単純に表示だけしたい場合は、editやcreateイベント内にて、

各count変数の値を

event.record.数値フォームのフィールドコード.value = count1;

のように代入し、最後に

return event;

のようにコードを加筆すれば可能かと思います。

 

そうではなく、詳細画面表示時にレコードの値として数値フィールドに更新したいという場合は、

更新のAPIを使用する必要があります。

ご回答ありがとうございます。

数値フィールド「数値01」用意してみました。

app.record.create.show

としてみましたが間違っているでしょうか?

HTML表示後に集計し、数値フィールドに表示はそもそもできないのでしょうか・・・。

jQuery.noConflict();
(function($) {
"use strict";

kintone.events.on('app.record.detail.show', function(event) {
if (!event.record) {
return;
}

var subTotals = new Array([]);
var tableRecords = event.record.order_items.value;
var count1=0;
var count2=0;
var count3=0;
var count4=0;
var count5=0;

// テーブル内の各レコードをカテゴリごとに集計する
for (var i = 0; i < tableRecords.length; i++) {
var category = tableRecords[i].value['対応状況'].value;
if (!subTotals[category]) {
subTotals[category] = 0;
}

if (tableRecords[i].value['対応状況'].value == '未対応') {
count1++;
}
if (tableRecords[i].value['対応状況'].value == '対応中') {
count2++;
}
if (tableRecords[i].value['対応状況'].value == '提案済み') {
count3++;
}
if (tableRecords[i].value['対応状況'].value == '受注') {
count4++;
}
if (tableRecords[i].value['対応状況'].value == '失注') {
count5++;
}

}

});

kintone.events.on('app.record.create.show', function(event) {

event.record.数値01.value = count1;
return event;

});


})(jQuery);

大西 範知さん
レコード作成時にはそもそもテーブルにデータがないので意味がないと思いますが、
レコード編集時であれば、detail.showのところをedit.showにし、
event.record.数値01.value = count1;
return event;
を最後に付け加えれば動きそうな気がします。

また、テーブルを編集する度にイベントを走らせたい場合はchangeイベントを使用する必要があります。

ご回答ありがとうございます。

不要な検証コードを整理、edit.showに変更し、レコードを編集した際に、

ブラウザのデバッガで確認をとりました。

count1が正しくカウントアップされるところまでは確認できました。ありがとうございます。

event.record.数値01.value = count1;

↑この代入のところでエラーが発生しているようでした。

「Cannot set property value of undefined」

調べているのですが、代入方法が悪いのかわからずです。

 

jQuery.noConflict();
(function($) {
"use strict";

kintone.events.on('app.record.edit.show', function(event) {
if (!event.record) {
return;
}
var tableRecords = event.record.商談履歴.value;
var count1=0;

// テーブル内の各レコードを対応状況を集計する
for (var i = 0; i < tableRecords.length; i++) {
if (tableRecords[i].value['対応状況'].value == '未対応') {
count1++;
}
}

event.record.数値01.value = count1;
return event;

});

})(jQuery);

すいません。こちらのミスでした。

数値01としたフィールドコード名が違うものになってました。

 

意図通り動くようになりました!ありがとう御座いました。

 

最終結果を念のため書き込んでおきます。

↓ レコード編集時にカウントして数値フィールドにSUMが代入できました。ありがとうございました。

jQuery.noConflict();
(function($) {

"use strict";

kintone.events.on('app.record.edit.show', function(event) {

if (!event.record) {
return;
}

var tableRecords = event.record.商談履歴.value;
var count0=0;
var count1=0;
var count2=0;
var count3=0;
var count4=0;
var count5=0;
var count6=0;

// テーブル内の各レコードの対応状況を集計する
for (var i = 0; i < tableRecords.length; i++) {
if (tableRecords[i].value['対応状況'].value == '未対応') {
count1++;
}
if (tableRecords[i].value['対応状況'].value == '対応中') {
count2++;
}
if (tableRecords[i].value['対応状況'].value == '提案済み') {
count3++;
}
if (tableRecords[i].value['対応状況'].value == '受注') {
count4++;
}
if (tableRecords[i].value['対応状況'].value == '失注') {
count5++;
}
if (tableRecords[i].value['対応状況'].value == '取り組み中止') {
count6++;
}
count0++;
}

event.record.課題数.value = count0;
event.record.未対応.value = count1;
event.record.対応中.value = count2;
event.record.提案済み.value = count3;
event.record.受注.value = count4;
event.record.失注.value = count5;
event.record.取りやめ.value = count6;

return event;

});

})(jQuery);