一覧へ戻る
ITSM

ServiceNow でセクションをスマートに制御:g_form.setSectionDisplay の仕様と注意点

ServiceNow のフォーム上で、特定の条件に基づいて複数のフィールドを一括で隠したい場合、セクション単位で表示・非表示を切り替えるのが最も効率的です。本記事では、g_form.setSectionDisplay() を使用する際の名称指定ルールと、UI 環境による挙動の差異について解説します。

sectionName の指定ルール

このメソッドを使用する際、第 1 引数に渡すセクション名には、主に 2 つの指定パターンがあります。

  1. ラベルベース(通常): 画面に表示されているラベル名を 「小文字 + アンダースコア」 に変換した値(例: close_notes)で動作します。
  2. 内部セクションID: 環境や構成によっては、システム内部で管理されている ID(例: section_incident_3)を指定する必要があります。

✅ どちらを使うべきか? 通常はラベルベースの指定で動作しますが、Workspace や UI Builder、または特殊なカスタム UI では内部 ID が必要となる場合があります。実装時に動作しない場合は、以下のコマンドで正確な ID を確認することを強く推奨します。

// 現在のフォームで使用可能なセクション名をコンソールで確認
console.log(g_form.getSections());

実装コード例

ステータスに応じて「Close Notes」セクションを制御する、保守性の高い実装例です。

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (newValue === '') return;

    // 通常は小文字+アンダースコア("close_notes")を使用
    // 動作しない場合は getSections() で取得した内部 ID を指定
    var sectionName = "close_notes"; 

    // ステータスが「完了(3)」の場合のみ表示
    if (newValue == '3') {
        g_form.setSectionDisplay(sectionName, true);
    } else {
        g_form.setSectionDisplay(sectionName, false);
    }
}

実務における注意点(レベルアップ・ポイント)

  • 環境による挙動の違い: Service PortalWorkspace 環境では、標準の UI と挙動が異なる場合があるため注意が必要です。特に Workspace では、ラベルベースの指定が効かないケースがあるため、実機での検証が不可欠です。
  • UI Policy との比較: 条件が単純な場合は UI Policy の利用が推奨されますが、複雑な条件分岐や他のクライアント API との連携が必要な場合には、このスクリプト方式が非常に強力な武器となります。

まとめ

  • g_form.setSectionDisplay() は一括制御に極めて有効な API です。
  • 原則として 「ラベル名の小文字 + アンダースコア」 で指定しますが、環境に応じて 内部 ID の使用も検討してください。
  • 予期せぬ挙動を防ぐため、g_form.getSections() による事前の確認プロセスを習慣化しましょう。

👉 一言まとめ: 「セクション制御は基本を抑えつつ、環境ごとの差異を getSections() で見極めるのがプロの流儀です。Workspace 等の最新 UI では特に慎重なテストを行いましょう。」