1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ServiceNow】ワークスペースでPrinter friendly version機能【Workspace】

1
Posted at

はじめに

試したい機能が多いのですが、なかなか時間が取れないので
そこまで時間がかからなさそうなPDF機能(Printer friendly version)を今回は試したいと思います。

PDI環境

試したPDI環境はこんな感じです。
Version: Zurich
image.png
あんまり触ってなかったらPDIリリースされていたので新しくリクエストしなおしました。

アプリケーション作成

インスタンスがリリースされた関係で全てリセットされてしまったので、検証用のワークスペースアプリをまず作成します。
image.png

適当にテーブルとWorkspaceを作成しておきます。
※テーブルはTaskを継承

フォームにいくつかの項目を足しておきます。
image.png

Printer friendly version

プラットフォーム(クラシックUi)でフォームを開き、上部ヘッダーのアイコンをクリックするとメニューの中にPrinter friendly versionというものがあります。
image.png

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

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

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

その為、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生成して、別タブで開くようにしてあげれば対応できそうです。

早速作っていきます。

Printer friendly version
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からインスタンス名を取得した方が良いと思います。

動作確認

適当にレコードを作成し、動作確認してみます。
image.png

プラットフォーム(クラシックUi)と同様の動きとなっていそうです。
queryパラメーターをもっと動的に指定するようにしておけば柔軟に対応できそうですね。
image.png

終わりに

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()

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?