カスタム コードでのエンティティ検索定義の再利用

 

公開日: 2016年11月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2013、Dynamics CRM 2015、Dynamics CRM 2016

Unified Service Desk のエンティティ検索は、開発者がプログラムでカスタム コードに既存のエンティティ検索定義を使用して Microsoft Dynamics 365 データを検索できるように、開発者向けのサービスとして公開されています。Unified Service Desk のエンティティ検索は、FetchXML を使用して Dynamics 365 Web サービスに対してクエリを出し、データを返します。 エンティティ検索の定義の詳細については、「統合サービス デスクのエンティティ検索を使用したデータ検索」を参照してください。

エンティティ検索を設定するときに、検索結果セット全体を返すか、パフォーマンスを高速化するためにページング Cookie を使用して大きなデータセットの FetchXML 結果をページングするかを選択することができます。 FetchXML でページング Cookie を使用する方法の詳細については、「FetchXML による大量の結果セットのページング」を参照してください。

コードではデータを返すために FetchXML 定義ではなくエンティティ検索名を使用するため、エンティティ検索名を変更せずに Unified Service Desk のエンティティ検索の基になる FetchXML クエリ定義を更新すると、カスタム コントロール コードの更新、再コンパイル、クライアント コンピューター上への再配布を行う必要がありません。

新しい EntitySearchRequest メッセージを使用して要求を作成し、要求をパラメーターとして EntitySearchService.GetEntitySearchResults に渡して、応答を取得します (EntitySearchResponse)。

このトピックの内容

EntitySearchRequest オブジェクトの作成

要求オブジェクトの実行

EntitySearchRequest オブジェクトの作成

EntitySearchRequest メッセージがオーバーロードされるので、レコードがどのように返されることを望むかに応じて、次の 3 つのコンストラクターのいずれかを使用して要求オブジェクトを作成する必要があります。 これら 3 つのコンストラクターのいずれかを使用せずに要求オブジェクトを作成することはサポートされていません。 要求オブジェクトでエンティティ検索名を使用する前に、Dynamics 365 インスタンスの Unified Service Desk でエンティティ検索が既に定義されていることを確認します。

  • エンティティ検索名だけを使用して要求オブジェクトを作成します。 エンティティ検索の結果としてすべてのレコードを返すには、このコンストラクターを使用します。

    EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName);
    
  • エンティティ検索名と返されるレコードの最大数を使用して要求オブジェクトを作成します。 エンティティ検索の結果として返されるレコードの数を制限するには、このコンストラクターを使用します。

    EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName, int maxCount);
    

    ヒント

    すべてのレコードを返すには、maxCount パラメーターを 0 に指定します。

  • エンティティ検索名、ページごとの数、ページ番号、ページング Cookie を使用して要求オブジェクトを作成します。 パフォーマンスを高速化するために大きなデータセットをページで返すには、このコンストラクターを使用します。

    pageCount パラメーターは、ページごとに返されるレコードの数を定義します。pageNumber パラメーターは、データを返すための結果セットのページ番号を定義します。 たとえば、クエリが 500 件のレコードを返す場合、pageCount50 と指定して 1 ページに 50 件のレコードを返すことができ、これは 10 ページ分のデータとなることを意味します (50 件のレコード * 10 ページ = 500 件)。 レコード 100 - 150 を返すには、pageNumber の値を 3 に指定します。 結果セットの最初のページを取得するには、pageCookieempty に指定する必要があります。

    EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName, int pageCount, int pageNumber, string pageCookie);
    

    注意

    ページで結果を取得するためにこのコンストラクターを使用して要求オブジェクトを実行すると、要求オブジェクトの EntitySearchResponse.HasMoreRecords プロパティがさらにレコードがあるかどうかを示します (値=1)。 また、EntitySearchResponse.PageCookie プロパティの値が現在の結果から返されたページング Cookie に設定されます。

要求オブジェクトの実行

EntitySearchService. GetEntitySearchResults メソッドを使用して、前のセクションで説明したように作成された要求オブジェクトを実行します。 このメソッドは EntitySearchRequest オブジェクトを実行し、エンティティ検索結果とともに EntitySearchResponse オブジェクトを返します。

既存のエンティティ検索を再利用してページで結果を取得する方法を次のコード サンプルに示します。

// Define parameters for the entity search request object.
string entitySearchName = "Sample Entity Search"; // Name of the entity search record defined in Unified Service Desk
int pageCount = 10; // Retrieve 10 records per page.
int pageNumber = 0;
string pageCookie = String.Empty; // Retrieve the first page of the result set.

var entityService = AifServiceContainer.Instance.GetService<IEntitySearchService>();

// Create a request object.
EntitySearchRequest entitySearchRequest = new EntitySearchRequest(searchName, pageCount, pageNumber, pageCookie);

bool hasMoreRecords = true;

while (hasMoreRecords)
{
   entityService.GetEntitySearchResults(entitySearchRequest, (entitySearchResponse) =>
   {
      foreach (Entity e in entitySearchResponse.Entities)
      {
         Console.WriteLine("Entity with id:\"{0}\" retrieved", e.Id);
      }
      if (entitySearchResponse.HasMoreRecords)
      {
         pageNumber++;
         pageCookie = entitySearchResponse.PageCookie;
         entitySearchRequest = new EntitySearchRequest(searchName, pageCount, pageNumber, pageCookie);
      }
      else
      {
         hasMoreRecords = false;
      }
   });
}

関連項目

統合サービス デスクのエンティティ検索を使用したデータ検索
DoSearch

Unified Service Desk 2.0

© 2017 Microsoft. All rights reserved. 著作権