👏
ServiceNowのUI Actionでファイル名を指定してファイル出力を行う
要約
ServiceNowの標準機能でファイル出力をする場合、テーブルの物理名がファイル名になる。
ここで出力するファイルを帳票として利用するため、ファイル名を指定したい、という要件を叶えるため、UI Actionを利用する方法をまとめる。
設定内容
UI Actionの設定値はいろいろありますが、特筆するところだけ。
項目名 | 設定値 |
---|---|
Client | true |
Onclick | exportPdf() ※ |
※関数名なので、コード例と合わせればなんでも良い
コード例
// ServiceNow標準の実装がES5の記法で作成されていることもあり、スクリプトは敢えてモダンな書き方をしていない。
function exportPdf() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://instance-name.service-now.com/table_name.do?sys_id=' + g_form.getUniqueValue() + '&PDF', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
var element = top.document.createElement('a');
var url = new Blob([this.response], {type: 'application/pdf'});
element.href = top.URL.createObjectURL(url);
// ここがファイル名になる
element.download = g_form.getValue('number') + '.pdf';
element.dataset.downloadurl = ['application/pdf', element.download, element.href].join(':');
element.click();
top.URL.revokeObjectURL(url);
};
xhr.send();
}
見ての通り、PDFを取得するURLから取得したファイルをBlobに展開して、改めてファイルをダウンロードさせているだけ。
documentオブジェクトをそのままでは取得できないが、topというオブジェクトからdocumentを取得できるようだ。
結果
出力されるファイル名を指定することができる。
Discussion