30万件程度のレコードをエクセル形式で分割して自動的にエクスポートする方法について
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-29-2023 01:02 AM
インストールソフトウェアのデータをエクセル出力したいのですが、OOTBではエクスポートの制限があり、エクセルにダウンロード出来ず、対応方法を探しております。できれば自動的に10万件づつなど分割してエクセルファイルに出力し、メールでファイルを送付したいのですが、スクリプト等で実行する方法はありますか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
06-29-2023 02:21 AM
以下のScriptは、指定した分割行数で分割したDownload用 URLを作成するScriptです(昔作った物)。このURLにRedirectをClientScriptで行うことで自動的にDownloadが始まります。
// Version 2.0 汎用的なファイル出力版
var myInstance = 'myInstance'; // インスタンス名
var myTable = 'incident'; // エクスポートテーブル名
var myQuery = ''; // エクスポートQuery 必要な場合に記載
var myFileType = 'CSV'; // エクスポート形式 CSV,XLSX,XML
var setLimit = 10000; // エクスポート分割行数
var sysid = '';
var exportUrl = [];
var gr = new GlideRecord(myTable);
gr.initialize();
var fields = gr.getFields();
var myField = [];
var num;
exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
'?sysparm_query=' +
(!!myQuery ? encodeURIComponent(myQuery) + '%5EORDERBYsys_id' : 'ORDERBYsys_id') +
'&sysparm_record_count=' + setLimit +
'&sysparm_default_export_fields=all&' + myFileType);
num = setLimit - 1;
do {
gr = new GlideRecord(myTable);
gr.initialize();
if(myQuery) gr.addEncodedQuery(myQuery);
gr.orderBy('sys_id');
gr.chooseWindow(num, num + 2);
gr.query();
if (gr.next()) {
sysid = '' + gr.getValue('sys_id');
exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
'?sysparm_query=sys_id%3E' + sysid +
(!!myQuery ? '%5E' + encodeURIComponent(myQuery) : '') +
'%5EORDERBYsys_id' +
'&sysparm_record_count=' + setLimit +
'&sysparm_default_export_fields=all&' + myFileType);
}
num += setLimit;
} while (gr.next());
for (num = 0; num < exportUrl.length; num++) {
gs.info(exportUrl[num]);
}
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-02-2023 05:53 PM
早速のご返答ありがとうございます。参考にさせていただき試してみますので、また何かありましたら追加質問させてください。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
07-05-2023 01:30 AM
UI16システムプロパティ→インポートエクスポートを選択し、Excel Format (.xlsx)のExport のLimitの上限値をデフォルト値から変更してあげてみてはいかがでしょうか。
※エクスポートする数が多いと、ファイルを直接DLするのではなくメールで送付するオプションが表示されると思います。インスタンスが一時的に重くなる可能性があるのでそこは検証しながら調整すればよいかと思いました。