JS初心者です。
一覧からコメントのみを抽出し、CSVでダウンロードをする際に、
アプリIDも一緒にCSV出力をしたいのですが、うまくいきません。
CSVのA列に、アプリIDを追加で出力したいです。
恐らくですが、下記コードに問題があるようです。
row.push(escapeStr(kintone.app.getId();)); //アプリID
元となるサンプルコードは下記の通りです。
なお下記サンプルコードは問題なく、実装でき、CSVもダウンロードできています。
応用 レコード一覧画面から全レコードのコメント情報を取得する ※2016/09/21追記
(function() {
“use strict”;
//エスケープ
function escapeStr(value) {
return ‘"’ + (value ? value.replace(/“/g, '”“') : ‘’) + '”';
}
//CSVファイルをダウンロード
function downloadCSV(csv) {
var csvbuf = csv.map(function(e) {return e.join(‘,’); }).join(‘\r’);
var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
var blob = new Blob([bom, csvbuf], { type: ‘text/csv’ });
var url = (window.URL || window.webkitURL).createObjectURL(blob);
//ファイル名:アプリ番号_comments.csv
var appId = kintone.app.getId();
var fileName = appId + ‘_comments.csv’;
if (window.navigator.msSaveOrOpenBlob) {
// ブラウザがIEの場合
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else {
// ブラウザがIE以外の場合
var link = document.createElement(‘a’);
var e = document.createEvent(‘MouseEvents’);
e.initMouseEvent(‘click’, true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
link.download = fileName;
link.href = url;
link.dispatchEvent(e);
}
}
//レコード一覧を取得する
function fetchRecords(appId, opt_offset, opt_limit, opt_records) {
var offset = opt_offset || 0;
var limit = opt_limit || 100;
var allRecords = opt_records || [];
var params = {app: appId, query: ‘order by $id asc limit ’ + limit + ’ offset ’ + offset};
return kintone.api(kintone.api.url(’/k/v1/records’, true), ‘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 getCommentCsv(records, opt_comments, opt_i, opt_offset) {
var i = opt_i || 0; //レコードのカウント
var comments = opt_comments || [];
var offset = opt_offset || 0;
var appId = kintone.app.getId(); //アプリID
var recordId = records[i][‘$id’][‘value’]; //レコードID
var params = {
‘app’: appId,
‘record’: recordId,
‘offset’: offset
};
//一覧画面からコメント取得
return kintone.api(
kintone.api.url(‘/k/v1/record/comments’, true), ‘GET’, params).then(function(resp) {
//CSVデータの作成
for (var j = 0; j < resp.comments.length; j++) {
var row = [];
var mentions_code = [];
var mentions_type = [];
if (resp.comments[j].mentions[0] === undefined) {
resp.comments[j].mentions.code = null;
}
for (var k = 0; k < resp.comments[j].mentions.length; k++) {
mentions_code.push(resp.comments[j].mentions[k].code);
mentions_type.push(resp.comments[j].mentions[k].type);
}
row.push(escapeStr(kintone.app.getId();)); //アプリID
row.push(escapeStr(recordId)); //レコードID
row.push(escapeStr(resp.comments[j].id)); //コメントID
row.push(escapeStr(resp.comments[j].text)); //コメント内容
row.push(escapeStr(resp.comments[j].createdAt)); //投稿日時
row.push(escapeStr(resp.comments[j].creator.code)); //投稿者ログイン名
row.push(escapeStr(resp.comments[j].creator.name)); //投稿者表示名
row.push(escapeStr(mentions_code.join(‘,’))); //メンション宛先
row.push(escapeStr(mentions_type.join(‘,’))); //メンションタイプ
comments.push(row);
}
//コメントを全て参照したか判定
if (resp.older) {
return getCommentCsv(records, comments, i, offset + 10);
}
i = i + 1;
//レコードを全て参照したか判定
if (records.length !== i) {
return getCommentCsv(records, comments, i);
}
return comments;
});
}
//コメント一覧のCSVファイルを作成
function createCSVData(records) {
getCommentCsv(records).then(function(comments) {
var comments_csv = [];
//CSVファイルの列名
var column_row = [‘アプリID’, ‘レコードID’, ‘コメントID’, ‘コメント内容’,
‘投稿日時’, ‘投稿者ログイン名’, ‘投稿者表示名’,
‘メンション宛先’, ‘メンションタイプ’];
if (comments.length === 0) {
alert(‘コメントが登録されていません’);
return;
}
comments_csv.push(column_row);
for (var i = 0; i < comments.length; i++) {
comments_csv.push(comments[i]);
}
// BOM付でダウンロード
downloadCSV(comments_csv);
});
}
// レコード一覧画面
kintone.events.on([‘app.record.index.show’], function(event) {
// 増殖バグを防ぐ
if (document.getElementById(‘download-comment-csv’) !== null) {
return;
}
// ヘッダの要素にボタンを作成
var header_element = kintone.app.getHeaderMenuSpaceElement();
var csv_button = document.createElement(‘button’);
csv_button.id = ‘download-comment-csv’;
csv_button.innerText = ‘コメントをCSVでダウンロード’;
csv_button.onclick = function() {
fetchRecords(kintone.app.getId()).then(function(records) {
if (records.length === 0) {
alert(‘レコードが登録されていません’);
return;
}
// CSVデータを作成
createCSVData(records);
});
};
header_element.appendChild(csv_button);
});
})();
よろしくお願い致します。