System Property(システムのプロパティ)とは何か
System Propertyのイメージ
一般的なシステムにおける”システムのプロパティ(設定)”と同じで、ServiceNowのSystem Propertyは、システムに関する設定値やそれを保持するためのレコードを指します。System PropertyはServiceNowの標準機能から利用されたり、カスタム機能から利用します。
1つ1つのSystem Propertyは、名前と値のペアです。具体例としては次のようなものがあります。
名前 | 説明 | 値の例 |
---|---|---|
glide.sys.default.tz | ユーザのタイムゾーンの初期値 | US/Pacific |
glide.email.smtp.active | メール通知を有効化するかどうか | true |
glide.ui.session_timeout | セッションがタイムアウトするまでの時間(分) | 60 |
com.glide.attachment.max_size | 添付ファイルの最大サイズ(MB) | 1024 |
System Propertyにはデータ型があり、データ型によって様々な値を取りえます。
実態はDB上の1つのテーブル
ServiceNowでは、ユーザや部署といったマスタ系のデータも、インシデントなどの業務系のデータも、ログ系のデータも、システムの設定値でさえも、あらゆるデータが1つのDB上に格納されます。System Propertyも例外ではなく、System PropertyはSystem Property[sys_properties]テーブル、またはそのテーブルに含まれるレコードです。
ServiceNowには様々な機能が存在しますが、それら全ての機能に関する設定値(プロパティ)を1つのSystem Propertyテーブルで管理しています。もちろん、各機能ごとに、名前と値のペアで完結しないような複雑な設定(マスタと呼んでもよい)を保持する必要がある場合は、専用のテーブルを持っている場合も多いです。
System Property ≒ グローバル定数
System Propertyはグローバルな定数と考えることもできます。ServiceNowはノーコード・ローコードプラットフォームではありますが、標準機能にコードが含まれていたり、カスタマイズにおいてコーディングを行うことがあります。その際に、数値や文字列をハードコーディングすることを避けるために、値をSystem Propertyに持たせておき、スクリプトからはその値を動的に取得するという作りにすることがあります。
System Propertyの設定方法
設定方法については下記の記事でまとめていますので、併せて参照ください。
System Propertyのtips
最後に、System Propertyについて知っておくべきtipsを何点か共有します。
PrivateなSystem Property
System Propertyには、Privateという概念が存在します。PrivateなSystem Propertyの設定はそのインスタンスのみで有効な設定となり、別のインスタンスに移送されません。
具体例として、インスタンスのメール送信可否(メール送信On/Off)を制御するSystem Property “glide.email.smtp.active”はPrivateになっています。つまり、開発環境でメール送信設定をTrueにしても、その設定が検証環境や本番環境に移送されることはなく、検証環境や本番環境でTrueにするためには各環境で個別にTrueに設定する必要があるということです。
スクリプトから使うときはgs.getProperty()
サーバ側スクリプトからプロパティ値を取得したい場合はgs.getProperty()関数を用います。第二引数は任意引数ですが、存在しなかった場合に動かなくならないように必ず設定するようにしましょう。なお、”gs”は”GlideSystem”クラスのインスタンスで、サーバ側スクリプトからは特に宣言しなくても使えるようになっています。
var p = gs.getProperty(<プロパティ名>, <見つからなかった場合に返される値>);
具体例として、ユーザのログイン失敗回数の最大値を表すSystem Property “glide.user.max_unlock_attempts”を取得する標準のコードは次のようになっています。第二引数が初期値兼エラーハンドリングになっていることがわかります。
var maxUnlockAttempts = gs.getProperty("glide.user.max_unlock_attempts", 5);
なお、クライアント側スクリプトから取得したい場合は、GlideAjaxでScript Includeを呼び出し、Script Include内で上述の方法で取得するようにします。
System Propertyの変更が反映されない場合は”cache.do”
System Propertyの変更が反映されない場合は、インスタンス側で古い値がキャッシュされている可能性があります。インスタンスのキャッシュはフィルタナビゲータに”cache.do”を打ち込むことでクリアすることができます。
また、画面に影響を与える変更は、ブラウザキャッシュが影響を与えている可能性もあるので、ブラウザのキャッシュも消去してみるとよいです。
以上です。
コメント