一覧へ戻る
ITSM

ServiceNowの Client Script で URLパラメータを取得する方法

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() をお忘れなく!