参照修飾子を使用して、参照フィールドに返されるデータをフィルタリングします。

参照フィールドには、別のテーブルのフィールドへのリンク (参照) が格納され、参照フィールドを含むフォームで参照テーブルのレコード/フィールドを使用できるようになります。

たとえば、インシデントテーブルの [アサイン先] フィールドは、ユーザー [sys_user] テーブルへの参照です。デフォルトでは、参照されているフィールドのすべての値が、参照ルックアップに表示され、参照フィールドから直接アクセスできます (先行入力)。前の例を拡張して、参照修飾子が定義されていない場合、ユーザーテーブルのすべてのユーザーが参照ルックアップに表示されます。非アクティブなユーザーを含みます。場合によっては、これが必要な機能になることもあります。ただし、利用可能な値のサブセットのみが必要な場合もあります。この場合、参照修飾子を作成して使用可能なデータをフィルタリングし、必要な値のみが返されてフォームで使用できるようにします。アクティブユーザーまたは特定のロールを持つユーザーのみなどです。参照修飾子は堅牢であり、単純な AND/OR 条件、インライン JavaScript、または複雑なスクリプトインクルードで構成できます。

[辞書エントリ]フォームから参照修飾子を定義することにより、テーブルおよびそのテーブルを基にしているテーブル (親または拡張) の参照修飾子を変更できます。また、 辞書オーバーライドを使用して、拡張テーブルとその子 (親テーブルではない) のみの参照修飾子を変更することもできます。定義できる参照修飾子は、フィールドごと、フォーム/テーブルごとに 1 つだけです。参照修飾子は条件ビルダーには適用されません。条件ビルダーでのフィルタリングの使用方法については、「動的フィルターオプションを作成する」を参照してください。
注:
  • 参照修飾子を作成するには、基礎となる ServiceNow データモデル (テーブルとフィールド) の知識と、Web サービススクリプトの知識が必要です。
  • 特定のユーザーがアクセスできるデータを制限するには、参照修飾子ではなく ACL を使用します。

参照修飾子は、次のいずれかの方法で定義できます。

簡易参照修飾子

簡易参照修飾子では、AND/OR ステートメント (条件) を使用して単純なフィルターを作成します。会社がアクティブか、ユーザーが特定のロールを持っているか、または発信者が特定のタイムゾーンにいるかなどの条件でフィルタリングする場合は、簡易参照修飾子を使用します。簡易参照修飾子には、最大 13 の参照修飾子条件を設定できます。条件ビルダーの使用方法の詳細については、「条件ビルダー」を参照してください。

図 : 1. 簡易参照修飾子の例
簡易参照修飾子

動的参照修飾子

動的参照修飾子を使用すると、動的フィルターの作成オプションを使用して参照フィールドに対してクエリを実行し、返されたデータセットをフィルタリングできます。動的フィルターオプションは、エンコードされたクエリ文字列、JavaScript、またはスクリプトインクルードを含むことができる保存されたフィルターであり、複数の動的参照修飾子で使用できます。動的フィルターオプションに加えられた変更は、同じ動的フィルターオプションを使用するすべての参照修飾子に自動的に適用されます。複数のフォームで同じフィルターを使用する場合、または「コードに精通していない」実装者にフィルター機能を提供する場合に、このタイプの参照修飾子を使用します。

ベースインスタンスは、いくつかの OOB 動的フィルターオプションを提供します。ニーズを満たす動的フィルターオプションが存在しない場合は、要件に固有の新しい動的フィルターオプションを作成できます。OOB 動的フィルターオプションの例として、コンピューターフォームなどの構成アイテムフォームの [モデル ID] フィールドの参照修飾子があります。参照修飾子は、CI モデル修飾子動的フィルターオプションを呼び出します。これにより、ModelAndCategoryFilters スクリプトインクルードが呼び出されます。このスクリプトインクルードは、CI のクラスに基づいてデータセットをフィルタリングします。モデル ID のオプションは、現在の CI と同じクラスに属するオプションのみです。たとえば、コンピューターフォームの [モデル ID] フィールドで使用できるのは、Computer クラスに属する CI のみです。

使用可能な動的フィルターオプションを見つけるには、[システム定義][動的フィルターオプション] に移動します。[動的フィルターオプション] リストの右隅にあるフィルターアイコンをクリックし、「参照資格が true の場合に利用可能」というフィルダー条件を作成します。動的参照修飾子で使用できるすべての動的フィルターオプションが表示されます。
図 : 2. 動的参照修飾子の例
動的参照修飾子

詳細参照修飾子

詳細参照修飾子を使用すると、参照修飾子の [参照修飾子] フィールドで、インラインエンコードクエリ文字列または JavaScript (実際のコード、または既存のスクリプトインクルードやビジネスルールの名前) フィルターを直接定義できます。他の参照修飾子タイプと同様に、フォームがロードされるときにフィルターが実行され、フィルターに一致するレコードのみが参照フィールドに表示されます。このタイプの参照修飾子は、簡易参照修飾子では処理できず、複数の参照フィールドで使用されない、単純な一意のフィルターのみを必要とする実装に使用します。
注: グローバルビジネスルールの代わりにスクリプトインクルードで JavaScript で関数を呼び出すことをお勧めします。
エンコードされたクエリ文字列の例として、ベンダーとして指定されたすべての会社を返す vendor = true があります。この文字列の入力は、簡易参照修飾子の例に示されている条件ビルダーの使用と同じです。有効なエンコードされたクエリ文字列の構文の詳細と例については、「エンコードされたクエリ文字列」を参照してください。
図 : 3. 詳細参照修飾子の例
詳細参照修飾子にエンコードされたクエリ文字列
JavaScript 呼び出しの例は javascript:new myScriptInclude().my_refqual() です。このコードは、スクリプトインクルード myScriptInclude() で関数 my_refqual() を呼び出します。この関数は、参照フィールドで使用可能なオプションをフィルタリングできるクエリ文字列を返す必要があります。
注: javascript:'u_active=true^' + "u_hr_service="+current.hr_service のようなエンコードされた JavaScript フィルターを参照修飾子で使用することもできます。
別の例で、現在の会社に基づいてフィルタリングしようとしている場合、ルックアップスクリプトを使用する必要はなく、動的修飾子に次の行を追加するだけで済みます。
return "company=" + current.company;
これを簡略化して、動的なものの代わりに詳細参照修飾子を使用することもできます。
javascript:"company=" + current.company
詳細参照修飾子にエンコードされたクエリ文字列の例 2

関連リストと参照修飾子

フィールドが単一のフォームビューの複数の関連リストに表示される場合、フィールドの参照修飾子を適切にビルドするために、どの関連リストが参照されているかを検証する必要がある場合があります。この状況では、関連リストのリストコントロールを構成し[リスト編集タグ] フィールドに一意のタグを入力します。このタグ値は、listEditRefQualTag という名前の変数としてスクリプトをフィルタリングするために使用できます。次のスクリプトインクルードコードは、このタイプのタグを使用する関数の例です。
// Advanced reference qualifier on the CI Relationship Child field that takes into account
// the related list that we are editing the child field on, if the field is being edited
// from a tagged related list. 
 
 cmdb_rel_ci_child_refQual:function(){ 
 
  if(listEditRefQualTag =="application") return "sys_class_name = cmdb_ci_appl";
 
  if(listEditRefQualTag =="database") return "sys_class_name = cmdb_ci_database"
 
  }

参照修飾子での Javascript の current 構文の使用

current は、アクティブな (現在の) レコードのフィールドとフィールド値を含む JavaScript オブジェクトです。フォームの場合、これはフォームに表示される (ロードされる) レコードです。詳細および動的参照修飾子内では、JavaScript current オブジェクトを使用して、javascript:"company=" + current.company などのフィルターを定義できます。

この JavaScript は、参照修飾子内で、現在のレコードの会社フィールド値と等しい参照テーブルからのレコードのみを返します。したがって、[会社] フィールドに表示される値が Acme の場合、JavaScript は、company 値が Acme に等しい (company = "Acme") すべての参照フィールドレコードを返します。その後、company 値が「ViewRite」であるレコードを起動すると、JavaScript は company = "ViewRite" に解決されます。

現在ロードされているフォーム (テーブル) 内のすべてのフィールドは、 current オブジェクトで使用できます。ドット連結を使用して、参照テーブルを含むテーブルの値にアクセスします。たとえば、インシデントフォームでは、[アサイン先] フィールドは、ユーザーテーブルを参照します。ユーザーのメールアドレスにアクセスするには、次の構文を使用します:javascript:"emailAddress=" + current.assigned_to.email