samppleもCSVに含みたいということですね。
以下のJSでどうでしょうか?
(function() {
'use strict';
var CSVButtonEl;
kintone.events.on('app.record.index.show', function (event) {
//変数の定義
var records = event.records;
var company, division, assignee, TEL, Mail, product, subtotal, sample_table, sample = "";
//function requestで使う変数
var resp = [];
var query = "";
var app_id = '取得先のアプリID'
//csvの配列
var csv = [];
//ボタンの有無をチェック
if (!CSVButtonEl) {
setBtn();
CSVButtonEl.addEventListener('click', toClick);
}
//ボタンエレメントの生成
function setBtn() {
var spaceEl = kintone.app.getHeaderMenuSpaceElement();
var text = document.createTextNode('CSV出力');
var btnClassName = 'sample-class2';
CSVButtonEl = document.createElement('button');
CSVButtonEl.appendChild(text);
CSVButtonEl.className = btnClassName;
spaceEl.appendChild(CSVButtonEl);
}
//クリックした際の処理
function toClick() {
getMakeCsv();
downloadFile(csv);
}
//csvファイルの作成
function getMakeCsv() {
//現在のレコード情報を取得
csv += ['会社名', '部署名', '担当者名', 'TEL', 'メールアドレス', '製品名', '小計', 'サンプル', ''];
for (var i = 0; i < records.length; i++) {
company = records[i]["company"]["value"];
division = records[i]["division"]["value"];
assignee = records[i]["assignee"]["value"];
TEL = records[i]["TEL"]["value"];
Mail = records[i]["Mail"]["value"];
sample_table = records[i]["sample_table"]["value"];
if (sample_table.length !== 0) {
for (var j = 0; j < sample_table.length; j++) {
sample = sample_table[j]["value"]["sample"]["value"];
//会社名をキーに該当関連レコードを取得
query = 'company = \"' + company + '\"';
//同じ会社名のレコードを取得
resp[i] = request(app_id, query);
if (resp[i].records.length !== 0) {
for (var n = 0; n < resp[i].records.length; n++) {
product = resp[i].records[n]['product']['value'];
subtotal = resp[i].records[n]['subtotal']['value'];
csv += division + ',' + assignee + ',' + TEL + ',' + Mail + ',' + product + ',' + subtotal + ',' + sample + '';
}
} else {
csv += division + ',' + assignee + ',' + TEL + ',' + Mail + ',' + ',' + ',' + sample + '';
}
}
} else {
csv += division + ',' + assignee + ',' + TEL + ',' + Mail + ',' + ',' + ',' + '';
}
}
}
//関連レコードを取得するxmlHttpリクエスト
function request(app_id, query) {
var appUrl = kintone.api.url('/k/v1/records') + '?app=' + app_id + '&query=' + query;
//xmlHttpリクエスト
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', appUrl, false);
xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xmlHttp.send(null);
//取得したレコードをArrayに格納
var respdata = JSON.parse(xmlHttp.responseText);
//レスポンスデータを戻り値として返す
return respdata;
}
//ダウンロード関数
function downloadFile(csv) {
//ファイル名
var filename = 'DM発送リスト_' + getTimeStamp() + '.csv';
//Blob準備
var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
var blob = new Blob([bom, csv], {type: 'text/csv'});
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, filename);
} else {
var url = (window.URL || window.webkitURL);
var blobUrl = url.createObjectURL(blob);
var e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var a = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
a.href = blobUrl;
a.download = filename;
a.dispatchEvent(e);
}
}
//ファイル名に付与する日付の取得
function getTimeStamp() {
var d = new Date();
var YYYY = d.getFullYear();
var MM = (d.getMonth() + 1);
var DD = d.getDate();
var hh = d.getHours();
var mm = d.getMinutes();
if (MM < 10) { MM = '0' + MM; }
if (DD < 10) { DD = '0' + DD; }
if (hh < 10) { hh = '0' + hh; }
else if (mm < 10) { mm = '0' + mm; }
String();
return '' + YYYY + MM + DD + hh + mm;
}
});
})();