検索ソース結果をページネーション

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:4分
  • 検索ソースが一度に表示する結果の数を制限して、パフォーマンスを向上させます。エンドユーザーは、必要に応じてさらに多くの結果を読み込むことができます。

    始める前に

    必要なロール:admin または sp_admin

    このタスクについて

    シンプルな検索ソースにページネーションを追加する場合は、検索ソース レコードの [結果をページネーション] を true に設定します。ただし、詳細な検索ソースにページネーションを追加する場合は、結果の複数のページを処理するためにデータ フェッチ スクリプトも変更する必要があります。ユーザーがさらに検索結果をロードすると、検索ソースはデータ フェッチ スクリプトを再実行します。
    注:
    高度なファセットを使用して検索ソースをページネーションする場合は、各ページの結果に基づいてファセットをロードするようにファセット生成スクリプトを変更しないでください。ファセットを使用すると、エンド ユーザーはページ固有の結果ではなく、結果セット全体の結果をフィルタリングできます。

    手順

    1. プラットフォーム UI で、 サービスポータル > 検索ソース.
    2. 検索ソースを開いてページネーションを追加します。
    3. [データソース] タブで、[結果をページネーション (Paginate results)] を true に設定します。
      このフィールドを有効にすると、[結果をさらにロード] ボタンが検索結果ページに追加されます。このフラグにより、シンプルな検索ソースのページネーションが自動的に有効になります。
    4. オプション: 検索ソースが詳細な場合は、複数の検索結果ページを処理するようにデータ フェッチ スクリプトを変更します。
      検索ソースのスコープに応じて、次の GlideRecord API のいずれかを使用してデータ フェッチ スクリプトを更新します。
      スコープ 手法
      グローバル GlideRecord の setLocation() - グローバル
      スコープ対象のアプリケーション GlideRecord の chooseWindow() - スコープ指定

      次に、インシデント テーブルを照会して結果をページネーションするグローバル検索ソースのデータ フェッチ スクリプトの例を示します。

      // queryLocation is a special value injected into the script,
      // which holds the query_location property of the last item
      // in the previously fetched result set
      (function(query, queryLocation, count) {
      	var results = [];
      	var now_GR = new GlideRecord("incident");
      	gr.addQuery("123TEXTQUERY321", query);
      	gr.query();
      	// Here, we are utilizing queryLocation to implement pagination.
      	// In practice, there are many other ways to use the
      	// query_location value of the last item in the previous
      	// result set to implement pagination. Your implementation
      	// will vary by use case.
      	gr.setLocation(queryLocation - 1);
      
      	var resultCount = 0;
      	while(gr.next() && resultCount < count + 1) {
      		results.push({
      			label: gr.getDisplayValue(),
      			short_description: gr.getValue("short_description"),
      			// Here, we are populating the query_location
      			// property of each result item. This is how the
      			// framework knows what value to pass into the
      			// next fetched search result script execution
      			query_location: gr.getLocation(),
      			primary: gr.getDisplayValue(),
      			state: gr.getDisplayValue("state")
      		});
      		resultCount++;
      	}
      
      	if (results.length == 0)
      		return results;
      
      	if(results.length > count) {
      		results.pop();
      	} else {
      		// In order to indicate that a result in the result
      		// set is the final result (that there are
      		// no more results to be fetched), add this property
      		// to the final element in your result set.
      		results[results.length - 1].isLastResult = true;
      	}
      	return results;
      })(query, queryLocation, count, facets);

      追加の例については、ナレッジベースの検索ソースを参照してください。

    5. 検索ページ ウィジェットまたはファセット検索ウィジェット インスタンス オプションで、検索ソースのクエリごとの結果の最大数を定義します。

    タスクの結果

    検索ページは、定義された数の結果のみを一度に返します。ユーザーが [結果をさらにロード] を選択すると、検索ソースがクエリまたはデータ フェッチ スクリプトを再実行します。

    ページネーションされた結果