ServiceNow のフォーム上で、特定の条件に基づいて複数のフィールドを一括で隠したい場合、セクション単位で表示・非表示を切り替えるのが最も効率的です。本記事では、g_form.setSectionDisplay() を使用する際の名称指定ルールと、UI 環境による挙動の差異について解説します。
sectionName の指定ルール
このメソッドを使用する際、第 1 引数に渡すセクション名には、主に 2 つの指定パターンがあります。
- ラベルベース(通常): 画面に表示されているラベル名を 「小文字 + アンダースコア」 に変換した値(例:
close_notes)で動作します。 - 内部セクション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 Portal や Workspace 環境では、標準の UI と挙動が異なる場合があるため注意が必要です。特に Workspace では、ラベルベースの指定が効かないケースがあるため、実機での検証が不可欠です。
- UI Policy との比較: 条件が単純な場合は UI Policy の利用が推奨されますが、複雑な条件分岐や他のクライアント API との連携が必要な場合には、このスクリプト方式が非常に強力な武器となります。
まとめ
- g_form.setSectionDisplay() は一括制御に極めて有効な API です。
- 原則として 「ラベル名の小文字 + アンダースコア」 で指定しますが、環境に応じて 内部 ID の使用も検討してください。
- 予期せぬ挙動を防ぐため、g_form.getSections() による事前の確認プロセスを習慣化しましょう。
👉 一言まとめ: 「セクション制御は基本を抑えつつ、環境ごとの差異を getSections() で見極めるのがプロの流儀です。Workspace 等の最新 UI では特に慎重なテストを行いましょう。」