はじめに
試したい機能が多いのですが、なかなか時間が取れないので
そこまで時間がかからなさそうなPDF機能(Printer friendly version)を今回は試したいと思います。
PDI環境
試したPDI環境はこんな感じです。
Version: Zurich

あんまり触ってなかったらPDIリリースされていたので新しくリクエストしなおしました。
アプリケーション作成
インスタンスがリリースされた関係で全てリセットされてしまったので、検証用のワークスペースアプリをまず作成します。

適当にテーブルとWorkspaceを作成しておきます。
※テーブルはTaskを継承
Printer friendly version
プラットフォーム(クラシックUi)でフォームを開き、上部ヘッダーのアイコンをクリックするとメニューの中にPrinter friendly versionというものがあります。

Workspaceにもある通常のExportだとHTML項目記載の画像ファイルがエクスポート内に入らず、たまにレイアウトが崩れる事もあります。

Printer friendly versionの方だと添付ファイル一覧が上部に表示されますが、HTML項目はきれいに印刷対応されています。

これがWorkspaceでもそのまま使えると良いのですが、Workspaceを開いている状態だとこのPrinter friendly versionが表示されません。

その為、WorkspaceでもPrinter friendly versionで印刷対応が出来るようにUIActionを作成してみます。
これが出来るとPDFGenerationAPIを使っていちからレイアウト作成するよりも簡単に印刷対応できるはずです。
UI Action作成
https://
<インスタンス名>.service-now.com/<テーブル名>.do?sys_id=<レコードID>&sysparm_view=&sysparm_domain=null&sysparm_domain_scope=null&sysparm_stack=no&sysparm_force_row_count=25000&sysparm_media=print&sysparm_use_polaris=false
Printer friendly versionのURLを確認すると
パラメーターの指定などもありますが、最低限だと<インスタンス名>、<テーブル名>、<レコードID>だけあれば良いようです。
これをUIAction内でURL生成して、別タブで開くようにしてあげれば対応できそうです。
早速作っていきます。
function onClick(g_form) {
if(g_form.isNewRecord()){
// 新規作成レコードは保存を促すメッセージを表示
g_form.addInfoMessage("Save your new record before printing.");
return;
}
const currentURL = top.window.location.href;
const instancenName = currentURL.split(".")[0].split("//")[1];
const tableName = g_form.getTableName();
const recordId = g_form.getUniqueValue();
// Printer friendly versionのURLを生成する
const printerFriendlyVersionUrl = `https://${instancenName}.service-now.com/${tableName}.do?sys_id=${recordId}&sysparm_view=&sysparm_domain=null&sysparm_domain_scope=null&sysparm_stack=no&sysparm_force_row_count=25000&sysparm_media=print&sysparm_use_polaris=false`;
// Printer friendly versionを開く
open(printerFriendlyVersionUrl,'_blank');
}
※面倒だったのでURLからinstanceNameを取得するようにしましたが、本当はGlideAjaxを介して、gs.getPropertyからインスタンス名を取得した方が良いと思います。
動作確認
プラットフォーム(クラシックUi)と同様の動きとなっていそうです。
queryパラメーターをもっと動的に指定するようにしておけば柔軟に対応できそうですね。

終わりに
PDFGenerationAPIは自由度が高くて良いのですが、アプリ/フォームを作るたびに毎回調整しながら作るのも大変なので、出来るだけ楽にできないかその方法を探していました。
OOTBのエクスポートではHTMLに対応しづらいので、この方法が取れるのであれば工数もそこまでかからずに印刷対応できるんじゃないかと思います。
参考URL
以下のURLを参考にしました。有益なサイト達に感謝します。
Workspacesで印刷に適したレコードバージョンを開く
Printer Friendly Version
Get Name of the Instance in Ui action Client Script ??
ネイティブUIとサービスポータルのトップウィンドウドキュメントオブジェクト
【ServiceNow】リクエストアイテムの変数もまとめて印刷・PDF化する方法
Client-Side and Server-Side Code in ONE UI Action using gsftSubmit()

