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