ServiceNow開発者の皆さん、モジュールやメールのリンクから特定のフォームを開いた際、URLに付与した独自のパラメータ(例:&sysparm_comments=test)を読み取り、フィールドに自動入力させたいと思ったことはありませんか? ここでは、Client Script内で素早く安全にURLパラメータを取得するためのベストプラクティスを解説します。
なぜURLパラメータの取得が必要なのか?
- ユーザーがリンクをクリックしてレコードを新規作成する際、リンク元のコンテキスト(入力の初期値をどうするか等)をURL経由でシステムへ動的に渡すことができます
- Client Scriptの
onLoad(画面ロード時)でそのパラメータを読み取ることで、指定された値を初期値としてフィールドに優先セットするなど、ユーザーの入力負荷を下げるUI制御が可能になります
推奨される取得方法(URLSearchParamsの活用)
以前の開発では、複雑な正規表現(RegEx)を使ってURL文字列を手動で切り刻むスクリプトが主流でしたが、現在ではモダンブラウザの標準機能である URLSearchParams を使用するのが最も確実なベストプラクティスです。
- クライアント側で動作するスクリプト用の、非常に強力な標準オブジェクトです
- 取得処理を専用の関数(ヘルパー関数)として切り出しておくことで、コードの可読性と再利用性が格段に上がります
実装コード例
以下は、sysparm_comments というパラメータをURLから取得し、安全に description フィールドへセットする実務向けの実装例です。
✅ URLパラメータ取得・設定スクリプト(プロフェッショナル版)
// パラメータ取得専用の関数を定義し、スクリプト内で使い回しやすくする
function getParamValue(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName);
}
function onLoad() {
// 取得したいパラメータのキー名を指定して関数を呼び出す
const comments = getParamValue('sysparm_comments');
if (comments) {
// パラメータに日本語や空白、記号が含まれてURLエンコードされている場合に備え、
// 必ず decodeURIComponent() を使って元の文字列にデコードしてからセットする
g_form.setValue('description', decodeURIComponent(comments));
}
}
※ 開発時のポイント: URLのパラメータに日本語や空白、記号が含まれていると %20 のようなエンコードされた文字列(文字化けのような状態)になります。そのため、フィールドにセットする直前に必ず decodeURIComponent() で元の文字列へ復元している部分が、このコードの最も優れたポイントです。
まとめ
- URLからの値取得は、正規表現に頼らず
URLSearchParamsオブジェクトを利用してスッキリと記述しましょう - 取得するロジックは
getParamValue()のような**小さな専用関数へ切り出す(モジュール化する)**ことで、保守性が劇的に向上します - URLパラメータに日本語や特殊記号が含まれるケースを想定し、値のセット時には
decodeURIComponent()によるデコード処理を挟む習慣をつけましょう
一言まとめ: 👉 URLパラメータの取得は URLSearchParams を使いつつ、セット時の decodeURIComponent() をお忘れなく!