👏

ServiceNowのUI Actionでファイル名を指定してファイル出力を行う

2020/10/13に公開

要約

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