新規投稿
フォローする

CSV出力の重複につきまして

実現したいこと

 ・CSV出力を行った際に前回出力したデータが残っており、データが重複してしまうのを回避したい。

・現状、レコード一覧の表示件数で表示している分しか出力できていない為、1000件を以上を1度に出力できるようにしたい。

 

エラー情報

エラーコメント:

「Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.」 

該当行:

84: xmlHttp.open('GET', appUrl, false);

 

利用したソースコード

「関連レコードのデータをCSV出力する方法」

https://developer.cybozu.io/hc/ja/articles/203605844-%E9%96%A2%E9%80%A3%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92CSV%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 

「関連レコードCSV出力時にテーブルデータ出力について」

https://developer.cybozu.io/hc/ja/community/posts/360051550031-%E9%96%A2%E9%80%A3%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89CSV%E5%87%BA%E5%8A%9B%E6%99%82%E3%81%AB%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E5%87%BA%E5%8A%9B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6 

試したこと

上記のソースコードを元に CSV出力を行うことは成功したのですが、

表題の通りデータが重複してしまっております。

先月までは重複することはなかったと記憶しており、先週、重複の現象に気づきました。

(その間、スクリプトの編集は行っていないなので元々の現象なのか、別の原因なのかがわかっておりません)

個人的にフォーラムの過去の投稿記事等で原因を調べておりましたが、Kintoneのスクリプトについて知識が及ばず、解決に至りませんでした。どなたかご教授いただけないでしょうか。

また、上記とは別なのですが、1000件を超えるレコードを1度にCSV出力したいとも考えており、

そちらも解決策が現在ない為、合わせてご教授いただけると幸いです。

再現条件

  • デバイス(PC or モバイル):PC
  • OS・ブラウザ:Windows10・Google Chrome

 現在適応しているスクリプト

(function() {
'use strict';

var CSVButtonEl;
kintone.events.on('app.record.index.show', function (event) {

//変数の定義
var records = event.records;
var customer, sample_table, 計算_0, project, project_number, url, DAY, user_name = "";

//function requestで使う変数
var resp = [];
var query = "";
var app_id = '19'

//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 += ['顧客', 'プロジェクト名', 'プロジェクト番号', 'URL', '日付', '対応者名', '対応時間', '\n'];
for (var i = 0; i < records.length; i++) {
customer = records[i]["customer"]["value"];
project = records[i]["project"]["value"];
project_number = records[i]["project_number"]["value"];
url = records[i]["url"]["value"];
sample_table = records[i]["sample_table"]["value"];

if (sample_table.length !== 0) {
for (var j = 0; j < sample_table.length; j++) {
計算_0 = sample_table[j]["value"]["計算_0"]["value"];
DAY = sample_table[j]["value"]["DAY"]["value"];
user_name = sample_table[j]["value"]["user_name"].value[0].code;

//会社名をキーに該当関連レコードを取得
query = 'customer = \"' + customer + '\"';

//同じ会社名のレコードを取得
resp[i] = request(app_id, query);
if (resp[i].records.length !== 0) {
for (var n = 0; n < resp[i].records.length; n++) {
csv += customer + ',' + project + ',' + project_number + ',' + url + ',' + DAY + ',' + user_name + ',' + 計算_0 + '\n';
}
} else {
csv += customer + ',' + ',' + ',' + url + ',' + DAY + ',' + user_name + ',' + 計算_0 + '\n';
}
}
} else {
csv += customer + ',' + url + ',' + ',' + ',' + '\n';
}
}
}

//関連レコードを取得する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;
}
});
})();
0

0件のコメント

サインインしてコメントを残してください。