概要
ServiceNowのテーブルにはレコードに自動番号を割り振る機能が存在します。この番号を割り振ることで、そのテーブル内でのレコードを認識しやすくすることができます。今回はこの自動番号を設定する方法やTipsを紹介していきます。
基本設定
自動番号を設定する方法
自動番号を設定するにはテーブル作成時に設定することができます。
コントロールタブの"自動番号"にチェックを付けることで、以下のフィールドを設定することになります。
フィールド名 | 説明 |
---|---|
プレフィックス | 番号の前に着ける文字列を設定します。作成するテーブルをイメージしやすい文字列にするのが一般的です。 |
番号 | レコード作成時に最初の割り振られる番号です。この番号から+1ずつ割り振られていきます。 |
桁数 | 番号の桁数を設定します。 |
自動番号の設定画面
フィルターナビゲーターで[システム定義] > [番号のメンテナンス]に遷移することで、全ての自動番号を管理しているテーブル[sys_number]にたどり着くことができます。
このテーブルでは、上記のフィールドを編集できるほか、現在の番号のカウントを記録しているので、カウンタ編集することで、次に作成されるレコードの番号を編集後のカウンタから始めることができます。
↓の関連リンクの”カウンタを表示”をクリックすることで、カウンタ編集画面に遷移します。
TIPS1 番号の抜けを解決する
インスタンスのデフォルト設定では、番号のカウントはレコードが挿入された時ではなく、新規でフォーム画面を表示した段階でカウントされてしまいます。この場合、新規でレコードを作成しようとしたが"やめた"という時に、番号がカウントされ、次にレコードを作成する時に、1つ進んだ番号でレコードが作成されてしまいます。
解決方法
フィルターナビゲーターでシステムプロパティ > システムに遷移し、以下のプロパティをアクティブします。
これをアクティブにすることで、レコード作成時は番号フィールドは空ですが、空のまま作成することで、自動で未使用の番号を割り振ってくれるようになります。
※レコード作成時に番号フィールドが書き込める状態になっているので、意図しない番号が書き込まれないように、読み取り専用にすることをオススメします。
TIPS2 番号を一意なものに設定する。
普通に利用する場合、番号が被ることはめったにないですが、【運用中にカウンタの番号を変更した】、【スクリプトで番号を制御している】等を行っている場合、番号が一意ではなくなる可能性があります。
解決方法
挿入時のビジネスルールを作成しスクリプトを作成します。
公式ドキュメント:Enforcing unique numbering
注意
以下の一意フィールドを設定する方法もありますが、この場合、番号が重複した場合レコードは挿入できずエラーになるため、直接的な解決方法にはなりません。
番号フィールドの設定画面フォームから”一意”フィールドのチェックボックスをTrueにしてください。
"一意"フィールドない場合は、フォームを編集し表示してください。
※設定時点で存在するレコードの番号フィールドが一意である必要があります。
TIPS3 既存テーブルに番号を付ける
既に存在するテーブルにも番号フィールドを付けることが可能です。
解決方法
フィルターナビゲーター>システム定義>番号メンテナンスに遷移します。
新規ボタンを入力し、基本設定通りにフォームを入力します。テーブルフィールドには番号を追加したいテーブルを参照させます。
上記のレコードを追加することでテーブルに自動で番号フィールドが追加されます。
TIPS4 番号が自動で割り振られる処理を理解する。
そもそもこの番号はどのような処理で割り振られているのでしょうか?実はビジネスルールが存在します。
番号フィールドの設定フォームのデフォルト値を見てみましょう。
またビジネスルールテーブルを確認すると、上記のルールが存在していることが分かります。
デフォルト値はjavascriptを実行してglobalテーブルのgetNextObjNumberPaddedを実行した結果を返した値ということになります。