- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-06-2022 06:55 PM
いつもお世話になっております。
以下の画像のコードを参考にCSVファイルのダウンロードをしたいと考えているのですが、以下の点についてご教授頂けると幸いです。
・Export Importモジュールの設定(カラムネームで出力する設定)は変更せずにCSVファイルのヘッダを日本語ラベル名で出力するためにコード上でヘッダの上書きをしたいのですが可能でしょうか?
どんな些細な事でもいいので、お力添え頂けると幸いです。
宜しくお願い致します。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-08-2022 05:40 AM
参考にScriptを作成してみました。日本語ラベル名を取得するためにGlideAjaxを使ったので、GlideAjax使うならXMLHttpRequestを呼び出すのは無駄な処理になってます。 自分では作れないカスタマイズはやらない方が良いです。Script自体が推奨しない方法の場合もありますし、不具合対応や改良ができなくなるためです。Communityで有効な情報が得られない場合もあります。
function onTestClientCSV() {
// 日本語取得
var ga = new GlideAjax('testAjaxJPTableLabel');
ga.addParam('sysparm_name', 'get');
ga.addParam('sysparm_table', 'incident');
ga.getXMLAnswer(job2);
function job2(tableLabel) {
var tableLabelObj = JSON.parse(tableLabel);
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', '/incident_list.do?sysparm_query=&CSV', true);
xmlhttp.setRequestHeader("X-UserToken", g_ck);
xmlhttp.setRequestHeader("Accept", "application/json");
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var csvData = '' + xmlhttp.responseText;
var header = '';
csvData = csvData.replace(/[^\r\n]*/, function(match) {
header = match;
return '';
});
var no = 0;
// 日本語に置き換え
header = header.replace(/\w+/g, function(match) {
no = tableLabelObj.name.indexOf(match);
if (no >= 0) {
return tableLabelObj.label[no];
}
return match;
});
var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
var blob = new Blob([bom, header + csvData], {
type: 'text/csv'
});
var document = g_list.getContainer().ownerDocument;
var window = g_list.getContainer().ownerDocument.defaultView;
var url = (window.URL || window.webkitURL).createObjectURL(blob);
var link = document.createElement('a');
link.download = 'incident.csv';
link.href = url;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
};
xmlhttp.send();
}
}
Script include
var testAjaxJPTableLabel = Class.create();
testAjaxJPTableLabel.prototype = Object.extendsObject(AbstractAjaxProcessor, {
get: function() {
var table = this.getParameter("sysparm_table");
var gr = new GlideRecord(table);
gr.initialize();
var fields = gr.getFields();
var nameData = [];
var labelData = [];
var user = gs.getUser();
var lang = user.getPreference("user.language");
user.setPreference("user.language", 'ja');
for (var i = 0; i < fields.size(); i++) {
var glideElement = fields.get(i);
nameData.push('' + glideElement.getName());
labelData.push('' + glideElement.getLabel());
}
user.setPreference("user.language", lang);
return JSON.stringify({name:nameData,label:labelData});
},
type: 'testAjaxJPTableLabel'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-08-2022 05:40 AM
参考にScriptを作成してみました。日本語ラベル名を取得するためにGlideAjaxを使ったので、GlideAjax使うならXMLHttpRequestを呼び出すのは無駄な処理になってます。 自分では作れないカスタマイズはやらない方が良いです。Script自体が推奨しない方法の場合もありますし、不具合対応や改良ができなくなるためです。Communityで有効な情報が得られない場合もあります。
function onTestClientCSV() {
// 日本語取得
var ga = new GlideAjax('testAjaxJPTableLabel');
ga.addParam('sysparm_name', 'get');
ga.addParam('sysparm_table', 'incident');
ga.getXMLAnswer(job2);
function job2(tableLabel) {
var tableLabelObj = JSON.parse(tableLabel);
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', '/incident_list.do?sysparm_query=&CSV', true);
xmlhttp.setRequestHeader("X-UserToken", g_ck);
xmlhttp.setRequestHeader("Accept", "application/json");
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var csvData = '' + xmlhttp.responseText;
var header = '';
csvData = csvData.replace(/[^\r\n]*/, function(match) {
header = match;
return '';
});
var no = 0;
// 日本語に置き換え
header = header.replace(/\w+/g, function(match) {
no = tableLabelObj.name.indexOf(match);
if (no >= 0) {
return tableLabelObj.label[no];
}
return match;
});
var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
var blob = new Blob([bom, header + csvData], {
type: 'text/csv'
});
var document = g_list.getContainer().ownerDocument;
var window = g_list.getContainer().ownerDocument.defaultView;
var url = (window.URL || window.webkitURL).createObjectURL(blob);
var link = document.createElement('a');
link.download = 'incident.csv';
link.href = url;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
};
xmlhttp.send();
}
}
Script include
var testAjaxJPTableLabel = Class.create();
testAjaxJPTableLabel.prototype = Object.extendsObject(AbstractAjaxProcessor, {
get: function() {
var table = this.getParameter("sysparm_table");
var gr = new GlideRecord(table);
gr.initialize();
var fields = gr.getFields();
var nameData = [];
var labelData = [];
var user = gs.getUser();
var lang = user.getPreference("user.language");
user.setPreference("user.language", 'ja');
for (var i = 0; i < fields.size(); i++) {
var glideElement = fields.get(i);
nameData.push('' + glideElement.getName());
labelData.push('' + glideElement.getLabel());
}
user.setPreference("user.language", lang);
return JSON.stringify({name:nameData,label:labelData});
},
type: 'testAjaxJPTableLabel'
});