ServiceNow の開発において、モジュールやメール内のリンクから特定のフォームを開いた際、URL に付与された独自のパラメータ(例:&sysparm_comments=test)を読み取り、フィールドへ値を自動入力させたい場合があります。本記事では、プラットフォーム標準の API を活用した最も安全な方法と、ブラウザ標準機能を用いる際の注意点について解説します。
■ 推奨される取得方法:g_form.getParameter()
ServiceNow において、URL パラメータ(特に sysparm_ から始まるもの)を取得する最も確実で推奨される方法は、標準 API である g_form.getParameter() を使用することです。
- メリット: ブラウザ間の互換性(Classic UI の旧バージョンなど)を考慮する必要がなく、プラットフォーム内で最も安定して動作します。
- デコードの仕様: このメソッドは取得した値を適切に処理して返すため、開発者が手動でデコードを行う必要はありません。
実装コード例
✅ ServiceNow 標準 API を使用した実装(ベストプラクティス)
function onLoad() {
// 取得したいパラメータ名を指定するだけで安全に取得可能
var comments = g_form.getParameter('sysparm_comments');
if (comments) {
// g_form.getParameter() は処理済みの値を返すため、
// そのまま setValue() に渡すのが最も効率的です
g_form.setValue('description', comments);
}
}
Web 標準機能(URLSearchParams)を使用する際の注意点
モダンなブラウザ機能である URLSearchParams を利用することも可能ですが、その際は以下の「デコードの重複」に十分注意してください。
⚠️ decodeURIComponent() の二重実行は不要 URLSearchParams.get() メソッドは、内部的に すでにデコードされた値 を返します。そのため、取得した値に対してさらに decodeURIComponent() を実行すると、文字列が破損したり、特定の記号(% など)が含まれる場合にエラーの原因となったりします。
// ⚠️ 誤った実装例(二重デコードによるバグの危険性)
const val = new URLSearchParams(window.location.search).get('my_param');
g_form.setValue('field', decodeURIComponent(val)); // 不要なデコードにより動作不良を招く恐れ
動作環境による考慮事項
- Workspace / UI Builder: Workspace 環境では
window.locationへのアクセスが制限される場合があるため、標準の Classic UI とは異なるアプローチ(コンテキストパラメータの参照など)が必要になることがあります。 - UI 間の差異: Service Portal と Classic UI では内部的な処理が異なる場合があるため、実装後は必ず各環境での動作検証を行ってください。
まとめ
- ServiceNow では、第一選択肢として安定性の高い g_form.getParameter() を検討してください。
URLSearchParamsを使用する場合は、二重デコード を避け、取得した値をそのまま利用するようにしましょう。- 実行環境(Classic UI, Workspace, Portal)による仕様の違いを理解し、環境に最適な API を選択することが重要です。
👉 一言まとめ: 「URL パラメータの取得は、プラットフォーム標準の g_form.getParameter() が最も安全です。独自にデコード処理を加えすぎることによる予期せぬバグには十分に注意しましょう。」