一覧へ戻る
ITSM

ServiceNow における isValidRecord() への正確な理解と状態チェック

ServiceNow のサーバーサイドスクリプトにおいて、isValidRecord() メソッドは GlideRecord オブジェクトの状態を確認するために使用されます。しかし、このメソッドが「何をチェックし、何をチェックしないのか」を正確に理解しておくことは、予期せぬバグを防ぐために非常に重要です。

isValidRecord() の真の意味

isValidRecord() は、GlideRecord オブジェクトが現在 「有効なレコードを指している(参照している)かどうか」 を確認するための状態チェック用メソッドです。

  • 役割: カーソルが有効なレコード上にあり、フィールド値にアクセス可能な状態であるかを判定します。
  • 注意: このメソッドは、ACL による権限チェックや、外部プロセスによるリアルタイムの削除、同時実行制御などを検知するものではありません。 あくまでスクリプト内での GlideRecord オブジェクトの状態を確認するものです。

false が返される主なケース

このメソッドが false を返すのは、主に以下のような「非有効な参照状態」にあるときです。

  1. get() の失敗: gr.get(sys_id) で存在しない ID を指定し、レコードの取得に失敗した直後の状態。
  2. クエリ結果が 0 件: query() を実行したが、条件に合致するレコードが 1 件も存在しなかった状態。
  3. ループ終了後: while (gr.next()) による繰り返し処理が完了し、カーソルが最後のレコードを通り越した状態。

実務における判断ポイント

実は、多くの ServiceNow 開発者は isValidRecord() を明示的に使用しません。なぜなら、以下のような標準的なコーディングパターンによって、すでに有効性のチェックが含まれているからです。

✅ 一般的なパターン(推奨)

var gr = new GlideRecord('incident');
if (gr.get(sysId)) {
    // get() が true を返した時点で、有効なレコードを指していることが保証される
    gs.info(gr.number);
}

✅ isValidRecord() を使用するケース UI アクションやビジネスルール内で、current オブジェクトが確実に有効なソースを保持しているかを念のために確認したい場合や、複雑にカーソルを移動させるスクリプトなどで現在のポインタ状態を判定したい場合に利用されます。

まとめ

  • isValidRecord() は、GlideRecord が有効なレコードを参照しているかを判定する 状態チェック用メソッド です。
  • 本メソッドはセキュリティ(ACL)の検証や、削除のリアルタイム検知用ではありません。
  • 効率的な開発のためには、まず if (gr.get())if (gr.next()) といった 戻り値による制御 を優先し、必要に応じて状態確認の補助として本メソッドを活用しましょう。

👉 一言まとめ: 「isValidRecord() は 『今、レコードを掴んでいるか』 を確認するカーソルチェックです。権限や削除の検知とは別物であることを正しく理解しましょう。」