レポートでの動的 JavaScript フィルターの作成DescriptionServiceNow プラットフォームのレポートシステムには、レポートモジュールでレポート基準から直接動的なレポートフィルター条件を作成できるという非常に便利な機能があります。この条件は JavaScript で作成し、レポート条件フィルターの一部として構成できるため、特定の値を動的な JavaScript 関数に置き換えることができます。この KB 記事では、レポートでこのような動的フィルターを作成および構成するためのプロセスについて説明します。 手順 このような動的な条件ステートメントを使用してレポートを作成する場合、基本的にはフィルターの条件値ステートメントに JavaScript の URL を指定します。技術的には JavaScript のコマンドをフィールドに直接入力することもできますが、ほとんどの場合、単一のステートメントより長いスクリプトについては固有のレコード内に配置し、レポート条件の値フィールドにはそのレコード内の関数の呼び出しを指定します。この記事では、特定のレポートのフィルター条件の一部として、評価用の動的 JavaScript ステートメントを追加する方法について説明します。 このような動的な JavaScript ステートメントまたは関数を追加するには、まず、ステートメントを追加する対象となるレポートを編集用に開きます。または、新規に作成するレポートに対して動的な JavaScript の条件値を設定することもできます。 レポートの他の情報 (データソース、レポートタイプなど) を設定したら、レポートビューの右側にあるフィルターアイコンをクリックして、編集するフィルター条件を開きます。 まず、レポートターゲットフォームのサポート対象フィールドに対応するフィルター条件を選択し、サポート対象演算子を選択します。フィールドタイプと演算子の組み合わせによって、動的な JavaScript ステートメントを指定できる場合とできない場合があることに注意してください。現在、指定できることがわかっているフィールドタイプと演算子は次のとおりです。 フィールドタイプ使用できる演算子想定される戻り値のデータタイプSys ID (GUID)「is」、「is not」、「is one of」、「starts with」、「ends with」、「contains」、「does not contain」、「between」、「greater than or is」、「less than or is」 sys_id 値の全体または一部のテキスト表現。 「is one of」演算子の場合、想定される戻り値の型は、sys_id 値のカンマ区切りリスト、または結果に含める必要がある各 sys_id の配列のいずれかになります。 フリーテキスト文字列「is」、「is not」、「is one of」、「starts with」、「ends with」、「contains」、「does not contain」、「between」、「greater than or is」、「less than or is」 1 文字以上のテキスト。 「is one of」演算子の場合、想定される戻り値の型は、文字列値のカンマ区切りリスト、または「is one of」検索値フィールドに含める各値の配列のいずれかになります。 参照「starts with」、「ends with」、「contains」、「does not contain」テーブルまたはデータソースのこのフィールドにある値または値の一部を表す 1 文字以上のテキスト。文字列 (他のテーブルの参照)「contains」、「starts with」、「ends with」、「does not contain」テーブルまたはデータソースのこのフィールドにある値または値の一部を表す 1 文字以上のテキスト。ユーザー入力「is」、「is not」テーブルまたはデータソースのこのフィールドの一部のレコードの完全な値を表すテキスト文字。テーブル名「is」、「is not」、「is one of」、「starts with」、「ends with」、「contains」、「does not contain」、「between」、「greater than or is」、「less than or is」 システムのテーブル名の全体または一部のテキスト表現。 「is one of」演算子の場合、想定される戻り値の型は、テーブル名の値のカンマ区切りリスト、または結果に含める必要がある各テーブル名の配列のいずれかになります。 テンプレート値「is」、「is not」インスタンス内のテンプレートの値を満たすテキスト文字。ドメイン ID「starts with」、「ends with」、「contains」、「does not contain」 テーブルまたはデータソースのこのフィールドにある値または値の一部を表す 1 文字以上のテキスト。 ユーザーロール「is」、「is not」 ユーザーロールの文字列値のテキスト表現。 ドメインパス「starts with」、「ends with」、「contains」、「does not contain」、「is」、「is not」、「is one of」、「less than or is」、「greater than or is」、「between」 テーブルまたはデータソースのこのフィールドにある値または値の一部を表す 1 文字以上のテキスト。 「is one of」演算子の場合、想定される戻り値の型は、テキスト値のカンマ区切りリスト、または含める必要がある各値の配列オブジェクトのいずれかになります。 翻訳されたテキスト「is」、「is not」、「is one of」、「starts with」、「ends with」、「contains」、「does not contain」、「between」、「greater than or is」、「less than or is」 テキスト値。 「is one of」演算子の場合、想定される戻り値の型は、テキスト値のカンマ区切りリスト、またはテキスト値の配列のいずれかになります。 翻訳されたフィールド「is」、「is not」、「is one of」、「starts with」、「ends with」、「contains」、「does not contain」、「between」、「greater than or is」、「less than or is」 テキスト値。 「is one of」演算子の場合、想定される戻り値の型は、テキスト値のカンマ区切りリスト、またはテキスト値の配列のいずれかになります。 HTML「contains」、「does not contain」 このレポート条件で選択したフィールドのデータに対応するテキスト値。 HTML テンプレート「contains」、「does not contain」 このレポート条件で選択したフィールドのデータに対応するテキスト値。 メールスクリプト「contains」、「does not contain」[メールスクリプト (Email Script)] フィールドに入力する必要がある (または入力しない) 値を表すテキスト値。スクリプト (プレーン)「contains」、「does not contain」[スクリプト (Script)] フィールドに入力する必要がある (または入力すべきでない) 値を表すテキスト値。スクリプト (サーバー側)「contains」、「does not contain」[スクリプト (Script)] フィールドに入力する必要がある (または入力すべきでない) 値を表すテキスト値。スクリプト「contains」、「does not contain」比較対照の [スクリプト (Script)] フィールドに入力する必要がある (または入力すべきでない) 値を表すテキスト値。短いテーブル名「is」、「is not」 テキスト値 (40 文字未満)。 「is one of」演算子の場合、想定される戻り値の型は、テキスト値のカンマ区切りリスト、または短いテーブル名を表す各テキスト文字の配列のいずれかになります。 フィールド名「is」、「is not」、「is one of」、「starts with」、「ends with」、「contains」、「does not contain」、「between」、「greater than or is」、「less than or is」 フィールド名の値の全体または一部のテキスト表現。 「is one of」演算子の場合、想定される戻り値の型は、フィールド名の値のカンマ区切りリスト、または結果に含める必要がある各フィールド名の配列のいずれかになります。 注意: 「between」演算子では、異なる (または同じ) JavaScript の URL に対応する 2 つのフィールドが表示されます。「is」演算子の戻り値は、想定される型のデータ要素の配列にすることもできます。システムでは、この演算子は「is one of」演算子と同様に扱われます。 図からわかるように、特定のデータフィールドタイプを特定の演算子と組み合わせると JavaScript の URL を指定できるため、そのフィルター基準でカスタム検索関数を使用できます。 適切な基準と演算子を選択したら、比較値フィールドに JavaScript の URL を入力する必要があります。 単一行の JavaScript ステートメントの場合、JavaScript の URL は次のように値フィールドに入力する必要があります。 javascript:<JavaScript_Statement>; <JavaScript_Statement>は、想定される結果を返す有効な JavaScript ステートメントを表します。 多くのレコードタイプをフィルタリングするために使用される、単一ステートメントの JavaScript の URL 条件の一般的な例を次に示します。 javascript:gs.getUserName(); これは、選択したフィールド (以下の例では [更新者 (Updated by)]) に対して、現在インスタンスにログインしてレポートを実行しているユーザーのユーザー名と等しい値を返します。 ただし、前述のように、この JavaScript が 1 行の単純なスクリプトよりも複雑な場合、通常は、最初に独自のレコードにスクリプトを作成するのが最善の方法です。その場合は、このスクリプトを含むスクリプトインクルードレコードを作成する必要があります。適切なデータタイプと形式を返す関数を表していれば、既存のスクリプトインクルードレコードを使用することもできます。 そのため、関数の場合は、まず、適切な形式とデータタイプを返し、レポートでのフィルタリング対象となる特定のデータに適するスクリプトインクルードレコードを作成する必要があります。新しいスクリプトインクルードレコードを作成するには、インスタンス上の [システム定義] > [スクリプトインクルード (Script Includes)] を参照します。 スクリプトインクルードレコードで [クライアントコール可能 (Client callable)] チェックボックスをオンにする必要があります。これをオンにしないと、フィルターでレコードを呼び出すことができません。スクリプトインクルードレコードの記述名の値を指定します。この名前は、関数にアクセスする際も使用されます。レコードのスクリプトフィールドの実際のテキストの形式は、次のようになります。 var <Record_Name> = Class.create();<Record_Name>.prototype = Object.extendsObject(AbstractAjaxProcessor, { <Function_Name>: function(){ // Function Body // Function Body // Function Body return <Some_Value>; },type: '<Record_Name>'}); このスクリプトテンプレートでは、<Record_Name>はスクリプトインクルードレコード自体の名前、<Function_Name> は選択した関数名、<Some_Value> はレポートの検索条件に代入される特定の値に対応します。そのため、関数本体は、任意の数の JavaScript オブジェクト、Glide オブジェクトレコードクエリ、その他のステートメントとオブジェクトを使用して、ターゲットレポートがフィルタリングする特定の動的な値を計算します。 これらのフィルターフィールドにあるスクリプトコマンド (および呼び出されて実行されるオブジェクト関数) はレポートがロードされる前に実行されるため、これらのステートメントはサーバー側で実行され、サーバー側のスクリプティングオブジェクト (gs や gliderecord など) にアクセスできます。 スクリプトインクルードレコードが作成されて使用できる状態になったら、次は、適切な手順の値フィールドに JavaScript の URL を追加します。特定のスクリプトインクルードで宣言された関数を呼び出す場合、値フィールドは次のように表示されます。 javascript:new <Record_Name>().<Function_Name>(); ここでも、<Record_Name> はインスタンス化するオブジェクトと関数を含むスクリプトインクルードレコード名に対応しており、そのスクリプトインクルードレコードの特定の関数 <Function_Name> は、レポートのフィルター基準で比較される実際の値を返します。 JavaScript の URL には、計算を実行して結果を返す関数に渡される 1 つ以上のパラメーターを含めることもできます。たとえば、スクリプトインクルードレコードに 2 つのパラメーターを渡す JavaScript 関数は、javascript:new TextJSFilter().getGroupIDs("Professional Services","Sales"); のように記述できます。当然、スクリプトインクルードレコードのターゲット関数も、これらのパラメーターに対応するように変更する必要があります (たとえば、スクリプトインクルード内の関数宣言を getGroupIDs: function(primaryGroup,secondaryGroup) に変更します)。 使用される特定の演算子と選択したフィールドタイプによって、JavaScript ステートメントの戻り値の型または出力タイプが決まります。 たとえば、フィールドタイプが sys_id で、選択された演算子が「is」、「is not」、「greater than or is」、または「less than or is」の場合、単一の sys_id を表すステートメントが必要になります。 同様に、フィールドが標準のフリーテキスト文字列型または参照フィールドの場合、比較で使用するテキスト値を返す文字列を返す JavaScript ステートメントを指定する必要があります。 必要な JavaScript ステートメントと条件を追加し、レポートの残りの部分を設定したら、レポートを保存してテストし、想定される結果が返されて表示されることを確認する必要があります。