音ゲー、fps、DTM、プログラミング雑記置き場

ブログタイトル通りに雑記を垂れ流す。

【ServiceNow】GlideRecordをReturnする際の注意点

  • 結論から言うとGlideRecordはテーブルのレコード情報を持つオブジェクトなので、カラムの値を返す
    • glideRecord.columncolumnのデータ型に依存する
    • この辺はまあ当たり前なのだが、glideRecord.loginTime(String)とか平気でされるので、
      ハマりポイントになりがち。ORM系のAPI全般でSNowに限った話ではないけど
  • ただSNowはTableにReferenceという独自の型を持つ
    • このReferenceもオブジェクトとして扱われ、テーブルの依存関係(SNowは一方向)や外部キーが持つ情報をオブジェクト化したもので、ドット演算子を用いて参照先のテーブルのカラムも取得可能(これがDot-Warkができる理由)
  • そのため、GlideRecord.refA.columnAみたいな書き方も可能
  • Reterence(Dot-Walk)の性質上、跨ぐテーブルに上限は(おそらく)ないため、
    Scriptとして記載されると、じゃあ返り値の型はなんなのかと曖昧になりバグの温床になる
    • しかもTable上はsys_idというランダムなハッシュ値を持つのでこいつを返すと勘違いしがち
var inc = new GlideRecord('incident');
inc.addQuery('user', 'John Doe');
inc.query();
inc.next();
inc.userName        // incidentテーブルのuserNameカラム(String)
inc.userID          // incidentテーブルのuserIDカラム(Referenceオブジェクト)
inc.userID.userRole // userIDからDot-Warkingした先のテーブル(≠incidentテーブル)のuserRoleカラム>
inc.sys_id          // incidentテーブルのsys_id