一覧へ戻る
ITSM

ServiceNowでフォームセクションを表示・非表示にする方法(g_form.setSectionDisplay)

ServiceNow開発者の皆さん、画面上で大量のフィールドを特定の条件で丸ごと隠したい時、1つずつフィールドの非表示処理を書いていませんか? そのような場合は、関連するフィールドを「セクション(Section)」にまとめ、セクションごと表示・非表示を切り替えるのが圧倒的に効率的です。ここでは、クライアントスクリプトで g_form.setSectionDisplay() を活用してセクションを直感的にコントロールする方法と、開発者がよく陥る「名前指定のトラップ」について解説します。

g_form.setSectionDisplay の基本

  • フォーム上のセクション全体の表示・非表示を1行のコードで切り替えるためのClient-side APIです
  • 単一のフィールドを切り替える g_form.setDisplay() と使い方は似ており、UI Policyだけでは対応しきれない複雑なロジックなどが必要な際に大活躍します

最も多い失敗:セクション名の指定ルール

このメソッドを使った際「コードは合っているのに動かない」となる原因の9割は、第1引数で渡す「セクション名の指定方法(フォーマット)」のミスです。

  • 画面上の表示名(Label)をそのまま入力しても機能しません。必ず**すべて小文字に変換した文字列(Lowercase)**を使用してください
  • セクション名にスペースが含まれている場合は、スペースを**アンダースコア(_)**に置き換える必要があります
  • 例:「Resolution Information」というセクション名の場合、引数には必ず "resolution_information" と指定します

実装コード例(Client Script)

✅ 特定のステータスになった時だけセクションを表示する例

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    // 画面ロード時や値が空の場合は何もしない
    if (isLoading || newValue === '') {
        return;
    }

    // 対象セクション「Close Notes」を小文字化・アンダースコア化
    var sectionName = 'close_notes';

    // State が 3 (Closed) の時だけセクションを表示(true)、それ以外は非表示(false)
    if (newValue == '3') {
        g_form.setSectionDisplay(sectionName, true);
    } else {
        g_form.setSectionDisplay(sectionName, false);
    }
}

まとめ

  • 複数のフィールドを一括で隠したい場合は、個別に処理を書かずに g_form.setSectionDisplay() でセクションごと制御するのがスマートです
  • セクション名は必ず 「全て小文字」かつ「スペースはアンダースコア」 に変換した文字列(例: my_custom_section)で指定しましょう
  • ロジックが複雑な場合にはスクリプトが必要ですが、単純な条件の表示制御であればスクリプトを使わずに UI Policy だけで完結できないかを事前に検討することも重要です

一言まとめ: 👉 セクションの一括非表示は g_form.setSectionDisplay('小文字の_セクション名', false) でスッキリ制御!